UNPKG

@riil-frontend/component-page-creater

Version:

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

335 lines (276 loc) 11.3 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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _checkbox = _interopRequireDefault(require("@alifd/next/lib/checkbox")); var _numberPicker = _interopRequireDefault(require("@alifd/next/lib/number-picker")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _util = require("../util"); require("./index.scss"); var _next = require("@formily/next"); var _nextComponents = require("@formily/next-components"); //formily表单初始化 (0, _nextComponents.setup)(); /** * 组件公共属性面板,预设padding值 * @param {object} props - 属性集 * @param {object} props.attributes - 组件属性数据 * @param {(columns:array)=>{}} props.onChange - 编辑后回调 * @param {object} props.comContainerAttributes 组件容器公共属性数据 */ var BasePanel = function BasePanel(_ref) { var attributes = _ref.attributes, comContainerAttributes = _ref.comContainerAttributes, onChange = _ref.onChange; var item = comContainerAttributes ? _.cloneDeep(comContainerAttributes) : (0, _util.getBaseAttributes)(); var trigger = function trigger(key, value) { item[key] = value; onChange && onChange(item); }; return /*#__PURE__*/_react["default"].createElement("div", { style: { display: 'grid' } }, /*#__PURE__*/_react["default"].createElement("span", null, "\u7EC4\u4EF6\u7C7B\u578B\uFF1A", attributes.comName), /*#__PURE__*/_react["default"].createElement("span", null, "\u5DE6\u95F4\u8DDD\uFF1A", /*#__PURE__*/_react["default"].createElement(_numberPicker["default"], { value: item.paddingLeft, onChange: function onChange(value) { trigger('paddingLeft', value); } })), /*#__PURE__*/_react["default"].createElement("span", null, "\u4E0A\u95F4\u8DDD\uFF1A", /*#__PURE__*/_react["default"].createElement(_numberPicker["default"], { value: item.paddingTop, onChange: function onChange(value) { trigger('paddingTop', value); } })), /*#__PURE__*/_react["default"].createElement("span", null, "\u53F3\u95F4\u8DDD\uFF1A", /*#__PURE__*/_react["default"].createElement(_numberPicker["default"], { value: item.paddingRight, onChange: function onChange(value) { trigger('paddingRight', value); } })), /*#__PURE__*/_react["default"].createElement("span", null, "\u4E0B\u95F4\u8DDD\uFF1A", /*#__PURE__*/_react["default"].createElement(_numberPicker["default"], { value: item.paddingBottom, onChange: function onChange(value) { trigger('paddingBottom', value); } }))); }; /** * 画布属性面板,预设间距,栅格,高度 * @param {object} props - 属性集 * @param {object} props.layoutConfig - 画布布局配置 * @param {(columns:array)=>{}} props.onChange - 编辑后回调 */ var CanvasAttr = function CanvasAttr(_ref2) { var layoutConfig = _ref2.layoutConfig, onChange = _ref2.onChange; var items = _.cloneDeep(layoutConfig); var trigger = function trigger(key, value) { items[key] = value; onChange && onChange(items); }; return /*#__PURE__*/_react["default"].createElement("div", { style: { display: 'grid' } }, /*#__PURE__*/_react["default"].createElement("span", null, "\u753B\u5E03\u5C5E\u6027\uFF1A"), /*#__PURE__*/_react["default"].createElement("span", null, "\u6805\u683C\uFF1A", /*#__PURE__*/_react["default"].createElement(_numberPicker["default"], { value: items.cols, onChange: function onChange(value) { trigger('cols', value); } })), /*#__PURE__*/_react["default"].createElement("span", null, "\u884C\u9AD8\uFF1A", /*#__PURE__*/_react["default"].createElement(_numberPicker["default"], { value: items.rowHeight, onChange: function onChange(value) { trigger('rowHeight', value); } })), /*#__PURE__*/_react["default"].createElement("span", null, "\u6C34\u5E73\u95F4\u8DDD\uFF1A", /*#__PURE__*/_react["default"].createElement(_numberPicker["default"], { value: items.margin[0], onChange: function onChange(value) { trigger('margin', [value, items.margin[1]]); } })), /*#__PURE__*/_react["default"].createElement("span", null, "\u5782\u76F4\u95F4\u8DDD\uFF1A", /*#__PURE__*/_react["default"].createElement(_numberPicker["default"], { value: items.margin[1], onChange: function onChange(value) { trigger('margin', [items.margin[0], value]); } })), /*#__PURE__*/_react["default"].createElement("span", null, "\u662F\u5426\u5782\u76F4\u6EE1\u5C4F\uFF1A", /*#__PURE__*/_react["default"].createElement(_checkbox["default"], { checked: items.isFitHeight, onChange: function onChange(b) { trigger('isFitHeight', b); } }))); }; /** * 属性面板 */ var AttrPanel = /*#__PURE__*/function (_Component) { (0, _inheritsLoose2["default"])(AttrPanel, _Component); function AttrPanel(props) { var _this; _this = _Component.call(this, props) || this; _this.state = { schema: undefined }; return _this; } var _proto = AttrPanel.prototype; _proto.componentDidUpdate = function componentDidUpdate(preProps, preState) { if (preProps.selectId != this.props.selectId) { this.getSchema(); } }; _proto.componentDidMount = function componentDidMount() { this.getSchema(); }; _proto.getSchema = /*#__PURE__*/function () { var _getSchema = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var _this$props, pageConfig, selectId, ExpCom, pageProps, request, selectItem, Com, schema; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _this$props = this.props, pageConfig = _this$props.pageConfig, selectId = _this$props.selectId, ExpCom = _this$props.ExpCom, pageProps = _this$props.pageProps, request = _this$props.request; selectItem = selectId ? pageConfig.widgets.find(function (item) { return item.id === selectId; }) : undefined; Com = selectItem ? ExpCom ? ExpCom : (0, _util.getComRequire)(selectItem.type, selectItem.importFrom) : null; _context.t0 = Com && Com.getSchema; if (!_context.t0) { _context.next = 8; break; } _context.next = 7; return Com.getSchema({ pageProps: pageProps, config: selectItem, request: request }); case 7: _context.t0 = _context.sent; case 8: schema = _context.t0; this.setState({ schema: schema }); case 10: case "end": return _context.stop(); } } }, _callee, this); })); function getSchema() { return _getSchema.apply(this, arguments); } return getSchema; }(); _proto.onChange = function onChange(widget) { var _this$props2 = this.props, pageConfig = _this$props2.pageConfig, onChange = _this$props2.onChange, selectId = _this$props2.selectId, ExpCom = _this$props2.ExpCom; var widgets = _.cloneDeep(pageConfig.widgets); widgets = widgets.map(function (item) { if (item.id === selectId) { item = widget; } return item; }); onChange((0, _extends2["default"])({}, pageConfig, { widgets: widgets })); }; _proto.render = function render() { var _this2 = this; var _this$props3 = this.props, pageConfig = _this$props3.pageConfig, _onChange = _this$props3.onChange, selectId = _this$props3.selectId, ExpCom = _this$props3.ExpCom, pageProps = _this$props3.pageProps, request = _this$props3.request; var schema = this.state.schema; var selectItem = selectId ? pageConfig.widgets.find(function (item) { return item.id === selectId; }) : undefined; var Com = selectItem ? ExpCom ? ExpCom : (0, _util.getComRequire)(selectItem.type, selectItem.importFrom) : null; var ComAttrPanel = Com && Com.AttrPanel; return /*#__PURE__*/_react["default"].createElement("div", { className: "attr-panel" }, Com ? /*#__PURE__*/_react["default"].createElement("span", null, /*#__PURE__*/_react["default"].createElement(BasePanel, { attributes: selectItem.attributes, comContainerAttributes: selectItem.comContainerAttributes, onChange: function onChange(comContainerAttributes) { var _config = _.cloneDeep(selectItem); _config.comContainerAttributes = comContainerAttributes; _this2.onChange(_config); } }), schema ? /*#__PURE__*/_react["default"].createElement(_next.SchemaForm, { value: selectItem.attributes, onChange: function onChange(values) { var _config = _.cloneDeep(selectItem); _config.attributes = (0, _extends2["default"])({}, _config.attributes, values); _this2.onChange(_config); }, schema: schema }) : ComAttrPanel ? /*#__PURE__*/_react["default"].createElement(ComAttrPanel, { pageProps: pageProps, request: request, config: selectItem, attributes: selectItem.attributes, trigger: function trigger(key, value) { var _config = _.cloneDeep(selectItem); _config.attributes[key] = value; _this2.onChange(_config); } }) : null) : /*#__PURE__*/_react["default"].createElement("span", { style: { color: 'red' } }, /*#__PURE__*/_react["default"].createElement(CanvasAttr, { layoutConfig: pageConfig.layoutConfig, onChange: function onChange(lc) { _onChange((0, _extends2["default"])({}, pageConfig, { layoutConfig: lc })); } }))); }; return AttrPanel; }(_react.Component); AttrPanel.propTypes = { /** * 画布的配置数据 */ pageConfig: _propTypes["default"].object, /** * 当前选中组件id */ selectId: _propTypes["default"].string, /** * (pageConfig)=>{}属性面板发生改变时的回调 */ onChange: _propTypes["default"].func, /** * 在开发npm包组件时需用到此属性。面板使用者无需使用此属性 */ ExpCom: _propTypes["default"].any, /** * 页面公共属性 */ pageProps: _propTypes["default"].any, /** * 数据请求体 */ request: _propTypes["default"].any }; AttrPanel.defaultProps = { ExpCom: undefined }; var _default = AttrPanel; exports["default"] = _default;