jjb-lc-designable
Version:
基于alibaba-designable源码二次封装的表单设计器。
101 lines • 3.26 kB
JavaScript
import React, { useState } from 'react';
import { TextWidget, usePrefix } from 'jjb-lc-designable/react';
import { Menu } from 'antd';
import { MonacoInput } from 'jjb-lc-designable/react-settings-form';
import { isPlainObj, reduce } from 'jjb-lc-formily/shared';
import { FieldProperties } from './properties';
const template = code => {
if (!code) return;
return code.trim();
};
export const FieldPropertySetter = props => {
const [selectKeys, setSelectKeys] = useState(['visible']);
const prefix = usePrefix('field-property-setter');
const value = {
...props.value
};
const parseExpression = expression => {
if (!expression) return '';
return String(expression).match(/^\{\{([\s\S]*)\}\}$/)?.[1] || '';
};
const filterEmpty = value => {
return reduce(value, (buf, value, key) => {
if (!value || value === '{{}}') return buf;
buf[key] = value;
return buf;
}, {});
};
const currentProperty = FieldProperties.find(item => item.key === selectKeys[0]);
return /*#__PURE__*/React.createElement("div", {
className: prefix
}, /*#__PURE__*/React.createElement(Menu, {
mode: "vertical",
style: {
width: 200,
height: 300,
paddingRight: 4,
overflowY: 'auto',
overflowX: 'hidden'
},
defaultSelectedKeys: selectKeys,
selectedKeys: selectKeys,
onSelect: ({
selectedKeys
}) => {
setSelectKeys(selectedKeys);
}
}, FieldProperties.map(key => {
if (isPlainObj(key)) {
return /*#__PURE__*/React.createElement(Menu.Item, {
key: key.key
}, /*#__PURE__*/React.createElement(TextWidget, {
token: `SettingComponents.ReactionsSetter.${key.token || key.key}`
}));
}
return /*#__PURE__*/React.createElement(Menu.Item, {
key: key
}, /*#__PURE__*/React.createElement(TextWidget, {
token: `SettingComponents.ReactionsSetter.${key}`
}));
})), /*#__PURE__*/React.createElement("div", {
className: prefix + '-coder-wrapper'
}, /*#__PURE__*/React.createElement("div", {
className: prefix + '-coder-start'
}, `$self.${selectKeys[0]} = (`, /*#__PURE__*/React.createElement("span", {
style: {
fontSize: 14,
marginLeft: 10,
color: '#888',
fontWeight: 'normal'
}
}, '//', ' ', /*#__PURE__*/React.createElement(TextWidget, {
token: "SettingComponents.ReactionsSetter.expressionValueTypeIs"
}), ' ', '`', currentProperty?.type, '`')), /*#__PURE__*/React.createElement("div", {
className: prefix + '-coder'
}, /*#__PURE__*/React.createElement(MonacoInput, {
key: selectKeys[0],
language: "javascript.expression",
extraLib: props.extraLib,
helpCode: template(currentProperty?.helpCode),
value: parseExpression(value[selectKeys[0]]),
options: {
lineNumbers: 'off',
wordWrap: 'on',
glyphMargin: false,
folding: false,
lineDecorationsWidth: 0,
lineNumbersMinChars: 0,
minimap: {
enabled: false
}
},
onChange: expression => {
props.onChange?.(filterEmpty({
...value,
[selectKeys[0]]: `{{${expression}}}`
}));
}
})), /*#__PURE__*/React.createElement("div", {
className: prefix + '-coder-end'
}, `)`)));
};