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'; import RepeaterFields from '../DomandaEditPreInstructor/components/RepeaterFields'; 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
{__('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)}