import React, { useState, useEffect, useRef } from 'react'; import { __ } from '@wordpress/i18n'; import { useNavigate, useParams } from 'react-router-dom'; import { is, isNil } from 'ramda'; // store import { storeSet, useStore } from '../../store'; // api import BandoService from '../../service/bando-service'; // tools import getBandoLabel from '../../helpers/getBandoLabel'; // components import { Button } from 'primereact/button'; import { Skeleton } from 'primereact/skeleton'; import { Steps } from 'primereact/steps'; import BandoEditFormStep1 from './components/BandoEditFormStep1'; import BandoEditFormStep2 from './components/BandoEditFormStep2'; import { Messages } from 'primereact/messages'; import FormsService from '../../service/forms-service'; const BandoEdit = () => { const isAsyncRequest = useStore().main.isAsyncRequest(); const navigate = useNavigate(); const { id } = useParams(); const [activeStep, setActiveStep] = useState(null) const [data, setData] = useState({}); const [forms, setForms] = useState([]); //const [selectedTemplate, setSelectedTemplate] = useState(null); //const [templates, setTemplate] = useState(null); const formRef = useRef(null); const bandoMsgs = useRef(null); const stepItems = [ { label: __('Testi', 'gepafin'), command: () => { if (activeStep === 0) { return false } bandoMsgs.current.clear(); const isFormValid = formRef.current.isFormValid(); //const values = formRef.current.getValues(); //const diffData = equal(values, data); // TODO warn about unsaved data if (isFormValid) { goToStep(0) } else { bandoMsgs.current.show([ { id: '98', sticky: true, severity: 'error', summary: 'Error', detail: __('Potrai andare su altro step dopo risolvere errori della forma', 'gepafin'), closable: true } ]); } } }, { label: __('Gestione', 'gepafin'), command: () => { if (activeStep === 1) { return false } bandoMsgs.current.clear(); const isFormValid = formRef.current.isFormValid(); //const values = formRef.current.getValues(); //const diffData = equal(values, data); // TODO warn about unsaved data if (isFormValid) { goToStep(1); } else { bandoMsgs.current.show([ { id: '98', sticky: true, severity: 'error', summary: 'Error', detail: __('Potrai andare su altro step dopo risolvere errori della forma', 'gepafin'), closable: true } ]); } } } ]; const goToStep = (step) => { setActiveStep(step); } const openBandoFormManagement = () => { navigate(`/bandi/${id}/forms`); } const validateBando = () => { storeSet.main.setAsyncRequest(); bandoMsgs.current.clear(); BandoService.validateBando(id, validateCallback, errValidateCallback); } const validateCallback = (data) => { if (data.status === 'SUCCESS') { if (bandoMsgs.current) { bandoMsgs.current.show([ { id: '99', sticky: true, severity: 'success', summary: '', detail: __('Potrai pubblicare il tuo Bando.', 'gepafin'), closable: false } ]); } } storeSet.main.unsetAsyncRequest(); } const errValidateCallback = (data) => { standardErrCallback(data); } const publishBando = () => { storeSet.main.setAsyncRequest(); bandoMsgs.current.clear(); BandoService.updateBandoStatus(id, publishCallback, errPublishCallback, [['status', 'PUBLISH']]); } const publishCallback = (data) => { if (data.status === 'SUCCESS') { if (bandoMsgs.current) { bandoMsgs.current.show([ { id: '99', sticky: true, severity: 'success', summary: '', detail: __('Pubblicato!', 'gepafin'), closable: false } ]); } } storeSet.main.unsetAsyncRequest(); } const errPublishCallback = (data) => { standardErrCallback(data); } const getCallback = (data) => { if (data.status === 'SUCCESS') { if (!isNil(data.data.dates) && data.data.dates.length) { data.data.dates = data.data.dates.map(v => is(String, v) ? new Date(v) : v); } if (data.data.status === 'READY_TO_PUBLISH') { bandoMsgs.current.clear(); bandoMsgs.current.show([ { id: '1', sticky: true, severity: 'info', summary: 'Info', detail: __('Potrai pubblicare il tuo Bando.', 'gepafin'), closable: false } ]); } else if (data.data.status === 'DRAFT') { if (bandoMsgs.current) { bandoMsgs.current.clear(); bandoMsgs.current.show([ { id: '1', sticky: true, severity: 'info', summary: 'Info', detail: __('Potrai pubblicare il tuo Bando solo dopo aver completato tutti i campi obbligatori contrassegnati dagli asterischi.', 'gepafin'), closable: false } ]); } } setData(data.data); } storeSet.main.unsetAsyncRequest(); } const errGetCallback = (data) => { standardErrCallback(data); } const standardErrCallback = (data) => { if (bandoMsgs.current && data.message) { bandoMsgs.current.show([ { sticky: true, severity: 'error', summary: 'Error', detail: data.message, closable: true } ]); } storeSet.main.unsetAsyncRequest(); } const getFormsCallback = (data) => { if (data.status === 'SUCCESS') { setForms(data.data); } storeSet.main.unsetAsyncRequest(); } useEffect(() => { storeSet.main.setAsyncRequest(); setActiveStep(0); const parsed = parseInt(id) const bandoId = !isNaN(parsed) ? parsed : 0; if (bandoId === 0) { setData({ status: 'draft', name: '' }); storeSet.main.unsetAsyncRequest(); if (bandoMsgs.current) { bandoMsgs.current.clear(); bandoMsgs.current.show([ { id: '1', sticky: true, severity: 'info', summary: 'Info', detail: __('Potrai pubblicare il tuo Bando solo dopo aver completato tutti i campi obbligatori contrassegnati dagli asterischi.', 'gepafin'), closable: false } ]); } } else { BandoService.getBando(id, getCallback, errGetCallback); FormsService.getFormsForCall(id, getFormsCallback, () => { }); } }, []); return (

{__('Creazione/Modifica Bando', 'gepafin')}

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

{/*!isLoading ?
setSelectedTemplate(e.value)} options={templates} optionLabel="name" placeholder={__('Seleziona template', 'gepafin')}/>
: null*/} {!isAsyncRequest ? : null}
{!isAsyncRequest ? <> {activeStep === 0 ? : null} {activeStep === 1 ? : null}

{__('Crea o modifica il Form compilabile dal Beneficiario', 'gepafin')}

{__('Publicca il Form', 'gepafin')}

: <> }
) } export default BandoEdit;