d-render
Version:
基于 Element Plus 二次封装的数据驱动渲染组件库 - 表单、搜索表单、表格配置化渲染
42 lines (39 loc) • 1.19 kB
JavaScript
import { getFieldValue, isEmpty, isArray } from '@d-render/shared';
const resolveRowKeyGetter = (rowKey) => {
if (typeof rowKey === "function")
return rowKey;
if (typeof rowKey === "string" && rowKey)
return (row) => getFieldValue(row, rowKey);
return void 0;
};
const createRowMatcher = (model, rowKeyGetter) => {
const refSet = new Set(model);
if (!rowKeyGetter)
return (row) => refSet.has(row);
const keySet = /* @__PURE__ */ new Set();
model.forEach((item) => {
const key = rowKeyGetter(item);
if (!isEmpty(key))
keySet.add(key);
});
return (row) => {
if (refSet.has(row))
return true;
const key = rowKeyGetter(row);
return !isEmpty(key) && keySet.has(key);
};
};
const flattenTreeRows = (data = [], treeProps) => {
const childrenKey = treeProps == null ? void 0 : treeProps.children;
if (!childrenKey)
return data;
return data.reduce((acc, row) => {
acc.push(row);
const children = getFieldValue(row, childrenKey);
if (isArray(children)) {
acc.push(...flattenTreeRows(children, treeProps));
}
return acc;
}, []);
};
export { createRowMatcher, flattenTreeRows, resolveRowKeyGetter };