UNPKG

react-json-schema-editor-antd

Version:

Json Schema Editor

180 lines (179 loc) 9.75 kB
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } import { useDroppable } from '@dnd-kit/core'; import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable'; import { has, isArray, isBoolean, isPlainObject, isString, isUndefined } from 'lodash'; import React, { useMemo, useRef } from 'react'; import SchemaItem from "../.."; import DataModel from "../DataModel"; var DataObject = function DataObject(props) { var schema = props.schema, _props$nodeDepth = props.nodeDepth, nodeDepth = _props$nodeDepth === void 0 ? 0 : _props$nodeDepth, _props$modalDepth = props.modalDepth, modalDepth = _props$modalDepth === void 0 ? 0 : _props$modalDepth, _props$namePath = props.namePath, namePath = _props$namePath === void 0 ? [] : _props$namePath, refSchema = props.refSchema, components = props.components, refIds = props.refIds, isDataModelItems = props.isDataModelItems, _props$nodeDepthPathO = props.nodeDepthPathObj, nodeDepthPathObj = _props$nodeDepthPathO === void 0 ? {} : _props$nodeDepthPathO, isUnLinkDataModelItems = props.isUnLinkDataModelItems; var _useDroppable = useDroppable({ id: String(namePath), data: { accepts: nodeDepth } }), setNodeRef = _useDroppable.setNodeRef, isOver = _useDroppable.isOver; var getRefData = function getRefData(data) { var refPath = data === null || data === void 0 ? void 0 : data['$ref']; var schemas = components === null || components === void 0 ? void 0 : components.schemas; if (isString(refPath)) { var refId = refPath.split('/').pop() || ''; if (isPlainObject(schemas === null || schemas === void 0 ? void 0 : schemas[refId])) { return schemas === null || schemas === void 0 ? void 0 : schemas[refId]; } } return null; }; var nodeNamePathCache = useRef(new Map()); function getNodeNamePath(namePath) { for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { rest[_key - 1] = arguments[_key]; } var key = JSON.stringify([].concat(_toConsumableArray(namePath), rest)); if (!nodeNamePathCache.current.has(key)) { nodeNamePathCache.current.set(key, [].concat(_toConsumableArray(namePath), rest)); } return nodeNamePathCache.current.get(key); } var nodeOrders = useMemo(function () { var echoapiOrders = schema === null || schema === void 0 ? void 0 : schema['x-schema-orders']; var propertyKeys = Object.keys((schema === null || schema === void 0 ? void 0 : schema.properties) || {}); var orderKeys = []; if (isArray(echoapiOrders)) { var newKeys = propertyKeys.filter(function (item) { return !echoapiOrders.includes(item); }); orderKeys = echoapiOrders.concat(newKeys); } else { orderKeys = propertyKeys; } return orderKeys.map(function (item, index) { var _schema$properties, _schema$xSchemaRefs; var key = namePath.length > 0 ? "".concat(namePath, "-").concat(index) : "root-".concat(index); var name = item; var type = 'property'; var nodeSchema = schema === null || schema === void 0 || (_schema$properties = schema.properties) === null || _schema$properties === void 0 ? void 0 : _schema$properties[name]; var overrides = (refSchema === null || refSchema === void 0 ? void 0 : refSchema['x-schema-overrides']) || {}; var isHidden = Boolean((overrides === null || overrides === void 0 ? void 0 : overrides[name]) === null); var nodeIsUnLinkDataModelItems = isBoolean(isUnLinkDataModelItems) ? isUnLinkDataModelItems : false; var refData = null; if (has(overrides, name)) { type = 'override'; if (!isHidden) { nodeSchema = overrides === null || overrides === void 0 ? void 0 : overrides[name]; } nodeIsUnLinkDataModelItems = true; } else if (schema !== null && schema !== void 0 && (_schema$xSchemaRefs = schema['x-schema-refs']) !== null && _schema$xSchemaRefs !== void 0 && _schema$xSchemaRefs[name]) { var _schema$xSchemaRefs2; type = 'ref'; nodeSchema = schema === null || schema === void 0 || (_schema$xSchemaRefs2 = schema['x-schema-refs']) === null || _schema$xSchemaRefs2 === void 0 ? void 0 : _schema$xSchemaRefs2[name]; refData = getRefData(nodeSchema); // 需要解析更多的信息 是否为对象 属性是否重复 } // 计算 namePath var nodeNamePath = []; if (type === 'override') { nodeNamePath = getNodeNamePath(namePath, modalDepth === 0 ? 'x-schema-overrides' : 'properties', name); } else if (type === 'property') { nodeNamePath = getNodeNamePath(namePath, modalDepth === 0 && isDataModelItems ? 'x-schema-overrides' : 'properties', name); } else if (type === 'ref') { nodeNamePath = getNodeNamePath(namePath, 'x-schema-refs', name); } // // 计算 nodeDepthPathObj if (!has(nodeDepthPathObj, name)) { nodeDepthPathObj[name] = key; } return { key: key, name: name, type: type, nodeSchema: nodeSchema, isHidden: isHidden, isUnLinkDataModelItems: nodeIsUnLinkDataModelItems, refData: refData, nodeNamePath: nodeNamePath, isRepeat: has(nodeDepthPathObj, name) && nodeDepthPathObj[name] !== key }; }); }, [schema, refSchema, namePath, modalDepth, isDataModelItems, nodeDepthPathObj]); return /*#__PURE__*/React.createElement("div", { ref: setNodeRef, className: "sortable-table-container", style: { background: isOver ? 'transparent' : 'var(--color-bg-right)', transition: 'none' // 禁用 CSS 过渡 } }, /*#__PURE__*/React.createElement(SortableContext, { items: nodeOrders.map(function (i) { return i === null || i === void 0 ? void 0 : i.key; }), strategy: verticalListSortingStrategy }, nodeOrders.map(function (node) { if (isUndefined(node === null || node === void 0 ? void 0 : node.nodeSchema)) { return /*#__PURE__*/React.createElement(React.Fragment, null); } if (node.type === 'override' || node.type === 'property') { var _refSchema$required, _schema$required, _node$nodeSchema; return /*#__PURE__*/React.createElement(SchemaItem, _extends({ key: node.key }, props, { uniqueKey: node.key, isRequire: node.type === 'override' ? refSchema === null || refSchema === void 0 || (_refSchema$required = refSchema.required) === null || _refSchema$required === void 0 ? void 0 : _refSchema$required.includes(node.name) : (_schema$required = schema.required) === null || _schema$required === void 0 ? void 0 : _schema$required.includes(node.name), allowNull: node === null || node === void 0 || (_node$nodeSchema = node.nodeSchema) === null || _node$nodeSchema === void 0 || (_node$nodeSchema = _node$nodeSchema.type) === null || _node$nodeSchema === void 0 ? void 0 : _node$nodeSchema.includes('null'), isArrayItems: false, isRepeat: node.isRepeat, isCombinedItems: false, nodeDepth: nodeDepth, isUnLinkDataModelItems: node.isUnLinkDataModelItems, displayRefPropertyActions: isArray(refIds) && refIds.length === 1, isHidden: node.isHidden, namePath: node.nodeNamePath, propertyName: node.name, schema: node.nodeSchema })); } if (node.type === 'ref') { var _node$refData; return /*#__PURE__*/React.createElement(DataModel, _extends({ key: node.key }, props, { uniqueKey: node.key, nodeDepth: nodeDepth, refName: String(node.name), schema: node.nodeSchema, namePath: node.nodeNamePath, nodeDepthPathObj: nodeDepthPathObj, refData: node.refData, refIds: (refIds || []).concat((_node$refData = node.refData) === null || _node$refData === void 0 ? void 0 : _node$refData.model_id) })); } return /*#__PURE__*/React.createElement(React.Fragment, null); })), /*#__PURE__*/React.createElement("div", { className: "dash-line", style: { left: "".concat(34 + (nodeDepth - 1) * 16, "px") } })); }; export default DataObject;