diff --git a/.gitignore b/.gitignore index 24b2bac..0ed4d77 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ package-lock.json # misc .DS_Store +.env .env.local .env.development.local .env.test.local diff --git a/package.json b/package.json index 7edb643..05d514e 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "copy-to-clipboard": "3.3.3", "deep-object-diff": "1.1.9", "dompurify": "3.2.3", - "expression-language": "^1.2.0", + "expression-language": "1.2.0", "fast-deep-equal": "3.1.3", "hotkeys-js": "3.13.9", "html-react-parser": "5.2.2", @@ -26,8 +26,8 @@ "klona": "2.0.6", "leader-line-new": "1.1.9", "luxon": "3.5.0", - "mathjs": "^14.0.1", - "mustache": "^4.2.0", + "mathjs": "14.0.1", + "mustache": "4.2.0", "object-path-immutable": "4.1.2", "primeicons": "7.0.0", "primereact": "10.9.2", @@ -41,7 +41,7 @@ "react-router-dom": "7.1.3", "react-scripts": "5.0.1", "recharts": "2.15.0", - "sockjs-client": "^1.6.1", + "sockjs-client": "1.6.1", "validate.js": "0.13.1", "zustand": "4.5.4", "zustand-x": "3.0.4" diff --git a/src/helpers/getQueryParamsForPaginatedEndpoint.js b/src/helpers/getQueryParamsForPaginatedEndpoint.js new file mode 100644 index 0000000..155210b --- /dev/null +++ b/src/helpers/getQueryParamsForPaginatedEndpoint.js @@ -0,0 +1,35 @@ +import { isEmpty, pathOr } from 'ramda'; +import formatDateString from './formatDateString'; + +const getQueryParamsForPaginatedEndpoint = (lazyState, statuses) => { + let sortBy = { + columnName: 'applicationId', + sortDesc: true + }; + + if (lazyState.sortField) { + sortBy = { + columnName: lazyState.sortField, + sortDesc: lazyState.sortOrder === -1 + } + } + return { + globalFilters: { + page: lazyState.page ? lazyState.page + 1 : 1, + limit: lazyState.rows, + sortBy + }, + status: statuses, + filters: Object.keys(lazyState.filters).reduce((acc, cur) => { + const value = pathOr('', ['filters', cur, 'value'], lazyState); + if (!isEmpty(value)) { + acc[cur] = typeof value.getMonth === 'function' + ? formatDateString(value) + : lazyState.filters[cur]; + } + return acc; + }, {}), + } +} + +export default getQueryParamsForPaginatedEndpoint; \ No newline at end of file diff --git a/src/pages/Bandi/components/AllBandiTable/index.js b/src/pages/Bandi/components/AllBandiTable/index.js index 14e457b..9e268e3 100644 --- a/src/pages/Bandi/components/AllBandiTable/index.js +++ b/src/pages/Bandi/components/AllBandiTable/index.js @@ -49,7 +49,8 @@ const AllBandiTable = () => { const getFormattedBandiData = (data) => { return data.map((d) => { - d.dates = d.dates.map(v => is(String, v) ? new Date(v) : (v ? v : '')); + d.dateStart = is(String, d.dates[0]) ? new Date(d.dates[0]) : (d.dates[0] ? d.dates[0] : ''); + d.dateEnd = is(String, d.dates[1]) ? new Date(d.dates[1]) : (d.dates[1] ? d.dates[1] : ''); return d; }); }; @@ -62,8 +63,8 @@ const AllBandiTable = () => { setFilters({ global: { value: null, matchMode: FilterMatchMode.CONTAINS }, name: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, - start_date: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, - end_date: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, + dateStart: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, + dateEnd: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, status: { operator: FilterOperator.OR, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] }, }); }; @@ -81,15 +82,15 @@ const AllBandiTable = () => { }*/ const dateStartBodyTemplate = (rowData) => { - return getDateFromISOstring(rowData.dates[0]); + return getDateFromISOstring(rowData.dateStart); }; const dateEndBodyTemplate = (rowData) => { - return getDateFromISOstring(rowData.dates[1]); + return getDateFromISOstring(rowData.dateEnd); }; const dateFilterTemplate = (options) => { - return options.filterCallback(e.value, options.index)} dateFormat="mm/dd/yy" placeholder="mm/dd/yyyy" mask="99/99/9999" />; + return options.filterCallback(e.value, options.index)} dateFormat="dd/mm/yy" placeholder="dd/mm/yyyy" mask="99/99/9999" />; }; const statusBodyTemplate = (rowData) => { @@ -130,14 +131,17 @@ const AllBandiTable = () => { filter sortable filterPlaceholder={__('Cerca', 'gepafin')} style={{ minWidth: '8rem' }}/> - - + + body={dateEndBodyTemplate} filter + filterElement={dateFilterTemplate}/> diff --git a/src/pages/BandiBeneficiario/components/AllBandiAccordion/index.js b/src/pages/BandiBeneficiario/components/AllBandiAccordion/index.js index 60edd5c..8fd5d57 100644 --- a/src/pages/BandiBeneficiario/components/AllBandiAccordion/index.js +++ b/src/pages/BandiBeneficiario/components/AllBandiAccordion/index.js @@ -55,7 +55,7 @@ const AllBandiAccordion = ({ showOnlyPreferred = false }) => { ['onlyPreferredCall', showOnlyPreferred] ]); } - }, [chosenCompanyId]); + }, [chosenCompanyId, companies]); const getCallback = (data) => { if (data.status === 'SUCCESS') { diff --git a/src/pages/BandiPreInstructor/components/AllBandiTable/index.js b/src/pages/BandiPreInstructor/components/AllBandiTable/index.js index a5dbe61..06b57d7 100644 --- a/src/pages/BandiPreInstructor/components/AllBandiTable/index.js +++ b/src/pages/BandiPreInstructor/components/AllBandiTable/index.js @@ -89,7 +89,7 @@ const AllBandiTable = () => { }; const dateFilterTemplate = (options) => { - return options.filterCallback(e.value, options.index)} dateFormat="mm/dd/yy" placeholder="mm/dd/yyyy" mask="99/99/9999" />; + return options.filterCallback(e.value, options.index)} dateFormat="dd/mm/yy" placeholder="dd/mm/yyyy" mask="99/99/9999" />; }; const statusBodyTemplate = (rowData) => { diff --git a/src/pages/BandiPreferredBeneficiario/components/AllBandiPreferredAccordion/index.js b/src/pages/BandiPreferredBeneficiario/components/AllBandiPreferredAccordion/index.js index c576d1b..6f9b8fa 100644 --- a/src/pages/BandiPreferredBeneficiario/components/AllBandiPreferredAccordion/index.js +++ b/src/pages/BandiPreferredBeneficiario/components/AllBandiPreferredAccordion/index.js @@ -49,7 +49,7 @@ const AllBandiPreferredAccordion = () => { ['userId', userData.id] ]); } - }, [chosenCompanyId]); + }, [chosenCompanyId, companies]); const getCallback = (data) => { if (data.status === 'SUCCESS') { diff --git a/src/pages/BandoApplication/index.js b/src/pages/BandoApplication/index.js index 4b526eb..16e1de7 100644 --- a/src/pages/BandoApplication/index.js +++ b/src/pages/BandoApplication/index.js @@ -49,7 +49,7 @@ import FileuploadApplicationSignedPdf from '../../components/FileuploadApplicati import { defaultMaxFileSize } from '../../configData'; -const APP_HUB_ID = process.env.REACT_APP_HUB_ID; +const REACT_APP_HUB_ID = process.env.REACT_APP_HUB_ID; const BandoApplication = () => { const chosenCompanyId = useStore().main.chosenCompanyId(); @@ -554,7 +554,6 @@ const BandoApplication = () => { } } - const errDocsGetCallbacks = () => { } @@ -604,13 +603,21 @@ const BandoApplication = () => { }, [formValues]); useEffect(() => { - if (previousStatus.current === applicationStatus || (previousStatus.current !== applicationStatus && isEmpty(previousStatus.current))) { + console.log('applicationStatus', previousStatus.current, applicationStatus, + previousStatus.current === applicationStatus, (previousStatus.current !== applicationStatus && isEmpty(previousStatus.current))) + /*if (previousStatus.current === applicationStatus || (previousStatus.current !== applicationStatus && isEmpty(previousStatus.current))) { previousStatus.current = applicationStatus; return; } else { previousStatus.current = applicationStatus; + }*/ + if (previousStatus.current === applicationStatus) { + return } + previousStatus.current = applicationStatus; + + console.log('applicationStatus ...') if ('DRAFT' === applicationStatus && !isRequestForApplData) { const applId = getApplicationId(); @@ -686,7 +693,7 @@ const BandoApplication = () => { setVisibleConfirmation(false); }}>

