UNPKG

@undermuz/react-json-form

Version:
119 lines (118 loc) 3.72 kB
// src/components/JsonFormLayout.tsx import { Children, useContext, useMemo } from "react"; import { useJsonFormUi } from "../contexts/ui.mjs"; import { FlatFormContext } from "../flat-form/FlatForm.mjs"; import { FieldsList } from "../flat-form/FieldsBlock.mjs"; import FormField from "../flat-form/FormField.mjs"; import { ArrayFormContext } from "../array-form/ArrayForm.mjs"; import ArrayFormItem from "../array-form/ArrayFormItem.mjs"; import { Fragment, jsx } from "react/jsx-runtime"; var JFL_FlatFormName = "__JFL__FlatForm"; var JFL_Nothing = ({ children }) => /* @__PURE__ */ jsx(Fragment, { children }); var JFL_Form = (props) => { const Ui = useJsonFormUi(); const FlatForm = Ui?.FlatForm ? Ui.FlatForm : JFL_Nothing; const { as: Cmp = FlatForm, children: _children, ...rest } = props; const value = useContext(FlatFormContext); const cmpProps = useMemo(() => { return { isShow: value.isShow || true, primary: value.isFormPrimary }; }, [value]); const count = Children.count(_children); const children = count > 0 ? _children : /* @__PURE__ */ jsx(JFL_FormFields, {}); return /* @__PURE__ */ jsx(Cmp, { ...rest, ...cmpProps, children }); }; JFL_Form.displayName = JFL_FlatFormName; var JFL_FormFieldsName = "__JFL__FlatFormFields"; var JFL_FormFields = (props) => { const value = useContext(FlatFormContext); const cmpProps = useMemo(() => { return { scheme: value.scheme, isFormPrimary: value.isFormPrimary, level: value.level, onFormsRef: value.onFormsRef }; }, [value]); return /* @__PURE__ */ jsx(FieldsList, { ...props, ...cmpProps }); }; JFL_FormFields.displayName = JFL_FormFieldsName; var JFL_FormFieldName = "__JFL__FlatFormField"; var JFL_FormField = ({ children, name, as, ...customProps }) => { const value = useContext(FlatFormContext); const schemeItem = useMemo(() => { return value.scheme.find((s) => s.name === name); }, [value.scheme, name]); if (!schemeItem) { throw new Error(`Cannot find scheme item by name: ${name}`); } return /* @__PURE__ */ jsx( FormField, { ...schemeItem, level: value.level, isFormPrimary: value.isFormPrimary, onFormsRef: value.onFormsRef, ...customProps, as, children }, name ); }; JFL_FormField.displayName = JFL_FormFieldName; var JFL_ArrayFormItemName = "__JFL__ArrayFormItemName"; var JFL_ArrayFormItem = ({ itemId, itemIndex, ...other }) => { const { value, changeTab, setTabErrors, ...rest } = useContext(ArrayFormContext); if (itemId === void 0 && itemIndex === void 0) throw new Error(`itemId or itemIndex is required`); const itemValue = value.find( (item, index) => item.id === itemId || index === itemIndex ); if (!itemValue) throw new Error(`itemValue has not found by itemId or itemIndex`); return /* @__PURE__ */ jsx( ArrayFormItem, { ...rest, id: itemValue.id, value: itemValue, ...other, onChange: changeTab, onError: setTabErrors } ); }; JFL_ArrayFormItem.displayName = JFL_ArrayFormItemName; var JFL_ArrayFormListName = "__JFL__ArrayFormListName"; var JFL_ArrayFormList = ({ children }) => { return /* @__PURE__ */ jsx(ArrayFormContext.Consumer, { children }); }; JFL_ArrayFormList.displayName = JFL_ArrayFormListName; var JsonFormLayout = { Form: JFL_Form, Fields: JFL_FormFields, Field: JFL_FormField, ArrayList: JFL_ArrayFormList, ArrayItem: JFL_ArrayFormItem }; var JsonFormLayout_default = JsonFormLayout; export { JFL_ArrayFormItemName, JFL_ArrayFormListName, JFL_FlatFormName, JFL_FormFieldName, JFL_FormFieldsName, JFL_Nothing, JsonFormLayout_default as default };