diff --git a/environments/prod/prod.env b/environments/prod/prod.env index 26fd054..8e6e6b7 100644 --- a/environments/prod/prod.env +++ b/environments/prod/prod.env @@ -1,3 +1,3 @@ REACT_APP_TAB_TITLE=Gepafin -REACT_APP_API_EXECUTION_ADDRESS=https://api-dev-gepafin.memento.credit/v1 +REACT_APP_API_EXECUTION_ADDRESS=http://79.137.88.15/v1 REACT_APP_LOGO_FILENAME=logo.svg \ No newline at end of file diff --git a/src/pages/BandoApplication/index.js b/src/pages/BandoApplication/index.js index 528a23a..8fd6167 100644 --- a/src/pages/BandoApplication/index.js +++ b/src/pages/BandoApplication/index.js @@ -1,8 +1,8 @@ import React, { useState, useEffect, useCallback, useRef } from 'react'; import { __, sprintf } from '@wordpress/i18n'; -import { useNavigate, useParams } from 'react-router-dom'; +import { useParams } from 'react-router-dom'; import { klona } from 'klona'; -import { head, range, is, isNil } from 'ramda'; +import { head, range, is, pluck } from 'ramda'; import { useForm } from 'react-hook-form'; // store @@ -40,6 +40,7 @@ const BandoApplication = () => { const [bandoTitle, setBandoTitle] = useState(''); const [formId, setFormId] = useState(''); const [totalSteps, setTotalSteps] = useState(0); + const [completedSteps, setCompletedSteps] = useState(0); const [activeStep, setActiveStep] = useState(1); const [stepItems, setStepItems] = useState([{ label: 'Passo' }]); const isAsyncRequest = useStore().main.isAsyncRequest(); @@ -67,12 +68,52 @@ const BandoApplication = () => { } const onSubmit = () => { + const applId = getApplicationId(); + storeSet.main.setAsyncRequest(); + + ApplicationService.updateStatusApplication(applId, {}, submitApplicationCallback, errSubmitApplicationCallback, [ + ['status', 'SUBMIT'] + ]); }; - const saveDraft = useCallback(() => { + const submitApplicationCallback = (data) => { + if (data.status === 'SUCCESS') { + if (toast.current) { + toast.current.show({ + severity: 'success', + summary: '', + detail: __('La domanda è stata presentata!', 'gepafin') + }); + } + } + storeSet.main.unsetAsyncRequest(); + } + + const errSubmitApplicationCallback = (data) => { + storeSet.main.unsetAsyncRequest(); + if (data.status === 'VALIDATION_ERROR') { + if (formMsgs.current) { + formMsgs.current.show([ + { + id: '99', + sticky: true, severity: 'error', summary: '', + detail: data.data.join(', '), + closable: true + } + ]); + } + } else { + set404FromErrorResponse(data); + } + } + + const saveDraft = () => { trigger(); const formValues = getValues(); - const newFormValues = Object.keys(formValues).reduce((acc, cur) => { + const usedFieldsIds = pluck('id', formData); + const newFormValues = Object.keys(formValues) + .filter(v => usedFieldsIds.includes(v)) + .reduce((acc, cur) => { const formField = head(formData.filter(o => o.id === cur)); let fieldVal = formValues[cur]; @@ -103,32 +144,33 @@ const BandoApplication = () => { formMsgs.current.clear(); } - ApplicationService.submitForm(applId, submitData, submitFormCallback, errSubmitFormCallback, [ + ApplicationService.saveDraft(applId, submitData, saveDraftCallback, errSaveDraftCallback, [ ['formId', formId] ]); } - }, [errors]); + } const getApplicationId = () => { const parsed = parseInt(id) return !isNaN(parsed) ? parsed : 0; } - const submitFormCallback = (data) => { + const saveDraftCallback = (data) => { if (data.status === 'SUCCESS') { - console.log(data.data); if (toast.current) { toast.current.show({ severity: 'success', summary: '', - detail: __('Saved!', 'gepafin') + detail: __('Salvato!', 'gepafin') }); } + // update info about application completeness + ApplicationService.getApplicationForm(data.data.id, getStatusCheckCallback, errGetStatusCheckCallbacks); } storeSet.main.unsetAsyncRequest(); } - const errSubmitFormCallback = (data) => { + const errSaveDraftCallback = (data) => { storeSet.main.unsetAsyncRequest(); if (data.status === 'VALIDATION_ERROR') { if (formMsgs.current) { @@ -183,7 +225,8 @@ const BandoApplication = () => { setFormId(data.data.formId); setTotalSteps(data.data.totalFormSteps); - setActiveStep(data.data.currentStep) + setCompletedSteps(data.data.completedSteps); + setActiveStep(data.data.currentStep); } storeSet.main.unsetAsyncRequest(); } @@ -203,9 +246,18 @@ const BandoApplication = () => { } } + const getStatusCheckCallback = (data) => { + if (data.status === 'SUCCESS') { + setCompletedSteps(data.data.completedSteps); + } + } + + const errGetStatusCheckCallbacks = (data) => { + set404FromErrorResponse(data); + } + useEffect(() => { const newFormData = klona(formInitialData); - console.log('newFormData', newFormData); newFormData.map(o => setValue(o.fieldId, o.fieldValue)); }, [formInitialData]); @@ -325,6 +377,11 @@ const BandoApplication = () => { label={__('Vai avanti', 'gepafin')} icon="pi pi-arrow-right" iconPos="right"/> : null} + diff --git a/src/pages/BandoFlowEdit/index.js b/src/pages/BandoFlowEdit/index.js index a1d715e..6174512 100644 --- a/src/pages/BandoFlowEdit/index.js +++ b/src/pages/BandoFlowEdit/index.js @@ -145,6 +145,10 @@ const BandoFlowEdit = () => { setInitialForm(data.data.initialForm); setFinalForm(data.data.finalForm); setBandoStatus(data.data.callStatus); + const chosenFieldItem = head(data.data.flowData.filter(o => !isEmpty(o.chosenField))); + if (chosenFieldItem) { + setMainField(chosenFieldItem.chosenField); + } const flowDataItem = head(data.data.flowData.filter(o => !isEmpty(o.chosenField))); if (flowDataItem) { diff --git a/src/pages/BandoForms/index.js b/src/pages/BandoForms/index.js index 254cf20..3fd712b 100644 --- a/src/pages/BandoForms/index.js +++ b/src/pages/BandoForms/index.js @@ -1,7 +1,7 @@ import React, { useState, useEffect } from 'react'; import { __ } from '@wordpress/i18n'; import { useParams, useNavigate } from 'react-router-dom'; -import { isEmpty } from 'ramda'; +import { is, isEmpty, isNil } from 'ramda'; import { classNames } from 'primereact/utils'; // components @@ -14,6 +14,7 @@ import FormsService from '../../service/forms-service'; // store import { storeSet } from '../../store'; import set404FromErrorResponse from '../../helpers/set404FromErrorResponse'; +import BandoService from '../../service/bando-service'; const BandoForms = () => { const { id } = useParams(); @@ -22,6 +23,7 @@ const BandoForms = () => { const [selectedTemplate, setSelectedTemplate] = useState(null); const [selectedForm, setSelectedForm] = useState(null); const [forms, setForms] = useState([]); + const [bandoStatus, setBandoStatus] = useState(''); const doCreateNewForm = () => { navigate(`/bandi/${id}/forms/new`); @@ -46,6 +48,18 @@ const BandoForms = () => { //navigate(`/bandi/${id}`); } + const getCallback = (data) => { + if (data.status === 'SUCCESS') { + setBandoStatus(data.data.status); + } + storeSet.main.unsetAsyncRequest(); + } + + const errGetCallback = (data) => { + set404FromErrorResponse(data); + storeSet.main.unsetAsyncRequest(); + } + const getFormsCallback = (data) => { if (data.status === 'SUCCESS') { const forms = data.data.map(o => ({label: o.label, value: o.id})) @@ -68,6 +82,7 @@ const BandoForms = () => { ]) storeSet.main.setAsyncRequest(); + BandoService.getBando(id, getCallback, errGetCallback); FormsService.getFormsForCall(bandoId, getFormsCallback, errGetFormsCallback); }, [id]); @@ -112,6 +127,7 @@ const BandoForms = () => {
{__('Inizia con un form completamente vuoto e personalizzabil', 'gepafin')}
@@ -134,7 +150,7 @@ const BandoForms = () => { outlined disabled={!selectedForm} onClick={goToEditForm} - label={__('Modifica', 'gepafin')} + label={'PUBLISH' === bandoStatus ? __('Mostra', 'gepafin') : __('Modifica', 'gepafin')} icon="pi pi-cog" iconPos="right"/> diff --git a/src/pages/DashboardBeneficiario/components/MyLatestSubmissionsTable/index.js b/src/pages/DashboardBeneficiario/components/MyLatestSubmissionsTable/index.js index 4a73ec8..85d4c48 100644 --- a/src/pages/DashboardBeneficiario/components/MyLatestSubmissionsTable/index.js +++ b/src/pages/DashboardBeneficiario/components/MyLatestSubmissionsTable/index.js @@ -55,10 +55,8 @@ const MyLatestSubmissionsTable = () => { const getFormattedBandiData = (data) => { return [...(data || [])].map((d) => { - d.modify_date = new Date(); - d.end_date = new Date(); - d.name = `Bando ${d.callId}`; - d.progress = 37; + d.callEndDate = new Date(d.callEndDate); + d.modifiedDate = new Date(d.modifiedDate); return d; }); @@ -89,9 +87,9 @@ const MyLatestSubmissionsTable = () => { const initFilters = () => { setFilters({ global: { value: null, matchMode: FilterMatchMode.CONTAINS }, - name: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, - modify_date: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, - end_date: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, + callTitle: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, + modifiedDate: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, + callEndDate: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, status: { operator: FilterOperator.OR, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] }, }); setGlobalFilterValue(''); @@ -110,11 +108,11 @@ const MyLatestSubmissionsTable = () => { }; const dateModifyBodyTemplate = (rowData) => { - return formatDate(rowData.modify_date); + return formatDate(rowData.modifiedDate); }; const dateEndBodyTemplate = (rowData) => { - return formatDate(rowData.end_date); + return formatDate(rowData.callEndDate); }; const dateFilterTemplate = (options) => { @@ -152,12 +150,12 @@ const MyLatestSubmissionsTable = () => { globalFilterFields={['name', 'status']} header={header} emptyMessage="Nothing found." onFilter={(e) => setFilters(e.filters)}> -