UNPKG

@alilc/lowcode-editor-skeleton

Version:

alibaba lowcode editor skeleton

442 lines (437 loc) 19.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.SettingsPane = void 0; exports.createSettingFieldView = createSettingFieldView; var _initializerDefineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/initializerDefineProperty")); var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime/helpers/applyDecoratedDescriptor")); var _initializerWarningHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/initializerWarningHelper")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _react = require("react"); var _lowcodeEditorCore = require("@alilc/lowcode-editor-core"); var _lowcodeUtils = require("@alilc/lowcode-utils"); var _field = require("../field"); var _popup = _interopRequireWildcard(require("../popup")); var _context = require("../../context"); var _locale = require("../../locale"); var _class, _SettingFieldView, _class2, _SettingGroupView, _class3, _class4, _descriptor, _SettingsPane; function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } function isStandardComponent(componentMeta) { if (!componentMeta) return false; var prototype = componentMeta.prototype; return prototype == null; } /** * 判断 initialValue 是否为非空,非空条件: * 1. 当为 slot 结构时,value 为有长度的数组且 visible 不为 false * 2. 不为 slot 结构,为非 undefined / null 值 * @param initialValue * @returns */ function isInitialValueNotEmpty(initialValue) { if ((0, _lowcodeUtils.isJSSlot)(initialValue)) { // @ts-ignore visible 为 false 代表默认不展示 return initialValue.visible !== false && Array.isArray(initialValue.value) && initialValue.value.length > 0; } return initialValue !== undefined && initialValue !== null; } var SettingFieldView = (0, _lowcodeEditorCore.observer)(_class = (_SettingFieldView = /*#__PURE__*/function (_Component) { function SettingFieldView(props) { var _field$designer; var _this; _this = _Component.call(this, props) || this; _this.stageName = void 0; _this.setters = void 0; var field = _this.props.field; var extraProps = field.extraProps; var display = extraProps.display; var editor = (_field$designer = field.designer) === null || _field$designer === void 0 ? void 0 : _field$designer.editor; var skeleton = editor === null || editor === void 0 ? void 0 : editor.get('skeleton'); var _ref = skeleton || {}, stages = _ref.stages; _this.setters = editor === null || editor === void 0 ? void 0 : editor.get('setters'); var stageName; if (display === 'entry') { (0, _lowcodeEditorCore.runInAction)(function () { var _field$name; stageName = field.getNode().id + "_" + ((_field$name = field.name) === null || _field$name === void 0 ? void 0 : _field$name.toString()); // 清除原 stage,不然 content 引用的一直是老的 field,导致数据无法得到更新 stages.container.remove(stageName); stages.add({ type: 'Widget', name: stageName, content: /*#__PURE__*/React.createElement(_react.Fragment, null, field.items.map(function (item, index) { return createSettingFieldView(item, field, index); })), props: { title: field.title } }); }); } _this.stageName = stageName; return _this; } (0, _inheritsLoose2["default"])(SettingFieldView, _Component); var _proto = SettingFieldView.prototype; _proto.initDefaultValue = function initDefaultValue() { var _this$state; var initialValue = this.setterInfo.initialValue; if ((_this$state = this.state) !== null && _this$state !== void 0 && _this$state.fromOnChange || !isInitialValueNotEmpty(initialValue) || this.ignoreDefaultValue || this.value !== undefined) { return; } // 当前 field 没有 value 值时,将 initialValue 写入 field // 之所以用 initialValue,而不是 defaultValue 是为了保持跟 props.onInitial 的逻辑一致 var _initialValue = typeof initialValue === 'function' ? initialValue(this.field.internalToShellField()) : initialValue; this.field.setValue(_initialValue); }; _proto.componentDidMount = function componentDidMount() { this.initDefaultValue(); }; _proto.render = function render() { var _field$componentMeta, _field$componentMeta2, _this$setters, _field$top, _field$top$getNode, _this2 = this; var field = this.field; var extraProps = field.extraProps; var visible = this.visible; if (!visible) { return null; } var _this$setterInfo = this.setterInfo, _this$setterInfo$sett = _this$setterInfo.setterProps, setterProps = _this$setterInfo$sett === void 0 ? {} : _this$setterInfo$sett, setterType = _this$setterInfo.setterType, _this$setterInfo$init = _this$setterInfo.initialValue, initialValue = _this$setterInfo$init === void 0 ? null : _this$setterInfo$init; var value = this.value; var onChangeAPI = extraProps === null || extraProps === void 0 ? void 0 : extraProps.onChange; var stageName = this.stageName; return (0, _field.createField)((0, _extends2["default"])({ meta: (field === null || field === void 0 ? void 0 : (_field$componentMeta = field.componentMeta) === null || _field$componentMeta === void 0 ? void 0 : _field$componentMeta.npm) || (field === null || field === void 0 ? void 0 : (_field$componentMeta2 = field.componentMeta) === null || _field$componentMeta2 === void 0 ? void 0 : _field$componentMeta2.componentName) || '', title: field.title, // editor: field.editor, collapsed: !field.expanded, valueState: field.isRequired ? 10 : field.valueState, onExpandChange: function onExpandChange(expandState) { return field.setExpanded(expandState); }, onClear: function onClear() { return field.clearValue(); }, // field: field, // stages, stageName: stageName }, extraProps), !stageName && ((_this$setters = this.setters) === null || _this$setters === void 0 ? void 0 : _this$setters.createSetterContent(setterType, (0, _extends2["default"])({}, (0, _lowcodeEditorCore.shallowIntl)(setterProps), { forceInline: extraProps.forceInline, key: field.id, // === injection prop: field.internalToShellField(), // for compatible vision selected: (_field$top = field.top) === null || _field$top === void 0 ? void 0 : (_field$top$getNode = _field$top.getNode()) === null || _field$top$getNode === void 0 ? void 0 : _field$top$getNode.internalToShellNode(), field: field.internalToShellField(), // === IO value: value, // reaction point initialValue: initialValue, onChange: function onChange(value) { _this2.setState({ fromOnChange: true, // eslint-disable-next-line react/no-unused-state value: value }); field.setValue(value, true); if (onChangeAPI) onChangeAPI(value, field.internalToShellField()); }, onInitial: function onInitial() { if (initialValue == null) { return; } var value = typeof initialValue === 'function' ? initialValue(field.internalToShellField()) : initialValue; _this2.setState({ // eslint-disable-next-line react/no-unused-state value: value }); field.setValue(value, true); }, removeProp: function removeProp() { if (field.name) { field.parent.clearPropValue(field.name); } } }))), extraProps.forceInline ? 'plain' : extraProps.display); }; return (0, _createClass2["default"])(SettingFieldView, [{ key: "field", get: function get() { return this.props.field; } }, { key: "visible", get: function get() { var extraProps = this.field.extraProps; var condition = extraProps.condition; try { return typeof condition === 'function' ? condition(this.field.internalToShellField()) !== false : true; } catch (error) { console.error('exception when condition (hidden) is excuted', error); } return true; } }, { key: "ignoreDefaultValue", get: function get() { var extraProps = this.field.extraProps; var ignoreDefaultValue = extraProps.ignoreDefaultValue; try { if (typeof ignoreDefaultValue === 'function') { return ignoreDefaultValue(this.field.internalToShellField()); } return false; } catch (error) { console.error('exception when ignoreDefaultValue is excuted', error); } return false; } }, { key: "setterInfo", get: function get() { var _this$field$extraProp; var _this$field = this.field, extraProps = _this$field.extraProps, componentMeta = _this$field.componentMeta; var defaultValue = extraProps.defaultValue; var setter = this.field.setter; var setterProps = {}; var setterType; var initialValue = null; if (Array.isArray(setter)) { setterType = 'MixedSetter'; setterProps = { setters: setter }; } else if ((0, _lowcodeUtils.isSetterConfig)(setter)) { setterType = setter.componentName; if (setter.props) { setterProps = setter.props; if (typeof setterProps === 'function') { setterProps = setterProps(this.field.internalToShellField()); } } if (setter.initialValue != null) { initialValue = setter.initialValue; } } else if (setter) { setterType = setter; } if (defaultValue != null && !('defaultValue' in setterProps)) { setterProps.defaultValue = defaultValue; if (initialValue == null) { initialValue = defaultValue; } } if (this.field.valueState === -1) { setterProps.multiValue = true; if (!('placeholder' in setterProps)) { setterProps.placeholder = (0, _locale.intl)('Multiple Value'); } } // 根据是否支持变量配置做相应的更改 var supportVariable = (_this$field$extraProp = this.field.extraProps) === null || _this$field$extraProp === void 0 ? void 0 : _this$field$extraProp.supportVariable; // supportVariableGlobally 只对标准组件生效,vc 需要单独配置 var supportVariableGlobally = _lowcodeEditorCore.engineConfig.get('supportVariableGlobally', false) && isStandardComponent(componentMeta); var isUseVariableSetter = (0, _lowcodeUtils.shouldUseVariableSetter)(supportVariable, supportVariableGlobally); if (isUseVariableSetter === false) { return { setterProps: setterProps, initialValue: initialValue, setterType: setterType }; } if (setterType === 'MixedSetter') { // VariableSetter 不单独使用 if (Array.isArray(setterProps.setters) && !setterProps.setters.includes('VariableSetter')) { setterProps.setters.push('VariableSetter'); } } else { setterType = 'MixedSetter'; setterProps = { setters: [setter, 'VariableSetter'] }; } return { setterProps: setterProps, initialValue: initialValue, setterType: setterType }; } }, { key: "value", get: function get() { return this.field.valueState === -1 ? null : this.field.getValue(); } }]); }(_react.Component), _SettingFieldView.contextType = _context.SkeletonContext, _SettingFieldView)) || _class; var SettingGroupView = (0, _lowcodeEditorCore.observer)(_class2 = (_SettingGroupView = /*#__PURE__*/function (_Component2) { function SettingGroupView(props) { var _this3$props$field$de; var _this3; _this3 = _Component2.call(this, props) || this; _this3.stageName = void 0; var field = _this3.props.field; var extraProps = field.extraProps; var display = extraProps.display; var editor = (_this3$props$field$de = _this3.props.field.designer) === null || _this3$props$field$de === void 0 ? void 0 : _this3$props$field$de.editor; var _ref2 = editor === null || editor === void 0 ? void 0 : editor.get('skeleton'), stages = _ref2.stages; // const items = field.items; var stageName; if (display === 'entry') { (0, _lowcodeEditorCore.runInAction)(function () { var _field$name2; stageName = field.getNode().id + "_" + ((_field$name2 = field.name) === null || _field$name2 === void 0 ? void 0 : _field$name2.toString()); // 清除原 stage,不然 content 引用的一直是老的 field,导致数据无法得到更新 stages.container.remove(stageName); stages.add({ type: 'Widget', name: stageName, content: /*#__PURE__*/React.createElement(_react.Fragment, null, field.items.map(function (item, index) { return createSettingFieldView(item, field, index); })), props: { title: field.title } }); }); } _this3.stageName = stageName; return _this3; } (0, _inheritsLoose2["default"])(SettingGroupView, _Component2); var _proto2 = SettingGroupView.prototype; _proto2.render = function render() { var _field$componentMeta3, _field$componentMeta4; var field = this.props.field; var extraProps = field.extraProps; var condition = extraProps.condition, display = extraProps.display; var visible = field.isSingle && typeof condition === 'function' ? condition(field.internalToShellField()) !== false : true; if (!visible) { return null; } // todo: split collapsed state | field.items for optimize return (0, _field.createField)({ meta: ((_field$componentMeta3 = field.componentMeta) === null || _field$componentMeta3 === void 0 ? void 0 : _field$componentMeta3.npm) || ((_field$componentMeta4 = field.componentMeta) === null || _field$componentMeta4 === void 0 ? void 0 : _field$componentMeta4.componentName) || '', title: field.title, // editor: field.editor, collapsed: !field.expanded, onExpandChange: function onExpandChange(expandState) { return field.setExpanded(expandState); }, // field: field, // stages, stageName: this.stageName }, field.items.map(function (item, index) { return createSettingFieldView(item, field, index); }), display); }; return SettingGroupView; }(_react.Component), _SettingGroupView.contextType = _context.SkeletonContext, _SettingGroupView)) || _class2; function createSettingFieldView(field, fieldEntry, index) { if ((0, _lowcodeUtils.isSettingField)(field)) { if (field.isGroup) { return /*#__PURE__*/React.createElement(SettingGroupView, { field: field, key: field.id }); } else { return /*#__PURE__*/React.createElement(SettingFieldView, { field: field, key: field.id }); } } else { return (0, _lowcodeUtils.createContent)(field, { key: index, field: fieldEntry }); } } var SettingsPane = exports.SettingsPane = (0, _lowcodeEditorCore.observer)(_class3 = (_class4 = (_SettingsPane = /*#__PURE__*/function (_Component3) { function SettingsPane() { var _this4; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this4 = _Component3.call.apply(_Component3, [this].concat(args)) || this; (0, _initializerDefineProperty2["default"])(_this4, "currentStage", _descriptor, _this4); _this4.popupPipe = new _popup.PopupPipe(); _this4.pipe = _this4.popupPipe.create(); _this4.handleClick = function (e) { // compatiable vision stageBox // TODO: optimize these codes var _this4$props$usePopup = _this4.props.usePopup, usePopup = _this4$props$usePopup === void 0 ? true : _this4$props$usePopup; if (!usePopup) return; var pane = e.currentTarget; function getTarget(node) { if (!pane.contains(node) || node.nodeName === 'A' && node.getAttribute('href')) { return null; } var target = node.dataset ? node.dataset.stageTarget : null; if (target) { return target; } return getTarget(node.parentNode); } var target = getTarget(e.target); if (!target) { return; } var skeleton = _this4.context; if (!skeleton || !skeleton.stages) { return; } var stage = skeleton.stages.container.get(target); if (stage) { if (_this4.currentStage) { stage.setPrevious(_this4.currentStage); } _this4.currentStage = stage; } }; return _this4; } (0, _inheritsLoose2["default"])(SettingsPane, _Component3); var _proto3 = SettingsPane.prototype; _proto3.popStage = function popStage() { var _this$currentStage; this.currentStage = (_this$currentStage = this.currentStage) === null || _this$currentStage === void 0 ? void 0 : _this$currentStage.getPrevious(); }; _proto3.render = function render() { var target = this.props.target; var items = target.items; return /*#__PURE__*/React.createElement("div", { className: "lc-settings-pane", onClick: this.handleClick }, /*#__PURE__*/React.createElement(_popup["default"], { popupPipe: this.popupPipe }, /*#__PURE__*/React.createElement("div", { className: "lc-settings-content" }, items.map(function (item, index) { return createSettingFieldView(item, target, index); })))); }; return SettingsPane; }(_react.Component), _SettingsPane.contextType = _context.SkeletonContext, _SettingsPane), _descriptor = (0, _applyDecoratedDescriptor2["default"])(_class4.prototype, "currentStage", [_lowcodeEditorCore.obx], { configurable: true, enumerable: true, writable: true, initializer: null }), _class4)) || _class3;