@undermuz/react-json-form
Version:
Generate JSON-based forms with react
119 lines (118 loc) • 3.72 kB
JavaScript
// 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
};