UNPKG

@alilc/lowcode-editor-skeleton

Version:

alibaba lowcode editor skeleton

270 lines (269 loc) 11.6 kB
import _Tab from "@alifd/next/lib/tab"; import _extends from "@babel/runtime/helpers/extends"; import _Breadcrumb from "@alifd/next/lib/breadcrumb"; import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator"; import _initializerDefineProperty from "@babel/runtime/helpers/initializerDefineProperty"; import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose"; import _applyDecoratedDescriptor from "@babel/runtime/helpers/applyDecoratedDescriptor"; import _initializerWarningHelper from "@babel/runtime/helpers/initializerWarningHelper"; var _dec, _class, _class2, _descriptor; import _regeneratorRuntime from "@babel/runtime/regenerator"; import React, { Component } from 'react'; import { Title, observer, obx, globalContext, engineConfig, makeObservable } from '@alilc/lowcode-editor-core'; import classNames from 'classnames'; import { SettingsMain } from './main'; import { SettingsPane } from './settings-pane'; import { StageBox } from '../stage-box'; import { SkeletonContext } from '../../context'; import { intl } from '../../locale'; import { createIcon, isSettingField } from '@alilc/lowcode-utils'; export var SettingsPrimaryPane = (_dec = obx.ref, observer(_class = (_class2 = /*#__PURE__*/function (_Component) { function SettingsPrimaryPane(props) { var _this; _this = _Component.call(this, props) || this; _this.state = { shouldIgnoreRoot: false }; _this.main = new SettingsMain(_this.props.engineEditor); _initializerDefineProperty(_this, "_activeKey", _descriptor, _this); makeObservable(_this); return _this; } _inheritsLoose(SettingsPrimaryPane, _Component); var _proto = SettingsPrimaryPane.prototype; _proto.componentDidMount = function componentDidMount() { var _this2 = this; this.setShouldIgnoreRoot(); var editor = this.props.engineEditor; editor.eventBus.on('designer.selection.change', function () { if (!engineConfig.get('stayOnTheSameSettingTab', false)) { _this2._activeKey = null; } }); }; _proto.setShouldIgnoreRoot = /*#__PURE__*/function () { var _setShouldIgnoreRoot = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() { var designMode; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: _context.next = 2; return globalContext.get('editor').get('designMode'); case 2: designMode = _context.sent; this.setState({ shouldIgnoreRoot: designMode === 'live' }); case 4: case "end": return _context.stop(); } }, _callee, this); })); function setShouldIgnoreRoot() { return _setShouldIgnoreRoot.apply(this, arguments); } return setShouldIgnoreRoot; }(); _proto.componentWillUnmount = function componentWillUnmount() { this.main.purge(); }; _proto.renderBreadcrumb = function renderBreadcrumb() { var _designer$currentSele, _designer$currentSele2, _node2, _node2$document, _this$main$componentM; var _this$main = this.main, settings = _this$main.settings, editor = _this$main.editor, designer = _this$main.designer; var shouldIgnoreRoot = this.state.shouldIgnoreRoot; if (!settings) { return null; } if (settings.isMultiple) { var _settings$componentMe; return /*#__PURE__*/React.createElement("div", { className: "lc-settings-navigator" }, createIcon((_settings$componentMe = settings.componentMeta) === null || _settings$componentMe === void 0 ? void 0 : _settings$componentMe.icon, { className: 'lc-settings-navigator-icon' }), /*#__PURE__*/React.createElement("div", { style: { marginLeft: '5px' } }, /*#__PURE__*/React.createElement(Title, { title: settings.componentMeta.title }), /*#__PURE__*/React.createElement("span", null, " x ", settings.nodes.length))); } var current = designer === null || designer === void 0 ? void 0 : (_designer$currentSele = designer.currentSelection) === null || _designer$currentSele === void 0 ? void 0 : (_designer$currentSele2 = _designer$currentSele.getNodes()) === null || _designer$currentSele2 === void 0 ? void 0 : _designer$currentSele2[0]; var node = settings.first; var focusNode = (_node2 = node) === null || _node2 === void 0 ? void 0 : (_node2$document = _node2.document) === null || _node2$document === void 0 ? void 0 : _node2$document.focusNode; var items = []; var l = 3; var _loop = function _loop() { var _node = node; // dirty code: should remove if (shouldIgnoreRoot && node.isRoot()) { return 1; // break } if (focusNode && node.contains(focusNode)) { l = 0; } var props = l === 2 ? {} : { onMouseOver: hoverNode.bind(null, _node, true), onMouseOut: hoverNode.bind(null, _node, false), onClick: function onClick() { if (!_node) { return; } selectNode.call(null, _node); var getName = function getName(node) { var _node$componentMeta, _node$componentMeta2; var npm = node === null || node === void 0 ? void 0 : (_node$componentMeta = node.componentMeta) === null || _node$componentMeta === void 0 ? void 0 : _node$componentMeta.npm; return [npm === null || npm === void 0 ? void 0 : npm["package"], npm === null || npm === void 0 ? void 0 : npm.componentName].filter(function (item) { return !!item; }).join('-') || (node === null || node === void 0 ? void 0 : (_node$componentMeta2 = node.componentMeta) === null || _node$componentMeta2 === void 0 ? void 0 : _node$componentMeta2.componentName) || ''; }; var selected = getName(current); var target = getName(_node); editor === null || editor === void 0 ? void 0 : editor.eventBus.emit('skeleton.settingsPane.Breadcrumb', { selected: selected, target: target }); } }; items.unshift(/*#__PURE__*/React.createElement(_Breadcrumb.Item, _extends({}, props, { key: node.id }), /*#__PURE__*/React.createElement(Title, { title: node.title }))); node = node.parent; }; while (l-- > 0 && node) { if (_loop()) break; } return /*#__PURE__*/React.createElement("div", { className: "lc-settings-navigator" }, createIcon((_this$main$componentM = this.main.componentMeta) === null || _this$main$componentM === void 0 ? void 0 : _this$main$componentM.icon, { className: 'lc-settings-navigator-icon', "class": 'lc-settings-navigator-icon' }), /*#__PURE__*/React.createElement(_Breadcrumb, { className: "lc-settings-node-breadcrumb" }, items)); }; _proto.render = function render() { var _this3 = this; var settings = this.main.settings; var editor = this.props.engineEditor; if (!settings || !settings.first) { // 未选中节点,提示选中 或者 显示根节点设置 return /*#__PURE__*/React.createElement("div", { className: "lc-settings-main" }, /*#__PURE__*/React.createElement("div", { className: "lc-settings-notice" }, /*#__PURE__*/React.createElement("p", null, intl('Please select a node in canvas')))); } // 当节点被锁定,且未开启锁定后容器可设置属性 if (settings.isLocked && !engineConfig.get('enableLockedNodeSetting', false)) { return /*#__PURE__*/React.createElement("div", { className: "lc-settings-main" }, /*#__PURE__*/React.createElement("div", { className: "lc-settings-notice" }, /*#__PURE__*/React.createElement("p", null, intl('Current node is locked')))); } if (Array.isArray(settings.items) && settings.items.length === 0) { return /*#__PURE__*/React.createElement("div", { className: "lc-settings-main" }, /*#__PURE__*/React.createElement("div", { className: "lc-settings-notice" }, /*#__PURE__*/React.createElement("p", null, intl('No config found for this type of component')))); } if (!settings.isSameComponent) { // TODO: future support 获取设置项交集编辑 return /*#__PURE__*/React.createElement("div", { className: "lc-settings-main" }, /*#__PURE__*/React.createElement("div", { className: "lc-settings-notice" }, /*#__PURE__*/React.createElement("p", null, intl('Please select same kind of components')))); } var items = settings.items; if (items.length > 5 || items.some(function (item) { return !isSettingField(item) || !item.isGroup; })) { return /*#__PURE__*/React.createElement("div", { className: "lc-settings-main" }, this.renderBreadcrumb(), /*#__PURE__*/React.createElement("div", { className: "lc-settings-body" }, /*#__PURE__*/React.createElement(SkeletonContext.Consumer, null, function (skeleton) { if (skeleton) { return /*#__PURE__*/React.createElement(StageBox, { skeleton: skeleton, target: settings, key: settings.id }, /*#__PURE__*/React.createElement(SettingsPane, { target: settings, usePopup: false })); } return null; }))); } var matched = false; var tabs = items.map(function (field) { if (_this3._activeKey === field.name) { matched = true; } return /*#__PURE__*/React.createElement(_Tab.Item, { className: "lc-settings-tab-item", title: /*#__PURE__*/React.createElement(Title, { title: field.title }), key: field.name, onClick: function onClick() { editor === null || editor === void 0 ? void 0 : editor.eventBus.emit('skeleton.settingsPane.change', { name: field.name, title: field.title }); } }, /*#__PURE__*/React.createElement(SkeletonContext.Consumer, null, function (skeleton) { if (skeleton) { return /*#__PURE__*/React.createElement(StageBox, { skeleton: skeleton, target: field, key: field.id }, /*#__PURE__*/React.createElement(SettingsPane, { target: field, key: field.id, usePopup: false })); } return null; })); }); var activeKey = matched ? this._activeKey : items[0].name; var className = classNames('lc-settings-main', { 'lc-settings-hide-tabs': items.length === 1 && engineConfig.get('hideSettingsTabsWhenOnlyOneItem', false) }); return /*#__PURE__*/React.createElement("div", { className: className }, this.renderBreadcrumb(), /*#__PURE__*/React.createElement(_Tab, { activeKey: activeKey, onChange: function onChange(tabKey) { _this3._activeKey = tabKey; }, navClassName: "lc-settings-tabs", animation: false, excessMode: "dropdown", contentClassName: "lc-settings-tabs-content" }, tabs)); }; return SettingsPrimaryPane; }(Component), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "_activeKey", [_dec], { configurable: true, enumerable: true, writable: true, initializer: null }), _class2)) || _class); function hoverNode(node, flag) { node.hover(flag); } function selectNode(node) { node === null || node === void 0 ? void 0 : node.select(); }