import React, { useMemo, useState, useCallback } from 'react'; import { useForm, useFieldArray } from 'react-hook-form'; import { isEmpty, head } from 'ramda'; import { __ } from '@wordpress/i18n'; import { klona } from 'klona'; // tools import uniqid from '../../../../helpers/uniqid'; // components import FormField from '../../../../components/FormField'; import { Button } from 'primereact/button'; const RepeaterFields = ({ sourceId, sourceName, updateFn = () => { }, updateCallbackFn = () => { }, defaultValue = [], shouldDisable = false }) => { const [chosen, setChosen] = useState(''); const { control, handleSubmit, formState: { errors }, setValue, register, trigger, getValues, watch } = useForm({ defaultValues: useMemo(() => { return { items: defaultValue || [] }; }, [defaultValue]), mode: 'onChange' }); const { fields, append, remove } = useFieldArray({ control, name: 'items' }); const watchFields = watch('items'); const onSubmit = () => { } const doUpdateAfterFileUploaded = () => { const formData = getValues(); updateFn(formData.items); updateCallbackFn(formData.items); } const addNew = () => { const uid = uniqid('f'); const newItem = { fieldId: uid, nameValue: '', fileValue: [] } append(newItem); setChosen(newItem.fieldId); trigger(); }; const setNewChosen = useCallback((id) => { const chosenObj = head(fields.filter(o => id === o.fieldId)); if (chosenObj) { setChosen(chosen === id ? '' : id); } }, [fields, chosen]); const removeItem = useCallback((index) => { const chosenObj = klona(fields[index]); remove(index); if (chosen === chosenObj.fieldId) { setChosen(''); } const formData = getValues(); updateFn(formData.items); updateCallbackFn(formData.items); }, [fields, chosen]); return (