import FormControl, { FormControlProps } from '@material-ui/core/FormControl'; import IconButton, { IconButtonProps } from '@material-ui/core/IconButton'; import cloneDeep from 'lodash/cloneDeep'; import React, { ReactNode } from 'react'; import { FieldProps, connectField, filterDOMProps, joinName, useField, } from 'uniforms'; export type ListAddFieldProps = FieldProps< unknown, IconButtonProps, { fullWidth?: FormControlProps['fullWidth']; icon?: ReactNode; margin?: FormControlProps['margin']; variant?: FormControlProps['variant']; } >; function ListAdd({ disabled, fullWidth = true, icon = '+', margin = 'dense', name, readOnly, value, variant, ...props }: ListAddFieldProps) { const nameParts = joinName(null, name); const parentName = joinName(nameParts.slice(0, -1)); const parent = useField<{ maxCount?: number }, unknown[]>( parentName, {}, { absoluteName: true }, )[0]; const limitNotReached = !disabled && !(parent.maxCount! <= parent.value!.length); return ( { if (!readOnly) { parent.onChange(parent.value!.concat([cloneDeep(value)])); } }} > {icon} ); } export default connectField(ListAdd, { initialValue: false, kind: 'leaf', });