import React, { useState, useEffect, useRef, useMemo } from 'react'; import { __ } from '@wordpress/i18n'; import { useNavigate, useParams } from 'react-router-dom'; import { is, isEmpty } from 'ramda'; import { wrap } from 'object-path-immutable'; import { klona } from 'klona'; import { useForm } from 'react-hook-form'; // store import { storeSet, useStore } from '../../store'; // api import AmendmentsService from '../../service/amendments-service'; // tools import set404FromErrorResponse from '../../helpers/set404FromErrorResponse'; import getBandoLabel from '../../helpers/getBandoLabel'; import getDateFromISOstring from '../../helpers/getDateFromISOstring'; import renderHtmlContent from '../../helpers/renderHtmlContent'; // components import { Button } from 'primereact/button'; import BlockingOverlay from '../../components/BlockingOverlay'; import { Toast } from 'primereact/toast'; import { classNames } from 'primereact/utils'; import { Dialog } from 'primereact/dialog'; import FormField from '../../components/FormField'; import { Editor } from 'primereact/editor'; import { InputNumber } from 'primereact/inputnumber'; import SoccorsoComunications from './components/SoccorsoComunications'; const SoccorsoEditPreInstructor = () => { const isAsyncRequest = useStore().main.isAsyncRequest(); const { id, amendmentId } = useParams(); const navigate = useNavigate(); const [data, setData] = useState({}); const [isVisibleExtendTimeDialog, setIsVisibleExtendTimeDialog] = useState(false); const [extendedTime, setExtendedTime] = useState(3); const [isLoadingExtendingTime, setIsLoadingExtendingTime] = useState(false); const [isLoadingReminding, setIsLoadingReminding] = useState(false); const toast = useRef(null); const [formInitialData, setFormInitialData] = useState({}); const { control, handleSubmit, formState: { errors }, setValue, register, trigger, getValues } = useForm({ defaultValues: useMemo(() => { return formInitialData; }, [formInitialData]), mode: 'onChange' }); const goToEvaluationPage = () => { navigate(`/domande/${id}`); } const getCallback = (data) => { if (data.status === 'SUCCESS') { setData(getFormattedData(data.data)); const formDataInitial = data.data.applicationFormFields.reduce((acc, cur) => { if (cur.fieldValue) { acc[cur.fieldId] = cur.fieldValue; } return acc; }, {}); setFormInitialData(formDataInitial); } storeSet.main.unsetAsyncRequest(); } const errGetCallback = (data) => { if (toast.current && data.message) { toast.current.show({ severity: 'error', summary: '', detail: data.message }); } set404FromErrorResponse(data); storeSet.main.unsetAsyncRequest(); } const getFormattedData = (data) => { data.startDate = is(String, data.startDate) ? new Date(data.startDate) : (data.startDate ? data.startDate : ''); data.expirationDate = is(String, data.expirationDate) ? new Date(data.expirationDate) : (data.expirationDate ? data.expirationDate : ''); return data; }; const renderHeader = () => { return ( ); }; const header = renderHeader(); const updateNewAmendmentData = (value, path) => { const newData = wrap(data).set(path.split('.'), value).value(); setData(newData); } const onSubmit = () => { }; const doUpdateAmendment = () => { trigger(); let formValues = klona(getValues()); const newFormValues = Object.keys(formValues) .reduce((acc, cur) => { let fieldVal = formValues[cur]; fieldVal = isEmpty(fieldVal) ? null : fieldVal; fieldVal = is(Array, fieldVal) ? fieldVal.map(o => o.id).join(',') : null; acc.push({ 'fieldId': cur, 'fieldValue': fieldVal }); return acc; }, []); const submitData = { applicationFormFields: newFormValues, } storeSet.main.setAsyncRequest(); AmendmentsService.updateSoccorso(amendmentId, submitData, updateAmendmentCallback, errUpdateAmendmentCallback); } const updateAmendmentCallback = (data) => { if (data.status === 'SUCCESS') { if (toast.current) { toast.current.show({ severity: 'success', summary: '', detail: data.message }); } const newFormDataInitial = data.data.applicationFormFields.reduce((acc, cur) => { if (cur.fieldValue) { acc[cur.fieldId] = cur.fieldValue; } return acc; }, formInitialData); setFormInitialData(newFormDataInitial); } storeSet.main.unsetAsyncRequest(); } const errUpdateAmendmentCallback = (data) => { if (toast.current && data.message) { toast.current.show({ severity: 'error', summary: '', detail: data.message }); } set404FromErrorResponse(data); storeSet.main.unsetAsyncRequest(); } const doCloseAmendment = () => { const submitData = { internalNote: data.internalNote } storeSet.main.setAsyncRequest(); AmendmentsService.closeSoccorso(amendmentId, submitData, closeAmendmentCallback, errCloseAmendmentCallback); } const closeAmendmentCallback = (data) => { if (data.status === 'SUCCESS') { if (toast.current) { toast.current.show({ severity: 'success', summary: '', detail: data.message }); } if (data.data.status) { updateNewAmendmentData(data.data.status, 'status') } } storeSet.main.unsetAsyncRequest(); } const errCloseAmendmentCallback = (data) => { if (toast.current && data.message) { toast.current.show({ severity: 'error', summary: '', detail: data.message }); } set404FromErrorResponse(data); storeSet.main.unsetAsyncRequest(); } const headerExtendRespDialog = () => { return {__('Estendi scadenza', 'gepafin')} } const hideExtendRespDialog = () => { setIsVisibleExtendTimeDialog(false); } const footerExtendRespDialog = () => { return
} const openExtendResponseTimeDialog = () => { setIsVisibleExtendTimeDialog(true); setExtendedTime(3); } const doExtendTimeResponse = () => { setIsLoadingExtendingTime(true); AmendmentsService.extendSoccorso(amendmentId, extendedTime, extendCallback, errExtendCallback); } const extendCallback = (data) => { if (data.status === 'SUCCESS') { if (toast.current) { toast.current.show({ severity: 'success', summary: '', detail: data.message }); } setIsVisibleExtendTimeDialog(false); } setIsLoadingExtendingTime(false); } const errExtendCallback = (data) => { if (toast.current && data.message) { toast.current.show({ severity: 'error', summary: '', detail: data.message }); } set404FromErrorResponse(data); setIsLoadingExtendingTime(false); } const sendReminder = () => { setIsLoadingReminding(true); AmendmentsService.sendReminderForSoccorso(amendmentId, reminderCallback, errReminderCallback) } const reminderCallback = (data) => { if (data.status === 'SUCCESS') { if (toast.current) { toast.current.show({ severity: 'success', summary: '', detail: data.message }); } } setIsLoadingReminding(false); } const errReminderCallback = (data) => { if (toast.current && data.message) { toast.current.show({ severity: 'error', summary: '', detail: data.message }); } set404FromErrorResponse(data); setIsLoadingReminding(false); } useEffect(() => { if (formInitialData) { //reset(); Object.keys(formInitialData).map(k => setValue(k, formInitialData[k])); trigger(); } }, [formInitialData]); useEffect(() => { const parsedSoccorsoId = parseInt(amendmentId); const soccorsoEntityId = !isNaN(parsedSoccorsoId) ? parsedSoccorsoId : 0; AmendmentsService.getSoccorsoById(getCallback, errGetCallback, [['id', soccorsoEntityId]]); }, [amendmentId]); return (

{__('Soccorso Istruttorio - Dettagli', 'gepafin')}

{__('ID domanda', 'gepafin')} {data.applicationId}

{__('Bando', 'gepafin')} {data.callName}

{__('Beneficiario', 'gepafin')} {data.beneficiaryName}

{__('Inizio', 'gepafin')} {getDateFromISOstring(data.startDate)}

{__('Scadenza', 'gepafin')} {getDateFromISOstring(data.expirationDate)}

{__('Stato', 'gepafin')} {getBandoLabel(data.status)}

{__('Dettagli Richiesta', 'gepafin')}

{__('Documenti Richiesti', 'gepafin')}

    {data.formFields ? data.formFields.map((o, i) =>
  1. {o.label}
  2. ) : null}

{__('Note e spiegazioni', 'gepafin')}

{renderHtmlContent(data.note)}

{__('Comunicazioni', 'gepafin')}

{__('Documenti Ricevuti', 'gepafin')}

{data.formFields ? data.formFields.map((o, i) => { return }) : null}
{__('Azioni', 'gepafin')}
updateNewAmendmentData( e.htmlValue, 'internalNote' )} style={{ height: 80 * 3, width: '100%' }} />
setExtendedTime(e.value)}/>
) } export default SoccorsoEditPreInstructor;