import { getTemplate, getUiOptions, ArrayFieldTemplateProps, ArrayFieldTemplateItemType, FormContextType, RJSFSchema, StrictRJSFSchema, } from '@rjsf/utils'; import { Fieldset, Box, Group } from '@mantine/core'; /** The `ArrayFieldTemplate` component is the template used to render all items in an array. * * @param props - The `ArrayFieldTemplateItemType` props for the component */ export default function ArrayFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any >(props: ArrayFieldTemplateProps) { const { canAdd, className, disabled, idSchema, items, onAddClick, readonly, required, schema, uiSchema, title, registry, } = props; const uiOptions = getUiOptions(uiSchema); const ArrayFieldDescriptionTemplate = getTemplate<'ArrayFieldDescriptionTemplate', T, S, F>( 'ArrayFieldDescriptionTemplate', registry, uiOptions ); const ArrayFieldItemTemplate = getTemplate<'ArrayFieldItemTemplate', T, S, F>( 'ArrayFieldItemTemplate', registry, uiOptions ); const ArrayFieldTitleTemplate = getTemplate<'ArrayFieldTitleTemplate', T, S, F>( 'ArrayFieldTitleTemplate', registry, uiOptions ); // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; const legend = (uiOptions.title || title) && ( ); return (
{(uiOptions.description || schema.description) && ( )} {items && items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType) => ( ))} {canAdd && ( )}
); }