jjb-lc-designable
Version:
基于alibaba-designable源码二次封装的表单设计器。
46 lines • 1.27 kB
JavaScript
import { uid, clone, toArr } from 'jjb-lc-formily/shared';
export const traverseTree = (data, callback) => {
for (let i = 0; i < data.length; i++) {
callback(data[i], i, data);
if (data[i]?.children) {
traverseTree(data[i]?.children, callback);
}
}
};
export const transformValueToData = value => {
const data = clone(value);
traverseTree(data, (item, i, dataSource) => {
const dataItem = {
key: '',
duplicateKey: '',
map: [],
children: []
};
for (const [key, value] of Object.entries(dataSource[i] || {})) {
if (key !== 'children') dataItem.map.push({
label: key,
value: value
});
}
const uuid = uid();
dataItem.key = uuid;
dataItem.duplicateKey = uuid;
dataItem.children = dataSource[i].children || [];
dataSource[i] = dataItem;
});
return data;
};
export const transformDataToValue = data => {
const value = clone(data);
traverseTree(value, (item, i, dataSource) => {
const valueItem = {
children: []
};
toArr(dataSource[i].map).forEach(item => {
if (item.label) valueItem[item.label] = item.value;
});
valueItem.children = dataSource[i]?.children || [];
dataSource[i] = valueItem;
});
return value;
};