UNPKG

@riil-frontend/component-page-creater

Version:

page creater components,include components list,component attribute panel and page canvas

331 lines (274 loc) 10.2 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _react = _interopRequireWildcard(require("react")); var _next = require("@formily/next"); var _lodash = _interopRequireDefault(require("lodash")); var _propTypes = _interopRequireDefault(require("prop-types")); var _componentNoDataPage = _interopRequireDefault(require("@riil-frontend/component-no-data-page")); require("./ComponentContent.scss"); var _util = require("../../util"); var _FormCollapse = require("./FormCollapse"); var actions = (0, _next.createAsyncFormActions)(); var ComponentContent = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) { var selectItem = props.selectItem, pageProps = props.pageProps, request = props.request, onAttrChange = props.onAttrChange, isInTemplate = props.isInTemplate, customGetComRequire = props.customGetComRequire; var Com = selectItem ? (0, _util.getComRequire)(selectItem.type, selectItem.importFrom, customGetComRequire) : null; var ComAttrPanel = Com && Com.AttrPanel; /** * 组件选中id值的历史数据,仅保存两个状态 */ var keyRef = (0, _react.useRef)([]); var _useState = (0, _react.useState)({ schema: null, customScCom: null, configState: selectItem }), schemaProps = _useState[0], setSchemaProps = _useState[1]; var comAttrPanelRef = (0, _react.useRef)(); /** * SchemaForm属性schema,components需要同时赋值生效 * @param isUpdateSchema 判断是否更新schema的属性 */ var getSchema = /*#__PURE__*/function () { var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(isUpdateSchema) { var _schema; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (isUpdateSchema === void 0) { isUpdateSchema = true; } if (isUpdateSchema) { _context.next = 4; break; } setSchemaProps((0, _extends2["default"])({}, schemaProps, { configState: selectItem })); return _context.abrupt("return"); case 4: //当组件切换选择时,调用getSchema _schema = null; _context.prev = 5; _context.t0 = Com && Com.getSchema; if (!_context.t0) { _context.next = 11; break; } _context.next = 10; return Com.getSchema({ pageProps: pageProps, config: selectItem, request: request }); case 10: _context.t0 = _context.sent; case 11: _schema = _context.t0; _context.next = 17; break; case 14: _context.prev = 14; _context.t1 = _context["catch"](5); console.error('getSchema报错,请检查组件getSchema方法', _context.t1); case 17: setSchemaProps({ schema: _schema, customScCom: Com === null || Com === void 0 ? void 0 : Com.CustomScCom, configState: selectItem }); case 18: case "end": return _context.stop(); } } }, _callee, null, [[5, 14]]); })); return function getSchema(_x) { return _ref.apply(this, arguments); }; }(); (0, _react.useEffect)(function () { //将当前选择项装入ref变量中,用来判断是否是id值发生变化, if (selectItem) { keyRef.current.push(selectItem.id); } else { keyRef.current = []; } //只保存一次历史数据 if (keyRef.current.length > 2) { keyRef.current = [keyRef.current[1], keyRef.current[2]]; } //若是key值未发生变化,则不更新schma属性 if (keyRef.current.length === 2 && keyRef.current[0] === keyRef.current[1]) { getSchema(false); } else { getSchema(); } }, [selectItem]); /** * TODO 将来可优化此项,用valdates2代替此方法, * 避免出现重复的回调 */ var valdates = /*#__PURE__*/function () { var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var stopChangeOnValidateError, result; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: stopChangeOnValidateError = Com === null || Com === void 0 ? void 0 : Com.stopChangeOnValidateError; _context2.next = 3; return actions.validate().then(function () { return true; })["catch"](function () { return false; }); case 3: result = _context2.sent; if (result || !stopChangeOnValidateError) { onAttrChange(schemaProps.configState, isInTemplate); } case 5: case "end": return _context2.stop(); } } }, _callee2); })); return function valdates() { return _ref2.apply(this, arguments); }; }(); /** * TODO 将来可优化此项,代替valdates方法,并在表单onChange时调用 * 避免出现重复的回调 * @param {*} configState */ var valdates2 = /*#__PURE__*/function () { var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(configState) { var result; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return actions.validate().then(function () { return true; })["catch"](function () { return false; }); case 2: result = _context3.sent; if (result) { onAttrChange(configState, isInTemplate); } case 4: case "end": return _context3.stop(); } } }, _callee3); })); return function valdates2(_x2) { return _ref3.apply(this, arguments); }; }(); /** * TODO 将来可优化此项,使用validates2校验时,取消此声明周期代码 */ (0, _react.useEffect)(function () { valdates(); }, [schemaProps.configState]); var hasAttr = schemaProps.schema || ComAttrPanel; (0, _react.useImperativeHandle)(ref, function () { return hasAttr ? { actions: schemaProps.schema ? actions : null, comAttrPanelRef: schemaProps.schema ? null : ComAttrPanel } : {}; }); if (Com) { return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, hasAttr ? schemaProps.schema ? /*#__PURE__*/_react["default"].createElement(_next.SchemaForm, { key: schemaProps.configState.id, components: (0, _extends2["default"])({ FormCollapse: _FormCollapse.FormCollapse, FormCollapsePanel: _FormCollapse.FormCollapsePanel }, schemaProps.customScCom), style: { width: '100%' }, actions: actions, value: schemaProps.configState.attributes, onChange: function onChange(values) { var _config = _lodash["default"].cloneDeep(schemaProps.configState); _config.attributes = (0, _extends2["default"])({}, _config.attributes, values); setSchemaProps((0, _extends2["default"])({}, schemaProps, { configState: _config })); // valdates2(_config) TODO }, schema: schemaProps.schema }) : ComAttrPanel ? /*#__PURE__*/_react["default"].createElement(ComAttrPanel, { key: schemaProps.configState.id, ref: comAttrPanelRef, pageProps: pageProps, request: request, config: schemaProps.configState, attributes: configState.attributes, onChange: function onChange(values, item) { var _config = _lodash["default"].cloneDeep(schemaProps.configState); _config.attributes = (0, _extends2["default"])({}, _config.attributes, values); setSchemaProps((0, _extends2["default"])({}, schemaProps, { configState: _config })); // valdates2(_config) TODO } }) : null : /*#__PURE__*/_react["default"].createElement("div", { style: { height: '30%' } }, /*#__PURE__*/_react["default"].createElement(_componentNoDataPage["default"], { statusCode: "\u6682\u65E0\u8BBE\u7F6E\u9879" }))); } else { return /*#__PURE__*/_react["default"].createElement("div", { className: "com-content-title" }, "\u8BF7\u5728\u753B\u5E03\u4E2D\u9009\u62E9\u4E00\u4E2A\u7EC4\u4EF6"); } }); ComponentContent.propTypes = { /** * 当前选中项的组件实例 */ Com: _propTypes["default"].any, /** * 当前选中项数据 */ selectItem: _propTypes["default"].object, /** * 页面透传属性 */ pageProps: _propTypes["default"].object, /** * 数据请求体 */ request: _propTypes["default"].any, /** * 属性变更回调 */ onAttrChange: _propTypes["default"].func, /** * 标记是否是容器内组件 */ isInTemplate: _propTypes["default"].bool }; var _default = ComponentContent; exports["default"] = _default;