jjb-lc-designable
Version:
基于alibaba-designable源码二次封装的表单设计器。
54 lines • 1.89 kB
JavaScript
import React from 'react';
import { clone, toArr } from 'jjb-lc-formily/shared';
import { observer } from 'jjb-lc-formily/reactive-react';
import { IconWidget, TextWidget, usePrefix } from 'jjb-lc-designable/react';
import { traverseTree } from './shared';
import './styles.less';
export const Title = observer(props => {
const prefix = usePrefix('data-source-setter-node-title');
const getTitleValue = dataSource => {
const optionalKeys = ['label', 'title', 'header'];
let nodeTitle;
optionalKeys.some(key => {
const title = toArr(dataSource).find(item => item.label === key)?.value;
if (title !== undefined) {
nodeTitle = title;
return true;
}
return false;
});
if (nodeTitle === undefined) {
toArr(dataSource || []).some(item => {
if (item.value && typeof item.value === 'string') {
nodeTitle = item.value;
return true;
}
return false;
});
}
return nodeTitle;
};
const renderTitle = dataSource => {
const nodeTitle = getTitleValue(dataSource);
if (nodeTitle === undefined) return /*#__PURE__*/React.createElement(TextWidget, {
token: "SettingComponents.DataSourceSetter.defaultTitle"
});else return nodeTitle + '';
};
return /*#__PURE__*/React.createElement("div", {
className: prefix
}, /*#__PURE__*/React.createElement("span", {
style: {
marginRight: '5px'
}
}, renderTitle(props?.map || [])), /*#__PURE__*/React.createElement(IconWidget, {
className: prefix + '-icon',
infer: "Remove",
onClick: () => {
const newDataSource = clone(props?.treeDataSource?.dataSource);
traverseTree(newDataSource || [], (dataItem, i, data) => {
if (data[i].key === props.duplicateKey) toArr(data).splice(i, 1);
});
props.treeDataSource.dataSource = newDataSource;
}
}));
});