@vtaits/react-hook-form-schema
Version:
Integration of react-hook-form and @vtaits/form-schema
116 lines (114 loc) • 2.57 kB
JavaScript
import {
renderError
} from "./chunk-XUSORK34.js";
import {
renderBySchema
} from "./chunk-VHBMH3GH.js";
// src/fields/list/list.tsx
import { list as listBase } from "@vtaits/form-schema/fields/list";
import { useUI } from "@vtaits/react-form-schema-base-ui";
import { Fragment } from "react";
import {
get,
useFieldArray
} from "react-hook-form";
import { jsx } from "react/jsx-runtime";
function ListComponent({
renderParams: {
fieldPath,
fieldSchema,
fieldSchema: {
addButtonLabel = "Add",
compact,
disabled,
getBlockLabel,
label,
hint,
inline,
renderListItemWrapper: renderListItemWrapperParam,
required
},
getFieldSchema,
getFieldType,
name: nameParam,
parents
},
formResult,
formResult: {
clearErrors,
control,
formState: { errors }
}
}) {
const {
renderListAddButton,
renderListItemWrapper: renderListItemWrapperBase,
renderListWrapper
} = useUI();
const renderListItemWrapper = renderListItemWrapperParam || renderListItemWrapperBase;
const error = renderError(get(errors, fieldPath));
const { append, fields, remove } = useFieldArray({
control,
name: fieldPath
});
const wrapperParams = {
error,
hint,
label,
name: fieldPath,
required
};
const itemParents = [
...parents,
{
name: nameParam,
values: fields
}
];
return renderListWrapper({
...wrapperParams,
compact,
actions: renderListAddButton({
disabled,
children: addButtonLabel,
onClick: () => {
append(
Object.hasOwn(fieldSchema, "initialItem") ? fieldSchema.initialItem : {}
);
clearErrors(fieldPath);
}
}),
inline,
items: fields.map((field, index) => {
return /* @__PURE__ */ jsx(Fragment, { children: renderListItemWrapper({
children: renderBySchema(
formResult,
getFieldSchema,
getFieldType,
() => field,
`${index}`,
void 0,
itemParents
),
compact,
disabled,
handleRemove: () => {
remove(index);
clearErrors(fieldPath);
},
inline,
name: `${fieldPath}[${index}]`,
title: getBlockLabel?.(index)
}) }, field.id);
}),
name: fieldPath
});
}
var list = {
...listBase,
render: (renderParams, formResult) => /* @__PURE__ */ jsx(ListComponent, { renderParams, formResult })
};
export {
list
};
//# sourceMappingURL=chunk-CRJ7DBVQ.js.map