import React, { useCallback, useEffect, useState } from 'react'; import { FormControl, FormErrorMessage, FormLabel, useDisclosure, Modal, ModalOverlay, ModalContent, ModalBody, Text, Button, Box, Tooltip, IconButton, } from '@chakra-ui/react'; import { useTranslation } from 'react-i18next'; import { FieldInputProps } from 'models/Form'; import { Trash } from 'phosphor-react'; import { Formik } from 'formik'; import ModalHeader from 'components/Modals/ModalHeader'; import SaveButton from 'components/Buttons/SaveButton'; import CloseButton from 'components/Buttons/CloseButton'; import DataTable from 'components/DataTable'; import { Column } from 'models/Table'; // eslint-disable-next-line import/no-cycle import { ObjectArrayFieldModalOptions } from '.'; interface Props extends FieldInputProps { name: string; isError: boolean; onChange: (e: unknown[]) => void; isHidden: boolean; hideLabel: boolean; fields: React.ReactNode; columns: Column[]; options: ObjectArrayFieldModalOptions; schema: (t: (e: string) => string, useDefault?: boolean) => object; } const ObjectArrayFieldInput: React.FC = ({ name, label, value, onChange, isError, error, fields, isRequired, isHidden, schema, columns, isDisabled, hideLabel, options, }) => { const { t } = useTranslation(); const { isOpen, onOpen, onClose } = useDisclosure(); const [tempValue, setTempValue] = useState([]); const variableName = name.split('.')[name.split('.').length - 1]; const removeObj = (index: number) => { const newArr = [...tempValue]; newArr.splice(index, 1); setTempValue(newArr); }; const onSave = () => { onChange(tempValue); onClose(); }; const removeAction = useCallback( (cell) => ( } size="sm" onClick={() => removeObj(cell.row.index)} /> ), [tempValue], ); useEffect(() => { if (!isOpen) { setTempValue(value ?? []); } }, [value, isOpen]); return ( <> ); }; export default React.memo(ObjectArrayFieldInput);