@aliretail/react-materials-components
Version:
245 lines (203 loc) • 8.7 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports["default"] = void 0;
var _button = _interopRequireDefault(require("@alifd/next/lib/button"));
var _icon = _interopRequireDefault(require("@alifd/next/lib/icon"));
var _grid = _interopRequireDefault(require("@alifd/next/lib/grid"));
var _select = _interopRequireDefault(require("@alifd/next/lib/select"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var React = _interopRequireWildcard(require("react"));
var _utils = require("./utils");
var _map = require("./map");
var _context = require("./context");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
/* eslint-disable react/prop-types */
var DEFAULT_VALUE = '__logical_editor_preset_value__';
var SelectWithRules = (0, _map.getConditionComponent)('Select');
var SelectCondition = function SelectCondition(props) {
var _config$find;
var last = props.last,
index = props.index,
condition = props.condition,
removable = props.removable,
onAdd = props.onAdd,
onRemove = props.onRemove,
onUpdate = props.onUpdate,
onClear = props.onClear,
useCompact = props.useCompact;
var _useContext = (0, _context.useContext)(),
config = _useContext.config,
disabled = _useContext.disabled;
var id = condition.id,
key = condition.key,
keyCalcType = condition.keyCalcType,
value = condition.value; // 选出当前组件的信息
var getComponent = function getComponent(firKey, secKey) {
var _componentProps;
var currentConfig = config.find(function (c) {
return c.key === firKey;
}) || {};
var relations = currentConfig.relation || [];
var isEmptyComponent = false;
var componentName = '';
var componentProps = {};
var submitProps = {}; // 第一层选了
if (firKey) {
componentName = currentConfig.component;
componentProps = currentConfig.componentProps;
submitProps = currentConfig.submitProps;
isEmptyComponent = componentName === 'Empty';
} // 第二层选了,覆盖第一层
if (secKey) {
var currentRelation = relations.find(function (r) {
return r.value === secKey;
});
if (currentRelation !== null && currentRelation !== void 0 && currentRelation.component) {
isEmptyComponent = (currentRelation === null || currentRelation === void 0 ? void 0 : currentRelation.component) === 'Empty';
componentName = currentRelation.component;
componentProps = currentRelation.componentProps || {};
}
if (currentRelation !== null && currentRelation !== void 0 && currentRelation.submitProps) {
submitProps = currentRelation.submitProps;
}
}
return {
isEmptyComponent: isEmptyComponent,
componentName: componentName,
componentProps: componentProps,
submitProps: submitProps,
defaultValue: (_componentProps = componentProps) === null || _componentProps === void 0 ? void 0 : _componentProps.defaultValue
};
};
var _getComponent = getComponent(key, keyCalcType),
componentName = _getComponent.componentName,
componentProps = _getComponent.componentProps;
/** 类型改变 */
var handleTypeChange = function handleTypeChange(v) {
if (v === undefined) {
onClear(id); // 清空数据
return;
}
var curConfig = config.find(function (c) {
return c.key === v;
});
var type = curConfig.relation[0].value;
var _getComponent2 = getComponent(v, type),
isEmptyComponent = _getComponent2.isEmptyComponent,
submitProps = _getComponent2.submitProps,
defaultValue = _getComponent2.defaultValue;
onUpdate(id, (0, _extends2["default"])({}, submitProps, condition, {
key: v,
keyCalcType: type,
value: isEmptyComponent ? DEFAULT_VALUE : defaultValue
}));
};
/** 条件关系改变 */
var handleRelationChange = function handleRelationChange(v) {
var _getComponent3 = getComponent(key, v),
isEmptyComponent = _getComponent3.isEmptyComponent,
submitProps = _getComponent3.submitProps,
defaultValue = _getComponent3.defaultValue;
onUpdate(id, (0, _extends2["default"])({}, submitProps, condition, {
keyCalcType: v,
value: isEmptyComponent ? DEFAULT_VALUE : defaultValue
}));
};
/** 值改变 */
var handleValueChange = function handleValueChange(v) {
var encoded = (0, _utils.encodeValue)(v);
var _getComponent4 = getComponent(key, keyCalcType),
submitProps = _getComponent4.submitProps;
onUpdate(id, (0, _extends2["default"])({}, submitProps, condition, {
value: encoded
}));
};
var Component = (0, _map.getConditionComponent)(componentName);
var relations = ((_config$find = config.find(function (c) {
return c.key === key;
})) === null || _config$find === void 0 ? void 0 : _config$find.relation) || [];
return /*#__PURE__*/React.createElement(_grid["default"].Row, {
gutter: useCompact ? 10 : 16,
style: last ? {} : {
marginBottom: 20
},
align: "center"
}, /*#__PURE__*/React.createElement(_grid["default"].Col, {
span: 5
}, /*#__PURE__*/React.createElement(SelectWithRules, {
style: {
width: '100%'
},
value: key,
onChange: handleTypeChange,
disabled: disabled,
autoWidth: false,
hasClear: true,
rules: [{
required: true,
message: '不能为空'
}]
}, config === null || config === void 0 ? void 0 : config.map(function (t) {
return /*#__PURE__*/React.createElement(_select["default"].Option, {
key: t.key,
value: t.key
}, t.name);
}))), /*#__PURE__*/React.createElement(_grid["default"].Col, {
span: 5
}, /*#__PURE__*/React.createElement(SelectWithRules, {
autoWidth: false,
style: {
width: '100%'
},
value: keyCalcType,
onChange: handleRelationChange,
disabled: disabled,
rules: [{
required: true,
message: '不能为空'
}]
}, relations === null || relations === void 0 ? void 0 : relations.map(function (r) {
return /*#__PURE__*/React.createElement(_select["default"].Option, {
key: r.label,
value: r.value
}, r.label);
}))), /*#__PURE__*/React.createElement(_grid["default"].Col, {
span: 11
}, /*#__PURE__*/React.cloneElement( /*#__PURE__*/React.createElement(Component, null), (0, _extends2["default"])({
style: {
maxWidth: '100%'
},
value: React.useMemo(function () {
return (0, _utils.decodeValue)(value);
}, [value]),
onChange: handleValueChange,
disabled: disabled
}, componentProps))), /*#__PURE__*/React.createElement(_grid["default"].Col, {
span: 3
}, /*#__PURE__*/React.createElement("div", {
style: {
whiteSpace: 'nowrap'
}
}, !disabled && /*#__PURE__*/React.createElement(_button["default"], {
className: "aliretail-logic-editor-btn",
onClick: function onClick() {
return onAdd({
id: (0, _utils.uniqueConditionKey)()
}, index + 1);
}
}, /*#__PURE__*/React.createElement(_icon["default"], {
type: "add"
})), !disabled && /*#__PURE__*/React.createElement(_button["default"], {
className: "aliretail-logic-editor-btn",
onClick: function onClick() {
return onRemove(id);
},
disabled: !removable
}, /*#__PURE__*/React.createElement(_icon["default"], {
type: "ashbin"
})))));
};
var _default = SelectCondition;
exports["default"] = _default;