linkmore-design
Version:
🌈 🚀lm组件库。🚀
91 lines (90 loc) • 3.89 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import { useMemoizedFn } from 'ahooks';
import omit from 'lodash/omit';
import React, { Fragment, useMemo } from 'react';
import Form from "../../../form";
import { DYNAMIC_ENUM, FIELD_ENUM } from "../../constants";
import Controls from "../../controls";
import { flatDeepDeps, getFilterKeyValue, getUpdateResult } from "../../utils";
var ValueItem = function ValueItem(_ref) {
var name = _ref.name,
dataSource = _ref.dataSource;
var form = Form.useFormInstance();
// 动态的字段 DYNAMIC_ENUM
var basicItem = Form.useWatch([FIELD_ENUM.BASIC, FIELD_ENUM.CONDITIONS, name]) || {};
// 从来源数据取配置参数: onOpenChange…
var itemProps = useMemo(function () {
var origin = basicItem;
if (Array.isArray(dataSource)) {
origin = dataSource.find(function (v) {
return v[DYNAMIC_ENUM.FIELD_NAME] === basicItem[DYNAMIC_ENUM.FIELD_NAME];
});
}
return omit(origin, [DYNAMIC_ENUM.FIELD_NAME, DYNAMIC_ENUM.FIELD_TYPE, DYNAMIC_ENUM.OPERATOR, DYNAMIC_ENUM.RELATION, DYNAMIC_ENUM.TABLE_OBJ]);
}, [dataSource, basicItem]);
var handleOpenChange = useMemoizedFn(function (open) {
var _itemProps$onOpenChan;
var conditions = form.getFieldValue([FIELD_ENUM.BASIC, FIELD_ENUM.CONDITIONS]) || [];
var values = getFilterKeyValue(conditions);
(_itemProps$onOpenChan = itemProps.onOpenChange) === null || _itemProps$onOpenChan === void 0 ? void 0 : _itemProps$onOpenChan.call(itemProps, open, values);
});
var shouldUpdate = useMemoizedFn(function () {
var updateFields = flatDeepDeps(basicItem[DYNAMIC_ENUM.FIELD_NAME], dataSource);
var conditions = form.getFieldValue([FIELD_ENUM.BASIC, FIELD_ENUM.CONDITIONS]) || [];
var resetConditions = getUpdateResult(updateFields, conditions);
if (resetConditions !== null && resetConditions !== void 0 && resetConditions.length) {
form.setFieldValue([FIELD_ENUM.BASIC, FIELD_ENUM.CONDITIONS], resetConditions);
}
});
var normalize = function normalize(value) {
shouldUpdate();
if (Array.isArray(value) && !value.length) return undefined;
return value;
};
return /*#__PURE__*/React.createElement(Form.Item, {
name: [name, DYNAMIC_ENUM.VALUE],
noStyle: true,
normalize: normalize
}, /*#__PURE__*/React.createElement(Controls, _extends({}, itemProps, {
onOpenChange: handleOpenChange
})));
};
var Basic = function Basic(_ref2) {
var dataSource = _ref2.dataSource;
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Form.Item, {
name: [FIELD_ENUM.BASIC, FIELD_ENUM.RELATION],
noStyle: true
}), /*#__PURE__*/React.createElement(Form.List, {
name: [FIELD_ENUM.BASIC, FIELD_ENUM.CONDITIONS]
}, function (fields) {
return fields.map(function (_ref3) {
var key = _ref3.key,
name = _ref3.name;
return /*#__PURE__*/React.createElement(Fragment, {
key: key
}, /*#__PURE__*/React.createElement(Form.Item, {
name: [name, DYNAMIC_ENUM.FIELD_NAME],
noStyle: true
}), /*#__PURE__*/React.createElement(Form.Item, {
name: [name, DYNAMIC_ENUM.FIELD_TYPE],
noStyle: true
}), /*#__PURE__*/React.createElement(Form.Item, {
name: [name, DYNAMIC_ENUM.OPERATOR],
noStyle: true
}), /*#__PURE__*/React.createElement(Form.Item, {
name: [name, DYNAMIC_ENUM.RELATION],
noStyle: true
}), /*#__PURE__*/React.createElement(Form.Item, {
name: [name, DYNAMIC_ENUM.TABLE_OBJ],
noStyle: true
}), /*#__PURE__*/React.createElement(Form.Item, {
name: [name, DYNAMIC_ENUM.TYPE],
noStyle: true
}), /*#__PURE__*/React.createElement(ValueItem, {
name: name,
dataSource: dataSource
}));
});
}));
};
export default /*#__PURE__*/React.memo(Basic);