UNPKG

linkmore-design

Version:

🌈 🚀lm组件库。🚀

235 lines (224 loc) 7.37 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _react = _interopRequireWildcard(require("react")); var _button = _interopRequireDefault(require("../../../button")); var _form = _interopRequireDefault(require("../../../form")); var _iconFont = _interopRequireDefault(require("../../../icon-font")); var _select = _interopRequireDefault(require("../../../select")); var _constant = require("../../constant"); var _GhostRender = _interopRequireDefault(require("../../controls/GhostRender")); var _PopDropDown = _interopRequireDefault(require("../../controls/PopDropDown")); var _DynamicComponent = _interopRequireDefault(require("./DynamicComponent")); // Operator匹配项不存在时重置该字段value const useResetOperatorValueForVoid = ({ form, field, type, options }) => { const operator = _form.default.useWatch(['data', field.name, 'operator'], form); _react.default.useEffect(() => { if (type && operator) { const hasValue = options.some(({ value }) => value === operator); !hasValue && form.setFieldValue(['data', field.name, 'operator'], undefined); } }, [type, operator, options]); }; /** 动态表单值项 */ const DynamicFormValue = ({ field, type, form, options, fieldNames, ...restProps }) => { const operator = _form.default.useWatch(['data', field.name, 'operator'], form); const disabled = ['empty', 'not_empty'].includes(operator); // if (['empty', 'not_empty'].includes(operator)) return <div /> return /*#__PURE__*/_react.default.createElement(_form.default.Item, { name: [field.name, 'value'], noStyle: true }, /*#__PURE__*/_react.default.createElement(_DynamicComponent.default, (0, _extends2.default)({ disabled: disabled, type: type, operator: operator, options: options, fieldNames: fieldNames }, restProps))); }; // 高级筛选列表项 const ComplexItem = ({ form, field, remove, instance }) => { const { dataSource, locale, enableAutoString } = instance; const itemField = _form.default.useWatch(['data', field.name, 'field'], form); // const deleteDisabled = !(form.getFieldValue('data')?.length > 1) const activeItem = (0, _react.useMemo)(() => { const currentObj = dataSource?.find(v => v.field === itemField) || {}; if (!enableAutoString) return currentObj; const fieldNames = { label: 'label', value: 'value', ...(currentObj?.fieldNames || {}) }; return { ...currentObj, data: currentObj?.data?.map(v => ({ ...v, label: v?.[fieldNames.label], value: String(v?.[fieldNames.value]) })) }; }, [dataSource, itemField, enableAutoString]); const type = _react.default.useMemo(() => activeItem?.type || null, [activeItem]); // operator下拉数据 const operatorOptions = _react.default.useMemo(() => { return (0, _constant.getOpetatorGroup)(locale, activeItem?.fieldValueSource, activeItem?.fieldType)?.[type] || []; }, [type, activeItem]); useResetOperatorValueForVoid({ form, field, type, options: operatorOptions }); // 数据保存时的格式化: 字段类型切换时清空value(input不变时不需要清空) const fieldNormalize = value => { const currentType = dataSource?.find(v => v.field === value)?.type || null; const isResetValue = type !== 'input' || type !== currentType; // 对比type值的改变重置value if (value && isResetValue) { form.setFieldValue(['data', field.name, 'value'], undefined); } return value; }; // 数据保存时的格式化 const normalize = (value, prev) => { // 从 between 操作符切换时清空value(因为value组件不一样,值也不一样) if (prev === 'between') { form.setFieldValue(['data', field.name, 'value'], undefined); } // 切换为'空'/'不为空'时, 清空value if (['empty', 'not_empty'].includes(value)) { form.setFieldValue(['data', field.name, 'value'], undefined); } return value; }; return /*#__PURE__*/_react.default.createElement("div", { className: "complex_list_item" }, /*#__PURE__*/_react.default.createElement(_form.default.Item, { name: [field.name, 'field'], noStyle: true, normalize: fieldNormalize }, /*#__PURE__*/_react.default.createElement(_select.default, { options: dataSource, fieldNames: { label: 'title', value: 'field' } })), /*#__PURE__*/_react.default.createElement(_form.default.Item, { name: [field.name, 'operator'], noStyle: true, normalize: normalize }, /*#__PURE__*/_react.default.createElement(_select.default, { options: operatorOptions })), /*#__PURE__*/_react.default.createElement(DynamicFormValue, (0, _extends2.default)({ field: field, type: type, operator: form.getFieldValue(['data', field.name, 'operator']), options: activeItem?.data, fieldNames: activeItem?.fieldNames }, activeItem?.componentProps)), /*#__PURE__*/_react.default.createElement(_button.default, { type: "text", onClick: () => remove(field.name) // disabled={deleteDisabled} , danger: true, icon: /*#__PURE__*/_react.default.createElement(_iconFont.default, { type: "icon-a-shidia1qingchu" }) })); }; /** 添加按钮 */ const PopButton = ({ instance, add }) => { const { locale, dataSource } = instance; const [visible, setVisible] = _react.default.useState(false); const handleChange = val => { add({ field: val }); setVisible(false); }; const onOpenChange = v => { setVisible(v); }; return /*#__PURE__*/_react.default.createElement(_PopDropDown.default, { overlayClassName: "filter_dropdown_container_select", dropdownRender: () => /*#__PURE__*/_react.default.createElement(_GhostRender.default, { onChange: handleChange, showSearch: false, options: dataSource, fieldNames: { label: 'title', value: 'field' }, type: "select" }), open: visible, onOpenChange: onOpenChange }, /*#__PURE__*/_react.default.createElement(_button.default, { type: "dashed", icon: /*#__PURE__*/_react.default.createElement(_iconFont.default, { type: "icon-a-tongyonga0xinzeng" }) }, locale.incrementQuery)); }; // 高级筛选列表 const ComplexBody = ({ instance, form }) => { return /*#__PURE__*/_react.default.createElement(_form.default.List, { name: "data" }, (fields, { add, remove }) => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", { className: "complex_list" }, fields.map(({ key, ...field }) => /*#__PURE__*/_react.default.createElement(ComplexItem, { key: key, remove: remove, form: form, field: field, instance: instance }))), /*#__PURE__*/_react.default.createElement(PopButton, { instance: instance, add: add }))); }; var _default = ComplexBody; exports.default = _default;