UNPKG

@alilc/lowcode-plugin-components-pane

Version:
307 lines (304 loc) 13.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = exports.PaneIcon = void 0; var _search = _interopRequireDefault(require("@alifd/next/lib/search")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _react = _interopRequireDefault(require("react")); var _bind = _interopRequireDefault(require("classnames/bind")); var _lodash = _interopRequireDefault(require("lodash.debounce")); var _indexModule = _interopRequireDefault(require("./index.module.scss")); var _Icon = _interopRequireDefault(require("../Icon")); var _Category = _interopRequireDefault(require("../components/Category")); var _List = _interopRequireDefault(require("../components/List")); var _Component = _interopRequireDefault(require("../components/Component")); var _Tab = _interopRequireDefault(require("../components/Tab")); var _store = _interopRequireDefault(require("../store")); var _transform = _interopRequireWildcard(require("../utils/transform")); 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; } var _ref = window.AliLowCodeEngine || {}, material = _ref.material, common = _ref.common, project = _ref.project, event = _ref.event; var isNewEngineVersion = !!material; var store = new _store["default"](); var cx = _bind["default"].bind(_indexModule["default"]); var ComponentPane = /*#__PURE__*/function (_React$Component) { (0, _inheritsLoose2["default"])(ComponentPane, _React$Component); var _proto = ComponentPane.prototype; _proto.getKeyToSearch = function getKeyToSearch(c) { var _schema; var strTitle = this.t(c.title); var strComponentName = this.t((_schema = c.schema) === null || _schema === void 0 ? void 0 : _schema.componentName); var strDescription = "description" in c ? this.t(c.description) : ''; var strKeywords = "keywords" in c ? this.getStrKeywords(c.keywords || []) : ''; return (strTitle + "#" + strComponentName + "#" + strDescription + "#" + strKeywords).toLowerCase(); }; function ComponentPane(props) { var _this; _this = _React$Component.call(this, props) || this; _this.state = { groups: [], filter: [], keyword: '' }; _this.store = store; _this.t = void 0; _this.getStrKeywords = void 0; _this.getFilteredComponents = (0, _lodash["default"])(function () { var _this$state = _this.state, _this$state$groups = _this$state.groups, groups = _this$state$groups === void 0 ? [] : _this$state$groups, keyword = _this$state.keyword; if (!keyword) { _this.setState({ filter: groups }); return; } var filter = groups.map(function (group) { return (0, _extends2["default"])({}, group, { categories: group.categories.map(function (category) { return (0, _extends2["default"])({}, category, { components: category.components.filter(function (c) { var keyToSearch = _this.getKeyToSearch(c); if (c.snippets) { c.snippets.map(function (item) { keyToSearch += "_" + _this.getKeyToSearch(item); }); } return keyToSearch.includes(keyword); }) }); }).filter(function (c) { var _c$components; return c === null || c === void 0 ? void 0 : (_c$components = c.components) === null || _c$components === void 0 ? void 0 : _c$components.length; }) }); }); _this.setState({ filter: filter }); }, 200); _this.registerAdditive = function (shell) { if (!shell || shell.dataset.registered) { return; } function getSnippetId(elem) { if (!elem) { return null; } while (shell !== elem) { if (elem.classList.contains('snippet')) { return elem.dataset.id; } elem = elem.parentNode; } return null; } var editor = _this.props.editor; var designer = !isNewEngineVersion ? editor === null || editor === void 0 ? void 0 : editor.get('designer') : null; var _dragon = isNewEngineVersion ? common.designerCabin.dragon : designer === null || designer === void 0 ? void 0 : designer.dragon; if (!_dragon || !isNewEngineVersion && !designer) { return; } // eslint-disable-next-line var click = function click(e) {}; shell.addEventListener('click', click); _dragon.from(shell, function (e) { var doc = isNewEngineVersion ? project.getCurrentDocument() : designer === null || designer === void 0 ? void 0 : designer.currentDocument; var id = getSnippetId(e.target); if (!doc || !id) { return false; } var dragTarget = { type: 'nodedata', data: _this.store.getSnippetById(id) }; return dragTarget; }); shell.dataset.registered = 'true'; }; _this.handleSearch = function (keyword) { if (keyword === void 0) { keyword = ''; } _this.setState({ keyword: keyword.toLowerCase() }); _this.getFilteredComponents(); }; _this.t = (0, _transform.getTextReader)(props.lang); _this.getStrKeywords = function (keywords) { if (typeof keywords === 'string') { return keywords; } if (keywords && Array.isArray(keywords) && keywords.length) { return keywords.map(function (keyword) { return _this.t(keyword); }).join('-'); } return ''; }; return _this; } _proto.componentDidMount = function componentDidMount() { var editor = this.props.editor; if (!editor) { this.initComponentList(); return; } var assets = isNewEngineVersion ? material.getAssets() : editor.get('assets'); if (assets) { this.initComponentList(); } else { console.warn('[ComponentsPane]: assets not ready, wait for assets ready event.'); } if (isNewEngineVersion) { event.on('trunk.change', this.initComponentList.bind(this)); material.onChangeAssets(this.initComponentList.bind(this)); } else { editor.on('trunk.change', this.initComponentList.bind(this)); editor.once('editor.ready', this.initComponentList.bind(this)); editor.on('designer.incrementalAssetsReady', this.initComponentList.bind(this)); } } /** * 初始化组件列表 * TODO: 无副作用,可多次执行 */; _proto.initComponentList = function initComponentList() { var editor = this.props.editor; var rawData = isNewEngineVersion ? material.getAssets() : editor.get('assets'); var meta = (0, _transform["default"])(rawData, this.t); var groups = meta.groups, snippets = meta.snippets; this.store.setSnippets(snippets); this.setState({ groups: groups, filter: groups }); }; _proto.renderEmptyContent = function renderEmptyContent() { return /*#__PURE__*/_react["default"].createElement("div", { className: cx('empty') }, /*#__PURE__*/_react["default"].createElement("img", { src: "//g.alicdn.com/uxcore/pic/empty.png" }), /*#__PURE__*/_react["default"].createElement("div", { className: cx('content') }, this.t((0, _transform.createI18n)('暂无组件,请在物料站点添加', 'No components, please add materials')))); }; _proto.renderContent = function renderContent() { var _this2 = this; var _this$state2 = this.state, _this$state2$filter = _this$state2.filter, filter = _this$state2$filter === void 0 ? [] : _this$state2$filter, keyword = _this$state2.keyword; var hasContent = filter.filter(function (item) { var _item$categories; return item === null || item === void 0 ? void 0 : (_item$categories = item.categories) === null || _item$categories === void 0 ? void 0 : _item$categories.filter(function (category) { var _category$components; return category === null || category === void 0 ? void 0 : (_category$components = category.components) === null || _category$components === void 0 ? void 0 : _category$components.length; }).length; }).length; if (!hasContent) { return this.renderEmptyContent(); } if (keyword) { return /*#__PURE__*/_react["default"].createElement("div", { ref: this.registerAdditive, className: cx('filtered-content') }, filter.map(function (group) { var categories = group.categories; { return categories.map(function (category) { var components = category.components; var cname = _this2.t(category.name); return /*#__PURE__*/_react["default"].createElement(_Category["default"], { key: cname, name: cname }, /*#__PURE__*/_react["default"].createElement(_List["default"], null, components.map(function (component) { var componentName = component.componentName, _component$snippets = component.snippets, snippets = _component$snippets === void 0 ? [] : _component$snippets; return snippets.filter(function (snippet) { return snippet.id && _this2.getKeyToSearch(snippet).toLowerCase().includes(keyword); }).map(function (snippet) { return /*#__PURE__*/_react["default"].createElement(_Component["default"], { data: { title: snippet.title || component.title, icon: snippet.screenshot || component.icon, snippets: [snippet] }, key: _this2.t(group.name) + "_" + _this2.t(componentName) + "_" + _this2.t(snippet.title), t: _this2.t }); }); }))); }); } })); } return /*#__PURE__*/_react["default"].createElement(_Tab["default"], { className: cx('tabs') }, filter.map(function (group) { var categories = group.categories; return /*#__PURE__*/_react["default"].createElement(_Tab["default"].Item, { title: _this2.t(group.name), key: _this2.t(group.name) }, /*#__PURE__*/_react["default"].createElement("div", { ref: _this2.registerAdditive }, categories.map(function (category) { var components = category.components; var cname = _this2.t(category.name); return /*#__PURE__*/_react["default"].createElement(_Category["default"], { key: cname, name: cname }, /*#__PURE__*/_react["default"].createElement(_List["default"], null, components.map(function (component) { var componentName = component.componentName, _component$snippets2 = component.snippets, snippets = _component$snippets2 === void 0 ? [] : _component$snippets2; return snippets.filter(function (snippet) { return snippet.id; }).map(function (snippet) { return /*#__PURE__*/_react["default"].createElement(_Component["default"], { data: { title: snippet.title || component.title, icon: snippet.screenshot || component.icon, snippets: [snippet] }, t: _this2.t, key: _this2.t(group.name) + "_" + _this2.t(componentName) + "_" + _this2.t(snippet.title) }); }); }))); }))); })); }; _proto.render = function render() { return /*#__PURE__*/_react["default"].createElement("div", { className: cx('lowcode-component-panel') }, /*#__PURE__*/_react["default"].createElement("div", { className: cx('header') }, /*#__PURE__*/_react["default"].createElement(_search["default"], { className: cx('search'), placeholder: this.t((0, _transform.createI18n)('搜索组件', 'Search components')), shape: "simple", hasClear: true, autoFocus: true, onSearch: this.handleSearch, onChange: this.handleSearch })), this.renderContent()); }; return ComponentPane; }(_react["default"].Component); exports["default"] = ComponentPane; ComponentPane.displayName = 'LowcodeComponentPane'; ComponentPane.defaultProps = { lang: 'zh_CN' }; var PaneIcon = _Icon["default"]; exports.PaneIcon = PaneIcon;