@antv/s2
Version:
effective spreadsheet render core lib
43 lines • 1.71 kB
JavaScript
import { isArray, isEmpty, isEqual, isString, mergeWith, uniq } from 'lodash';
import { DEFAULT_DATA_CONFIG } from '../common/constant/dataConfig';
import { DEFAULT_OPTIONS } from '../common/constant/options';
export const customMerge = (...objects) => {
const customize = (origin, updated) => {
if (isArray(origin) && isArray(updated)) {
return updated;
}
};
const args = [...objects, customize];
return mergeWith({}, ...args);
};
const uniqueFields = (fields) => {
const keys = ['rows', 'columns', 'values'];
const result = keys.reduce((r, key) => {
const list = fields[key];
const unique = uniq(list);
if (!isEqual(unique, list)) {
// eslint-disable-next-line no-console
console.warn(`fields.${key}:[${list}] should be unique`);
}
r[key] = unique;
return r;
}, {});
return Object.assign(Object.assign({}, fields), result);
};
export const setupDataConfig = (...dataConfig) => {
var _a;
const mergedDataCfg = customMerge(DEFAULT_DATA_CONFIG, ...dataConfig);
// fields 去重
mergedDataCfg.fields = uniqueFields(mergedDataCfg.fields);
// 自定义树和数值为空的场景, 关闭 数值置于列头
const isCustomRows = (_a = mergedDataCfg.fields.rows) === null || _a === void 0 ? void 0 : _a.some((field) => !isString(field));
const isEmptyValues = isEmpty(mergedDataCfg.fields.values);
if (isCustomRows || isEmptyValues) {
mergedDataCfg.fields.valueInCols = false;
}
return mergedDataCfg;
};
export const setupOptions = (...options) => {
return customMerge(DEFAULT_OPTIONS, ...options);
};
//# sourceMappingURL=merge.js.map