@aliretail/react-materials-components
Version:
136 lines (115 loc) • 3.88 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
/* eslint-disable react/prop-types */
import * as React from 'react';
import SelectLogic from "./SelectLogic";
import SelectCondition from "./SelectCondition";
import classnames from 'classnames';
import { uniqueConditionKey } from "./utils";
var LoginConditionGroup = function LoginConditionGroup(props) {
var group = props.group,
onRemove = props.onRemove,
conditionRemovable = props.conditionRemovable,
onUpdate = props.onUpdate,
useCompact = props.useCompact;
var calcType = group.calcType,
id = group.id,
_group$conditions = group.conditions,
conditions = _group$conditions === void 0 ? [] : _group$conditions;
/** 修改 且、或 */
var handleLogicChange = function handleLogicChange(v) {
onUpdate(id, _extends({}, group, {
calcType: v
}));
};
/** 新增条件 */
var handleConditionAdd = function handleConditionAdd(newCondition, index) {
var newConditions = conditions.concat(newCondition);
if (index !== undefined) {
newConditions.splice(index, 0, newCondition);
newConditions.pop();
}
onUpdate(id, _extends({}, group, {
conditions: newConditions
}));
};
/** 删除条件 */
var handleConditionRemove = function handleConditionRemove(conditionId) {
var newConditions = conditions.filter(function (c) {
return c.id !== conditionId;
}); // 只有一条了,条件要改为且
if (newConditions.length === 1) {
onUpdate(id, _extends({}, group, {
calcType: 'AND',
conditions: newConditions
}));
} else {
onUpdate(id, _extends({}, group, {
conditions: newConditions
}));
} // 条件删光了,自动删除关系组
if (newConditions.length === 0) {
onRemove(id);
}
};
/** 更新条件 */
var handleConditionUpdate = function handleConditionUpdate(conditionId, condition) {
var newConditions = conditions.map(function (c) {
if (c.id === conditionId) {
return _extends({}, c, condition);
}
return _extends({}, c);
});
onUpdate(id, _extends({}, group, {
conditions: newConditions
}));
};
/** 清除条件 */
var handleConditionClear = function handleConditionClear(conditionId) {
var newConditions = conditions.map(function (c) {
if (c.id === conditionId) {
return {
id: c.id
};
}
return _extends({}, c);
});
onUpdate(id, _extends({}, group, {
conditions: newConditions
}));
};
return /*#__PURE__*/React.createElement("div", {
className: "aliretail-logic-condition-group",
style: {
padding: 20
}
}, /*#__PURE__*/React.createElement("div", {
className: classnames('aliretail-logic-condition-group-select-logic', conditions.length >= 2 && 'has-border'),
style: {
width: useCompact ? 40 : 44
}
}, /*#__PURE__*/React.createElement(SelectLogic, {
disabled: conditions.length < 2,
value: calcType,
onChange: handleLogicChange
})), /*#__PURE__*/React.createElement("div", {
className: "aliretail-logic-condition-group-conditions-container"
}, conditions === null || conditions === void 0 ? void 0 : conditions.map(function (condition, index) {
if (!condition.id) {
// eslint-disable-next-line no-param-reassign
condition.id = uniqueConditionKey();
}
return /*#__PURE__*/React.createElement(SelectCondition, {
useCompact: useCompact,
key: condition.id,
index: index,
last: index === conditions.length - 1,
removable: conditionRemovable,
condition: condition,
onAdd: handleConditionAdd,
onRemove: handleConditionRemove,
onUpdate: handleConditionUpdate,
onClear: handleConditionClear
});
})));
};
export default LoginConditionGroup;