ssc-grid
Version:
React grid component for SSC 3.0
133 lines (129 loc) • 3.33 kB
JavaScript
// TODO: The publicly exposed parts of this should be in lib/SSCGridUtils.
function trimString(s) {
var l = 0;
var r = s.length - 1;
while (l < s.length && s[l] === ' ') {
l++;
}
while (r > l && s[r] === ' ') {
r -= 1;
}
return s.substring(l, r + 1);
}
function compareObjects(o1, o2) {
var k = '';
for (k in o1) {
if (o1[k] !== o2[k]) {
return false;
}
}
for (k in o2) {
if (o1[k] !== o2[k]) {
return false;
}
}
return true;
}
function itemExists(haystack, needle) {
var i = void 0;
for (i = 0; i < haystack.length; i++) {
if (compareObjects(haystack[i], needle)) {
return true;
}
}
return false;
}
/**
* 在objects中查找toSearch
* 原始版本:http://stackoverflow.com/a/8517170/4685522
* @param {String} toSearch
* @param {Object} objects 结构为
* ```json
* [
* { id: '1', name: 'n1', label: 'l1 n1' },
* { id: '2', name: 'n2', label: 'l2 n2' }
* ]
* ```
*/
export function searchFor(toSearch, objects) {
var results = [];
var i = void 0;
toSearch = trimString(toSearch); // trim it
for (i = 0; i < objects.length; i++) {
var key = void 0;
var object = objects[i];
// 遍历对象的每个键值对进行搜索
for (key in object) {
if (object.hasOwnProperty(key)) {
var value = object[key];
// 目前只搜索字符串类型的,对于Boolean等类型暂时不做处理
if (typeof value !== 'string') {
continue;
}
// 没有搜索到
if (value.indexOf(toSearch) === -1) {
continue;
}
// 搜索到之后先判断结果集是否已经存在该行数据了
if (!itemExists(results, object)) {
results.push(object);
}
}
}
}
return results;
}
/**
* 检查当前状态中是否所有行都被选中
* @param {Object} obj 一个包含所有行被选中状态的对象
* ```js
* {
* 0: { selected: true }, 第一行被选中
* 1: { selected: false } 第二行未被选中
* }
* ```
* @return {boolean} 如果是true说明所有行都被选中,否则有一行或者多行未被选中。
*/
export function isAllRowsSelected(obj) {
var ret = true;
var i = void 0;
for (i in obj) {
if (obj.hasOwnProperty(i)) {
ret = ret && obj[i].selected;
}
}
return ret;
}
/**
* 当输入的字段值合法的时候,直接返回原值
* 当输入的字段值不合法(比如定义为boolean但是输入null),根据字段类型,返回不同的默认值
* - boolean 默认值为false
* - enum 默认值为数组中第一个成员
* @param {Object} fieldModel
* @param {*} fieldValue
*/
export var getFieldDefaultValue = function getFieldDefaultValue(fieldModel, fieldValue) {
if (fieldValue) {
return fieldValue;
}
switch (fieldModel.type) {
case 'string': // 0
case 'double':
// 2
// 字符型初始为空字符串
return '';
case 'boolean':
// 4
// 布尔型默认是false
return false;
case 'enum':
// 6
// 如果是枚举型,默认使用第一个选项的值
return fieldModel.data[0].key;
case 'custom':
// 不处理自定义类型的字段
return fieldValue;
default:
break;
}
};