UNPKG

@aliretail/react-materials-components

Version:
158 lines (142 loc) 5.39 kB
import _Button from "@alifd/next/es/button"; import _extends from "@babel/runtime/helpers/extends"; /* eslint-disable react/prop-types */ import * as React from 'react'; import SelectLogic from "./SelectLogic"; import LogicConditionGroup from "./LogicConditionGroup"; import { uniqueGroupKey, uniqueConditionKey } from "./utils"; import classnames from 'classnames'; import { Provider } from "./context"; var LogicalEditor = /*#__PURE__*/React.forwardRef(function (props, ref) { var value = props.value, onChange = props.onChange, dataSource = props.dataSource, _props$mode = props.mode, mode = _props$mode === void 0 ? 'multiple' : _props$mode, _props$disabled = props.disabled, disabled = _props$disabled === void 0 ? false : _props$disabled, useCompact = props.useCompact; var isSingleMode = mode === 'single'; var _ref = value || { calcType: 'AND', conditionGroups: [{ id: 'lorem', calcType: 'AND', conditions: [{ id: 'ipsum' }] }] }, calcType = _ref.calcType, _ref$conditionGroups = _ref.conditionGroups, conditionGroups = _ref$conditionGroups === void 0 ? [] : _ref$conditionGroups; /** 关系组 且、或修改 */ var handleGroupLogicChange = function handleGroupLogicChange(v) { onChange === null || onChange === void 0 ? void 0 : onChange(_extends({}, value, { calcType: v })); }; /** 新增组 */ var handleGroupAdd = function handleGroupAdd(v) { var newGroups = conditionGroups.concat(v); // 新增之后为两条,同时要改一下logic if (newGroups.length === 2) { onChange === null || onChange === void 0 ? void 0 : onChange({ calcType: 'AND', conditionGroups: newGroups }); } else { onChange === null || onChange === void 0 ? void 0 : onChange(_extends({}, value, { conditionGroups: newGroups })); } }; /** 修改组 */ var handleGroupUpdate = function handleGroupUpdate(groupId, payload) { var newGroups = conditionGroups.map(function (group) { if (group.id === groupId) { return _extends({}, group, payload); } return _extends({}, group); }); onChange === null || onChange === void 0 ? void 0 : onChange({ calcType: calcType !== null && calcType !== void 0 ? calcType : 'AND', conditionGroups: newGroups }); }; /** 删除组 */ var handleGroupRemove = function handleGroupRemove(groupId) { var newGroups = conditionGroups.filter(function (g) { return g.id !== groupId; }); // 删除之后如果少于两条,要把logic 改成 且 if (newGroups.length < 2) { onChange === null || onChange === void 0 ? void 0 : onChange({ calcType: 'AND', conditionGroups: newGroups }); } else { onChange === null || onChange === void 0 ? void 0 : onChange(_extends({}, value, { conditionGroups: newGroups })); } }; return /*#__PURE__*/React.createElement(Provider, { value: { config: dataSource, disabled: disabled } }, /*#__PURE__*/React.createElement("div", { ref: ref, className: "aliretail-logic-editor", style: { minWidth: useCompact ? 730 : 930, padding: useCompact ? '8px' : '20px 20px 20px 10px' } }, /*#__PURE__*/React.createElement("div", { className: "aliretail-logic-editor-body" }, !isSingleMode && /*#__PURE__*/React.createElement("div", { className: classnames('aliretail-logic-editor-select-logic', conditionGroups.length >= 2 && 'has-border'), style: { width: useCompact ? 30 : 44, marginRight: useCompact ? 6 : 9 } }, /*#__PURE__*/React.createElement(SelectLogic, { disabled: conditionGroups.length < 2, value: calcType, onChange: handleGroupLogicChange })), /*#__PURE__*/React.createElement("div", { className: "aliretail-logic-editor-group-container" }, conditionGroups === null || conditionGroups === void 0 ? void 0 : conditionGroups.map(function (group) { var _conditionGroups$, _conditionGroups$$con; if (!group.id) { // eslint-disable-next-line no-param-reassign group.id = uniqueGroupKey(); } return /*#__PURE__*/React.createElement(LogicConditionGroup, { useCompact: useCompact, key: group.id, group: group, conditionRemovable: conditionGroups.length > 1 || (((_conditionGroups$ = conditionGroups[0]) === null || _conditionGroups$ === void 0 ? void 0 : (_conditionGroups$$con = _conditionGroups$.conditions) === null || _conditionGroups$$con === void 0 ? void 0 : _conditionGroups$$con.length) || 0) > 1, onUpdate: handleGroupUpdate, onRemove: handleGroupRemove }); }))), !(disabled || isSingleMode) && /*#__PURE__*/React.createElement(_Button, { className: "aliretail-logic-editor-new-group", style: { height: '40px', color: '#034cfa', border: 'unset', marginLeft: useCompact ? 'calc(30px + 6px)' : 'calc(44px + 9px)', width: useCompact ? 'calc(100% - 30px - 6px)' : 'calc(100% - 44px - 9px)' }, onClick: function onClick() { return handleGroupAdd({ id: uniqueGroupKey(), calcType: 'AND', conditions: [{ id: uniqueConditionKey() }] }); } }, "+ \u65B0\u589E\u5173\u7CFB\u7EC4"))); }); export default LogicalEditor;