import classnames from 'classnames'; import React, { Children, cloneElement, isValidElement, ReactElement, ReactNode, } from 'react'; import { connectField, filterDOMProps, HTMLFieldProps } from 'uniforms'; import ListAddField from './ListAddField'; import ListItemField from './ListItemField'; export type ListFieldProps = HTMLFieldProps< unknown[], HTMLDivElement, { addIcon?: ReactNode; itemProps?: object; removeIcon?: ReactNode; } >; function List({ addIcon, children = , className, error, errorMessage, itemProps, label, removeIcon, showInlineError, value, ...props }: ListFieldProps) { return (
{label && (
{!!(error && showInlineError) && ( {errorMessage} )}
)} {value?.map((item, itemIndex) => Children.map(children, (child, childIndex) => isValidElement(child) ? cloneElement(child as ReactElement, { key: `${itemIndex}-${childIndex}`, name: child.props.name?.replace('$', '' + itemIndex), ...itemProps, removeIcon, }) : child, ), )}
); } export default connectField(List);