- {APP_HUB_ID === 't7jh5wfg9QXylNaTZkPoE' + {REACT_APP_HUB_ID === 't7jh5wfg9QXylNaTZkPoE' ? __('Grazie, la tua domanda è stata inviata correttamente. Entro 24 ore riceverai una email con data, ora e numero di protocollo.', 'gepafin') : __('Grazie, la tua domanda è stata inviata correttamente. Entro 24 ore riceverai una pec con data, ora e numero di protocollo.', 'gepafin') } diff --git a/src/pages/Dashboard/components/DraftApplicationsTableAsync/index.js b/src/pages/Dashboard/components/DraftApplicationsTableAsync/index.js index ccbb04a..b435c4f 100644 --- a/src/pages/Dashboard/components/DraftApplicationsTableAsync/index.js +++ b/src/pages/Dashboard/components/DraftApplicationsTableAsync/index.js @@ -16,6 +16,10 @@ import { Button } from 'primereact/button'; import ProperBandoLabel from '../../../../components/ProperBandoLabel'; import { Link } from 'react-router-dom'; import translationStrings from '../../../../translationStringsForComponents'; +import { Dropdown } from 'primereact/dropdown'; +import { Tag } from 'primereact/tag'; +import getBandoLabel from '../../../../helpers/getBandoLabel'; +import getBandoSeverity from '../../../../helpers/getBandoSeverity'; const DraftApplicationsTableAsync = () => { const chosenCompanyId = useStore().main.chosenCompanyId(); @@ -31,7 +35,8 @@ const DraftApplicationsTableAsync = () => { filters: { id: { value: null, matchMode: 'contains' }, callTitle: { value: null, matchMode: 'contains' }, - companyName: { value: null, matchMode: 'contains' } + companyName: { value: null, matchMode: 'contains' }, + status: { value: null, matchMode: 'contains' } } }); const statuses = ['DRAFT', 'AWAITING', 'READY']; @@ -120,6 +125,26 @@ const DraftApplicationsTableAsync = () => { return ; }; + const statusItemTemplate = (option) => { + return ; + }; + + const statusFilterTemplate = (options) => { + return { + options.filterCallback(e.value, options.index) + const filters = { ...lazyState.filters }; + if (e.value) { + filters['status'] = { value: e.value, matchMode: 'equals' }; + } else { + delete filters['status']; + } + setLazyState({ ...lazyState, filters, first: 0 }); + }} + itemTemplate={statusItemTemplate} placeholder={translationStrings.selectOneLabel} className="p-column-filter" + showClear/>; + }; + const actionsBodyTemplate = (rowData) => { return