UNPKG

rsuite

Version:

A suite of react components

44 lines (43 loc) 1.51 kB
'use client'; import { SchemaModel } from 'schema-typed'; import { useRef, useCallback } from 'react'; import { constructFlatSchema } from "../utils/constructFlatSchema.js"; function useSchemaModel(formModel, nestedField) { var subRulesRef = useRef([]); var pushFieldRule = useCallback(function (name, fieldRule) { subRulesRef.current.push({ name: name, fieldRule: fieldRule }); }, []); var removeFieldRule = useCallback(function (name) { var index = subRulesRef.current.findIndex(function (v) { return v.name === name; }); subRulesRef.current.splice(index, 1); }, []); var getCombinedModel = useCallback(function () { var realSubRules = subRulesRef.current.filter(function (v) { return Boolean(v.fieldRule.current); }); // If there is no sub rule, return the original form model if (realSubRules.length === 0) { return formModel; } var subRuleObject = realSubRules.map(function (_ref) { var _ref2; var name = _ref.name, fieldRule = _ref.fieldRule; return _ref2 = {}, _ref2[name] = fieldRule.current, _ref2; }).reduce(function (a, b) { return Object.assign(a, b); }, {}); return SchemaModel.combine(formModel, SchemaModel(nestedField ? constructFlatSchema(subRuleObject) : subRuleObject)); }, [formModel, nestedField]); return { getCombinedModel: getCombinedModel, pushFieldRule: pushFieldRule, removeFieldRule: removeFieldRule }; } export default useSchemaModel;