From cf5ff862b71f67f15537a8fd4c31340486132713 Mon Sep 17 00:00:00 2001 From: Vitalii Kiiko Date: Wed, 20 Nov 2024 12:07:09 +0100 Subject: [PATCH] - saving progress; --- .../components/AppSidebar/index.js | 7 + .../AllBandiPreferredAccordion/index.js | 215 ++++++++++++++++++ src/pages/BandiPreferredBeneficiario/index.js | 43 ++++ src/routes.js | 6 + src/service/preferred-bando-service.js | 4 + 5 files changed, 275 insertions(+) create mode 100644 src/pages/BandiPreferredBeneficiario/components/AllBandiPreferredAccordion/index.js create mode 100644 src/pages/BandiPreferredBeneficiario/index.js diff --git a/src/layouts/DefaultLayout/components/AppSidebar/index.js b/src/layouts/DefaultLayout/components/AppSidebar/index.js index 5155f78..37aa0eb 100644 --- a/src/layouts/DefaultLayout/components/AppSidebar/index.js +++ b/src/layouts/DefaultLayout/components/AppSidebar/index.js @@ -41,6 +41,13 @@ const AppSidebar = () => { id: 4, enable: intersection(permissions, ['VIEW_CALLS']).length }, + { + label: __('Bandi osservati', 'gepafin'), + icon: 'pi pi-star', + href: '/bandi-osservati', + id: 13, + enable: intersection(permissions, ['VIEW_CALLS']).length + }, { label: __('Gestione domande', 'gepafin'), icon: 'pi pi-file', diff --git a/src/pages/BandiPreferredBeneficiario/components/AllBandiPreferredAccordion/index.js b/src/pages/BandiPreferredBeneficiario/components/AllBandiPreferredAccordion/index.js new file mode 100644 index 0000000..f1c7495 --- /dev/null +++ b/src/pages/BandiPreferredBeneficiario/components/AllBandiPreferredAccordion/index.js @@ -0,0 +1,215 @@ +import React, { useState, useEffect} from 'react'; +import { __ } from '@wordpress/i18n'; +import { is, uniq, isNil, isEmpty } from 'ramda'; +import { wrap } from 'object-path-immutable'; +import { useNavigate } from 'react-router-dom'; + +// store +import { storeGet, storeSet, useStore } from '../../../../store'; + +// tools +import getBandoSeverity from '../../../../helpers/getBandoSeverity'; +import getBandoLabel from '../../../../helpers/getBandoLabel'; +import getDateFromISOstring from '../../../../helpers/getDateFromISOstring'; +import set404FromErrorResponse from '../../../../helpers/set404FromErrorResponse'; +import getNumberWithCurrency from '../../../../helpers/getNumberWithCurrency'; +import renderHtmlContent from '../../../../helpers/renderHtmlContent'; + +// api +import PreferredBandoService from '../../../../service/preferred-bando-service'; + +// components +import { DataTable } from 'primereact/datatable'; +import { Column } from 'primereact/column'; +import { Dropdown } from 'primereact/dropdown'; +import { Tag } from 'primereact/tag'; +import ProperBandoLabel from '../../../../components/ProperBandoLabel'; +import { Button } from 'primereact/button'; + + +const AllBandiPreferredAccordion = () => { + const chosenCompanyId = useStore().main.chosenCompanyId(); + const isAsyncRequest = useStore().main.isAsyncRequest(); + const [items, setItems] = useState(null); + const [filters, setFilters] = useState(null); + const [expandedRows, setExpandedRows] = useState(null); + const [statuses, setStatuses] = useState([]); + const navigate = useNavigate(); + + useEffect(() => { + storeSet.main.setAsyncRequest(); + const userData = storeGet.main.userData(); + PreferredBandoService.getPreferredCalls(getCallback, errGetCallbacks, [ + ['companyId', chosenCompanyId], + ['userId', userData.id] + ]); + }, [chosenCompanyId]); + + const getCallback = (data) => { + if (data.status === 'SUCCESS') { + setItems(getFormattedBandiData(data.data)); + setStatuses(uniq(data.data.map(o => o.status))) + } + storeSet.main.unsetAsyncRequest(); + } + + const errGetCallbacks = (data) => { + set404FromErrorResponse(data); + storeSet.main.unsetAsyncRequest(); + } + + const getFormattedBandiData = (data) => { + return data.map((d) => { + d.dates = d.dates.map(v => is(String, v) ? new Date(v) : (v ? v : '')); + return d; + }); + }; + + const nameBodyTemplate = (rowData) => { + return { + let newExpandedRows; + if (isNil(expandedRows) || isNil(expandedRows[rowData.id])) { + newExpandedRows = isNil(expandedRows) + ? wrap({}).set([rowData.id], true).value() + : wrap(expandedRows).set([rowData.id], true).value(); + } else { + newExpandedRows = wrap(expandedRows).del([rowData.id]).value(); + } + setExpandedRows(newExpandedRows); + }}>{rowData.name} + } + + const amountBodyTemplate = (rowData) => { + return getNumberWithCurrency(rowData.amount); + }; + + const statusBodyTemplate = (rowData) => { + return ; + }; + + const statusFilterTemplate = (options) => { + return options.filterCallback(e.value, options.index)} itemTemplate={statusItemTemplate} placeholder="Select One" className="p-column-filter" showClear />; + }; + + const statusItemTemplate = (option) => { + return ; + }; + + const addToFavourites = (id, preferredId) => { + const companyId = storeGet.main.chosenCompanyId() + const data = { + companyId, + callId: id + } + if (preferredId && preferredId !== 0) { + PreferredBandoService.deleteFromPreferred(preferredId, (data) => removeFavCallback(data, id), errToggleFavCallback); + } else { + PreferredBandoService.addToPreferred(data, addFavCallback, errToggleFavCallback); + } + } + + const removeFavCallback = (data, id) => { + if (data.status === 'SUCCESS') { + const newItems = items.map((o) => { + if (o.id === id) { + return { + ...o, + preferredCallId: null + } + } else { + return o; + } + }); + setItems(newItems) + } + } + const addFavCallback = (data) => { + if (data.status === 'SUCCESS') { + const newItems = items.map((o) => { + if (o.id === data.data.callId) { + return { + ...o, + preferredCallId: data.data.id + } + } else { + return o; + } + }); + setItems(newItems) + } + } + + const errToggleFavCallback = (data) => { + set404FromErrorResponse(data); + } + + const goToBandoPage = (id) => { + navigate(`/bandi/${id}`) + } + + const actionsBodyTemplate = (rowData) => { + return
+ +
+ } + + const rowExpansionTemplate = (data) => { + return ( +
+ {renderHtmlContent(data.descriptionShort)} +

{__('Scadenza', 'gepafin')}: {getDateFromISOstring(data.dates[1])}

+ {!isEmpty(chosenCompanyId) && chosenCompanyId !== 0 && !data.confidi + ? : null} + {!isEmpty(chosenCompanyId) && chosenCompanyId !== 0 && data.confidi + ? : null} +
+ ); + }; + + const allowExpansion = (rowData) => { + return true; + }; + + return( +
+ setExpandedRows(e.data)} + rowExpansionTemplate={rowExpansionTemplate} + onFilter={(e) => setFilters(e.filters)}> + + + + + {!isEmpty(chosenCompanyId) && chosenCompanyId !== 0 + ? : null} + +
+ ) +} + +export default AllBandiPreferredAccordion; \ No newline at end of file diff --git a/src/pages/BandiPreferredBeneficiario/index.js b/src/pages/BandiPreferredBeneficiario/index.js new file mode 100644 index 0000000..360090f --- /dev/null +++ b/src/pages/BandiPreferredBeneficiario/index.js @@ -0,0 +1,43 @@ +import React from 'react'; +import { __ } from '@wordpress/i18n'; +import { Link } from 'react-router-dom'; +import { isEmpty } from 'ramda'; + +// store +import { useStore } from '../../store'; + +// components +import AllBandiPreferredAccordion from './components/AllBandiPreferredAccordion'; + +const BandiPreferredBeneficiario = () => { + const chosenCompanyId = useStore().main.chosenCompanyId(); + + return ( +
+
+

