@schema-render/core-react
Version:
Through a set of simple JSON Schema, efficiently build a set of forms.
173 lines (172 loc) • 6.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
var _jsxruntime = require("react/jsx-runtime");
var _react = require("react");
var _constants = require("../constants");
var _useRootContext = /*#__PURE__*/ _interop_require_default(require("../hooks/useRootContext"));
var _checking = require("../utils/checking");
var _misc = require("../utils/misc");
var _statement = require("../utils/statement");
var _tinyLodash = require("../utils/tinyLodash");
var _RendererDistributor = /*#__PURE__*/ _interop_require_default(require("./RendererDistributor"));
function _array_like_to_array(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;
}
function _array_without_holes(arr) {
if (Array.isArray(arr)) return _array_like_to_array(arr);
}
function _define_property(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 _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _iterable_to_array(iter) {
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}
function _non_iterable_spread() {
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 _object_spread(target) {
for(var i = 1; i < arguments.length; i++){
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === "function") {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function(key) {
_define_property(target, key, source[key]);
});
}
return target;
}
function _to_consumable_array(arr) {
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
}
function _unsupported_iterable_to_array(o, minLen) {
if (!o) return;
if (typeof o === "string") return _array_like_to_array(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(n);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
}
// export interface IBeforeEachResult {
// // 子节点状态
// childState?: IObjectAny
// // 自定义渲染节点
// node?: ReactNode
// }
// export interface IBeforeEachParams {
// schema: ISchema
// path: IPath
// }
// export interface IProps extends ICommonProps<IObjectSchema> {
// onBeforeEach?: (p: IBeforeEachParams) => IBeforeEachResult
// onAfterEach?: (p: IBeforeEachParams) => IBeforeEachResult
// onBeforeItemRender?: () => {}
// }
var RendererIterator = function(param) {
var schema = param.schema, path = param.path;
var rootCtx = (0, _useRootContext.default)();
var rootValue = rootCtx.rootValue, userCtx = rootCtx.userCtx;
// path 为 [] 表示根节点
var value = path.length ? (0, _tinyLodash.get)(rootValue, path) : rootValue;
// 上一个 column 起始值
var prevColumnStart = 1;
// onBeforeEach?.()
var items = Object.keys(schema.properties).map(function(field) {
var subSchema = schema.properties[field];
// 执行 hidden 语法
var shouldHidden = (0, _statement.performStatement)({
statement: subSchema.hidden,
parentValue: value,
rootValue: rootValue,
userCtx: userCtx
});
if (shouldHidden) {
return null;
}
var subPath = _to_consumable_array(path).concat([
field
]);
var uniqueKey = (0, _misc.stringifyPath)(subPath);
// const res = onBeforeItemRender?.({ schema: subSchema, path: subPath })
// // 自定义内容
// if (res?.node !== undefined && React.isValidElement(res.node)) {
// return res.node
// }
// const rendererProps = {
// ...res?.state,
// schema: subSchema,
// path: subPath,
// }
/**
* 计算 gridColumn 值
* span 值如果是: 8 8 8
* 计算结果应该是: 1/9 9/17 17/25
*/ var gridColumn;
// 常规模式支持 span 和 spanStart
if (rootCtx.layout === _constants.ELayout.normal) {
var start = prevColumnStart;
var end = 25;
// 没有 span 和 spanStart 属性时,恢复常规模式
if (!(0, _checking.isNumber)(subSchema.span) && !(0, _checking.isNumber)(subSchema.spanStart)) {
start = prevColumnStart = 1;
} else {
// 不允许 spanStart 和 span 为 0
// 优先处理 spanStart
if (subSchema.spanStart) {
start = subSchema.spanStart;
prevColumnStart = start;
}
// span 最后决定下一个 column 的起始位置 start
if (subSchema.span) {
end = start + subSchema.span;
prevColumnStart = end;
}
}
gridColumn = "".concat(start, "/").concat(end);
} else {
// autoFill 与 autoFit 模式只支持 spanStart
if ((0, _checking.isNumber)(subSchema.spanStart)) {
gridColumn = "".concat(subSchema.spanStart, "/auto");
}
}
var rendererProps = {
schema: subSchema,
path: subPath,
gridColumn: gridColumn
};
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_RendererDistributor.default, _object_spread({}, rendererProps), uniqueKey);
});
// onAfterEach?.()
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.Fragment, {
children: items
});
};
var _default = RendererIterator;