import { getTemplate, getUiOptions, ArrayFieldTemplateProps, FormContextType, GenericObjectType, RJSFSchema, StrictRJSFSchema, buttonId, } from '@rjsf/utils'; import classNames from 'classnames'; import { Col, Row, ConfigProvider } from 'antd'; import { useContext } from 'react'; /** The `ArrayFieldTemplate` component is the template used to render all items in an array. * * @param props - The `ArrayFieldTemplateProps` props for the component */ export default function ArrayFieldTemplate< T = any, S extends StrictRJSFSchema = RJSFSchema, F extends FormContextType = any, >(props: ArrayFieldTemplateProps) { const { canAdd, className, disabled, fieldPathId, items, optionalDataControl, onAddClick, readonly, registry, required, schema, title, uiSchema, } = props; const uiOptions = getUiOptions(uiSchema); const ArrayFieldTitleTemplate = getTemplate<'ArrayFieldTitleTemplate', T, S, F>( 'ArrayFieldTitleTemplate', registry, uiOptions, ); const showOptionalDataControlInTitle = !readonly && !disabled; const { formContext } = registry; // Button templates are not overridden in the uiSchema const { ButtonTemplates: { AddButton }, } = registry.templates; const { labelAlign = 'right', rowGutter = 24 } = formContext as GenericObjectType; const { getPrefixCls } = useContext(ConfigProvider.ConfigContext); const prefixCls = getPrefixCls('form'); const labelClsBasic = `${prefixCls}-item-label`; const labelColClassName = classNames( labelClsBasic, labelAlign === 'left' && `${labelClsBasic}-left`, // labelCol.className, ); return (
{(uiOptions.title || title) && ( )} {!showOptionalDataControlInTitle ? optionalDataControl : undefined} {items} {canAdd && ( )}
); }