import React, { useState, useEffect, useRef, useMemo } from 'react'; import { __ } from '@wordpress/i18n'; import { useNavigate, useParams } from 'react-router-dom'; import { head, is, isEmpty, isNil, pathOr } from 'ramda'; import { wrap } from 'object-path-immutable'; // store import { storeSet, useStore } from '../../store'; // api import AmendmentsService from '../../service/amendments-service'; import CommunicationService from '../../service/communication-service'; // tools import set404FromErrorResponse from '../../helpers/set404FromErrorResponse'; import getBandoLabel from '../../helpers/getBandoLabel'; import getDateFromISOstring from '../../helpers/getDateFromISOstring'; import renderHtmlContent from '../../helpers/renderHtmlContent'; // components import { Skeleton } from 'primereact/skeleton'; 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 { InputText } from 'primereact/inputtext'; import { InputTextarea } from 'primereact/inputtextarea'; import { klona } from 'klona'; import { useForm } from 'react-hook-form'; import FormField from '../../components/FormField'; import uniqid from '../../helpers/uniqid'; import { Editor } from 'primereact/editor'; import { TZDate } from '@date-fns/tz'; import { InputNumber } from 'primereact/inputnumber'; const SoccorsoEditPreInstructor = () => { const isAsyncRequest = useStore().main.isAsyncRequest(); const { id, amendmentId } = useParams(); const navigate = useNavigate(); const [data, setData] = useState({}); const [comms, setComms] = useState([]); const [isVisibleNewCommDialog, setIsVisibleNewCommDialog] = useState(false); const [newCommData, setNewCommData] = useState({}); const [isLoadingCommunication, setIsLoadingCommunication] = useState(false); const [isVisibleExtendTimeDialog, setIsVisibleExtendTimeDialog] = useState(false); const [extendedTime, setExtendedTime] = useState(3); const [isLoadingExtendingTime, setIsLoadingExtendingTime] = useState(false); const toast = useRef(null); const [formInitialData, setFormInitialData] = useState({}); const { control, handleSubmit, formState: { errors, isValid }, setValue, register, trigger, getValues, clearErrors } = useForm({ defaultValues: useMemo(() => { return formInitialData; }, [formInitialData]), mode: 'onChange' }); const goToEvaluationPage = () => { navigate(`/domande/${id}`); } const getCallback = (data) => { if (data.status === 'SUCCESS') { setData(getFormattedData(data.data)); CommunicationService.getCommsByAmendmentId(data.data.id, getCommsCallback, errGetCommsCallback); } //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 getCommsCallback = (data) => { if (data.status === 'SUCCESS') { setComms(data.data.commentsList.map(o => getFormattedCommsData(o))); } storeSet.main.unsetAsyncRequest(); } const errGetCommsCallback = (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 getFormattedCommsData = (data) => { data.id = isNil(data.id) ? uniqid('id') : data.id; data.commentedDate = is(String, data.commentedDate) ? new Date(data.commentedDate) : (data.commentedDate ? data.commentedDate : ''); data.createdDate = is(String, data.createdDate) ? new Date(data.createdDate) : (data.createdDate ? data.createdDate : ''); data.updatedDate = is(String, data.updatedDate) ? new Date(data.updatedDate) : (data.updatedDate ? data.updatedDate : ''); return data; }; const headerNewComDialog = () => { return {__('Aggiungi comunicazione', 'gepafin')} } const hideNewComDialog = () => { setIsVisibleNewCommDialog(false); setNewCommData({ title: '', comment: '' }); } const footerNewComDialog = () => { return
} const openNewCommDialog = () => { setIsVisibleNewCommDialog(true); setNewCommData({ title: '', comment: '' }); } const updateNewCommData = (value, path) => { const newData = wrap(newCommData).set(path.split('.'), value).value(); setNewCommData(newData); } const renderHeader = () => { return ( ); }; const header = renderHeader(); const updateNewAmendmentData = (value, path) => { const newData = wrap(data).set(path.split('.'), value).value(); setData(newData); } const createCommunication = () => { setIsLoadingCommunication(true); CommunicationService.createCommunication(amendmentId, newCommData, createCommunicationCallback, errCreateCommunicationCallback); } const createCommunicationCallback = (data) => { if (data.status === 'SUCCESS') { if (toast.current) { toast.current.show({ severity: 'success', summary: '', detail: data.message }); } setComms([...comms, getFormattedCommsData(data.data)]) setIsVisibleNewCommDialog(false); } setIsLoadingCommunication(false); } const errCreateCommunicationCallback = (data) => { if (toast.current && data.message) { toast.current.show({ severity: 'error', summary: '', detail: data.message }); } set404FromErrorResponse(data); setIsLoadingCommunication(false); } 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 = { updatedFormFields: newFormValues, //note: data.internalNote } 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 }); } } 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); } useEffect(() => { const parsedSoccorsoId = parseInt(amendmentId); const soccorsoEntityId = !isNaN(parsedSoccorsoId) ? parsedSoccorsoId : 0; AmendmentsService.getSoccorsoById(getCallback, errGetCallback, [['id', soccorsoEntityId]]); }, [amendmentId]); return (

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

{!isAsyncRequest && !isEmpty(data) ?

{__('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.map((o, i) =>
  1. {o.label}
  2. )}

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

{renderHtmlContent(data.note)}

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

{!isNil(comms) && !isEmpty(comms) ? comms.map((o, i) => ) : }
{__('Data', 'gepafin')} {__('Comunicazione', 'gepafin')}
{getDateFromISOstring(o.commentedDate)}

{o.title}

{o.comment}

- -

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

{data.formFields.map((o, i) => { const test = { 'updatedFormFields': [ { 'fieldId': 'a5867bdceb', 'fieldValue': '136' }, { 'fieldId': 'ab0f00219b', 'fieldValue': null } ] } const thisField = head(test.updatedFormFields.filter(j => j.fieldId === o.fieldId)); const value = pathOr({}, ['fieldValue'], thisField); console.log('value', value, o.fieldId); return })}
{__('Azioni', 'gepafin')}
updateNewAmendmentData( e.htmlValue, 'internalNote' )} style={{ height: 80 * 3, width: '100%' }} />
: <> }
updateNewCommData(e.target.value, 'title')}/> updateNewCommData(e.target.value, 'comment')}/>
setExtendedTime(e.value)}/>
) } export default SoccorsoEditPreInstructor;