UNPKG

sunmao-sdk

Version:

榫卯-开箱即用赋能-sdk

232 lines (190 loc) 8.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _getField = _interopRequireDefault(require("./getField")); var _resolve = _interopRequireDefault(require("./resolve")); var _subFieldGenerator = _interopRequireDefault(require("./subFieldGenerator")); var _excluded = ["properties", "items"]; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } // 对于数组或对象类型,获取其子集schema function getSubSchemas() { var schema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var properties = schema.properties, items = schema.items, $parent = _objectWithoutProperties(schema, _excluded); var type = $parent.type; // no subset if (!properties && !items) { return []; } var children = {}; if (type === "object") { children = properties; } if (type === "array") { children = [].concat(items); } return Object.keys(children).map(function (name) { return { schema: children[name], name: name, // parent propsSchema $parent: $parent }; }); } function getBasicProps(settings, materials) { var schema = settings.schema, _settings$name = settings.name, name = _settings$name === void 0 ? "" : _settings$name, _settings$$parent = settings.$parent, $parent = _settings$$parent === void 0 ? {} : _settings$$parent, column = settings.column, displayType = settings.displayType, showDescIcon = settings.showDescIcon, showValidate = settings.showValidate, readOnly = settings.readOnly, labelWidth = settings.labelWidth, useLogger = settings.useLogger, formData = settings.formData, disabled = settings.disabled, isEditing = settings.isEditing; // 写错的时候 if (!schema) return {}; // 目前做了处理的`uiSchema`参数 var className = schema["ui:className"], _schema$uiOptions = schema["ui:options"], options = _schema$uiOptions === void 0 ? {} : _schema$uiOptions, hidden = schema["ui:hidden"], _disabled = schema["ui:disabled"], width = schema["ui:width"], _readOnly = schema["ui:readonly"], _schema$uiExtraButto = schema["ui:extraButtons"], extraButtons = _schema$uiExtraButto === void 0 ? [] : _schema$uiExtraButto, dependShow = schema["ui:dependShow"], action = schema["ui:action"], _labelWidth = schema["ui:labelWidth"], _column = schema["ui:column"], _displayType = schema["ui:displayType"], _showDescIcon = schema["ui:showDescIcon"]; var _$parent$required = $parent.required, required = _$parent$required === void 0 ? [] : _$parent$required; var widgets = materials.generated, fields = materials.customized; // 标准化属性模型 // 除了value和onChange为动态值这里不处理 // true/false的值,服务端可能传了 1/0, 或者"true" var hasValue = function hasValue(val) { return ["string", "boolean", "number"].indexOf(_typeof(val)) > -1; }; // 一些从顶层一直传下去的props var passDownProps = { column: _column || column, displayType: _displayType || displayType, showDescIcon: hasValue(_showDescIcon) ? _showDescIcon : showDescIcon, disabled: hasValue(_disabled) ? _disabled : disabled, readOnly: hasValue(_readOnly) ? _readOnly : readOnly, // 前者单个ui的,后者全局的 labelWidth: _labelWidth || labelWidth, showValidate: showValidate, useLogger: useLogger, isEditing: isEditing }; var basicProps = _objectSpread(_objectSpread({}, passDownProps), {}, { name: name, schema: schema, options: options, // 所有特定组件规则,addable等规则TODO hidden: hidden, required: required.indexOf(name) !== -1, width: width, widgets: widgets, fields: fields, formData: formData }); // 假如有表达式来决定显示的场景,才传入dependShow,formData if (dependShow) { basicProps = _objectSpread(_objectSpread({}, basicProps), {}, { dependShow: dependShow }); } if (className) { basicProps = _objectSpread(_objectSpread({}, basicProps), {}, { className: className }); } if (action) { basicProps = _objectSpread(_objectSpread({}, basicProps), {}, { action: action }); } // 子集的属性 var subItems = {}; var subSchemas = getSubSchemas(schema); subSchemas.forEach(function (subSchema) { var _name = subSchema.name, _subSchema$schema = subSchema.schema, _schema = _subSchema$schema === void 0 ? {} : _subSchema$schema; subItems[_name] = { field: (0, _getField.default)(_schema, materials), props: getBasicProps(_objectSpread(_objectSpread(_objectSpread({}, subSchema), passDownProps), {}, { formData: formData }), materials) }; }); if (["array", "object"].indexOf(schema.type) >= 0) { // 传入name和Field(如果重定义Field的话)及其配置信息(如onChange等) basicProps.getSubField = function (o) { // getSchemaData(schema) var _ref = subItems[o.name] || subItems[0] || {}, field = _ref.field, props = _ref.props, c = _ref.column; return (0, _subFieldGenerator.default)(_objectSpread(_objectSpread({}, field), {}, { column: c, props: _objectSpread(_objectSpread({}, props), {}, { name: o.name, rootValue: o.rootValue }) }))(o); }; if (schema.type === "array" && schema.items) { // 将数组uiSchema配置里面的抽离出来使用 basicProps.extraButtons = extraButtons; // 数组新增的默认值 if (subSchemas && subSchemas[0]) { basicProps.newItem = (0, _resolve.default)(subSchemas[0].schema); } } } return basicProps; } /** * schema + materials --> parse --> Field + props * schema { * propsSchema, * uiSchema, * data, * name, * } * materials { * // 根据 Widget 生成的 Field * generated, * // 自定义的 Field * customized, * // 字段 type 与 widgetName 的映射关系 * mapping, * } */ var parse = function parse() { var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var materials = arguments.length > 1 ? arguments[1] : undefined; var _settings$schema = settings.schema, schema = _settings$schema === void 0 ? {} : _settings$schema; return { Field: (0, _getField.default)(schema, materials).Field, props: getBasicProps(settings, materials) }; }; var _default = parse; exports.default = _default;