import React, { useMemo, useState, useCallback, useEffect, useRef } from 'react'; import { useForm, useFieldArray } from 'react-hook-form'; import { isEmpty, head, pluck } 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'; import { Dialog } from 'primereact/dialog'; import { Toast } from 'primereact/toast'; import CompanyService from '../../../../service/company-service'; import FileSelect from '../../../../components/FormField/components/FileSelect'; import ApplicationService from '../../../../service/application-service'; import set404FromErrorResponse from '../../../../helpers/set404FromErrorResponse'; import { storeSet } from '../../../../store'; const EvaluationExtraFiles = ({ sourceId, applicationId, companyId, sourceName, updateFn = () => { }, updateCallbackFn = () => { }, defaultValue = [], shouldDisable = false }) => { const [chosen, setChosen] = useState(''); const [isVisibleCompanyDocsDialog, setIsVisibleCompanyDocsDialog] = useState(false); const [companyDocs, setCompanyDocs] = useState([]); const [companyDocsSelected, setCompanyDocsSelected] = useState([]); const toast = useRef(null); 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]); const openCompanyArchive = () => { setIsVisibleCompanyDocsDialog(true); } const headerCompanyDocsDialog = () => { return {__('Documenti aziendale', 'gepafin')}; } const hideCompanyDocsDialog = () => { setIsVisibleCompanyDocsDialog(false); setCompanyDocsSelected([]); } const footerPreTecEvalDialog = useCallback(() => { return