@aliretail/react-materials-components
Version:
158 lines (142 loc) • 5.39 kB
JavaScript
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;