d-render
Version:
基于 Element Plus 二次封装的数据驱动渲染组件库 - 表单、搜索表单、表格配置化渲染
91 lines (88 loc) • 3.06 kB
JavaScript
import { isArray, isInputEmpty } from '@d-render/shared';
var __defProp = Object.defineProperty;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
const isEmptyFilterValue = (value) => {
if (isInputEmpty(value))
return true;
return isArray(value) && value.length === 0;
};
const resolveFilterMultiple = (config) => {
var _a, _b;
const configRecord = config;
return (_b = (_a = config.filterMultiple) != null ? _a : configRecord["filter-multiple"]) != null ? _b : true;
};
const resolveColumnKey = (key, config) => {
var _a;
return (_a = config.columnKey) != null ? _a : key;
};
const collectFilterableColumns = (columns = []) => {
return columns.reduce((acc, column) => {
const { key, config } = column;
if (config.hideItem)
return acc;
if (isArray(config.children) && config.children.length > 0) {
acc.push(...collectFilterableColumns(config.children));
return acc;
}
if (config.filters !== void 0) {
acc.push({
key,
columnKey: resolveColumnKey(key, config),
filterMultiple: resolveFilterMultiple(config)
});
}
return acc;
}, []);
};
const tableFilteredValuesToModel = (filteredValues = {}, filterableColumns = []) => {
const model = {};
filterableColumns.forEach(({ key, columnKey, filterMultiple }) => {
const values = filteredValues[key];
if (!(values == null ? void 0 : values.length))
return;
model[columnKey] = filterMultiple ? [...values] : values[0];
});
return model;
};
const modelToTableFilteredValues = (model = {}, filterableColumns = []) => {
const filteredValues = {};
filterableColumns.forEach(({ key, columnKey, filterMultiple }) => {
const value = model[columnKey];
if (isEmptyFilterValue(value)) {
filteredValues[key] = [];
return;
}
if (filterMultiple) {
filteredValues[key] = isArray(value) ? value.map(String) : [String(value)];
return;
}
filteredValues[key] = [String(value)];
});
return filteredValues;
};
const mergeTableFilterModel = (target, source, filterableColumns = []) => {
const next = __spreadValues({}, target);
filterableColumns.forEach(({ columnKey }) => {
if (isEmptyFilterValue(source[columnKey])) {
delete next[columnKey];
} else {
next[columnKey] = source[columnKey];
}
});
return next;
};
export { collectFilterableColumns, mergeTableFilterModel, modelToTableFilteredValues, tableFilteredValuesToModel };