{__('Bandi osservati', 'gepafin')}

+
+ +
+ + {isEmpty(chosenCompanyId) || chosenCompanyId === 0 + ? <> +
+ + {__('Attenzione', 'gepafin')} + + {__('Per applicare ai bandi devi Registare un Azienda clicca', 'gepafin')} + {__('qua', 'gepafin')} + +
+
+ : null} + +
+ +
+
+ ) +} + +export default BandiPreferredBeneficiario; \ No newline at end of file diff --git a/src/routes.js b/src/routes.js index dfb0234..34a9ba3 100644 --- a/src/routes.js +++ b/src/routes.js @@ -36,6 +36,7 @@ import SoccorsoAddPreInstructor from './pages/SoccorsoAddPreInstructor'; import DomandeBeneficiario from './pages/DomandeBeneficiario'; import DomandaBeneficiario from './pages/DomandaBeneficiario'; import BandoApplicationPreview from './pages/BandoApplicationPreview'; +import BandiPreferredBeneficiario from './pages/BandiPreferredBeneficiario'; const routes = ({ role, chosenCompanyId }) => { @@ -87,6 +88,11 @@ const routes = ({ role, chosenCompanyId }) => { {'ROLE_BENEFICIARY' === role ? : null} {'ROLE_PRE_INSTRUCTOR' === role ? : null} }/> + + {'ROLE_SUPER_ADMIN' === role ? : null} + {'ROLE_BENEFICIARY' === role ? : null} + {'ROLE_PRE_INSTRUCTOR' === role ? : null} + }/> {'ROLE_SUPER_ADMIN' === role ? : null} {'ROLE_BENEFICIARY' === role ? : null} diff --git a/src/service/preferred-bando-service.js b/src/service/preferred-bando-service.js index 95416af..cf34594 100644 --- a/src/service/preferred-bando-service.js +++ b/src/service/preferred-bando-service.js @@ -11,4 +11,8 @@ export default class PreferredBandoService { static deleteFromPreferred = (id, callback, errCallback) => { NetworkService.delete(`${API_BASE_URL}/beneficiaryPreferredCall/${id}`, {}, callback, errCallback); }; + + static getPreferredCalls = (callback, errCallback, queryParams) => { + NetworkService.get(`${API_BASE_URL}/beneficiaryPreferredCall/user`, callback, errCallback, queryParams); + }; }