import React, { useState, useEffect} from 'react'; import { __ } from '@wordpress/i18n'; import { is, uniq, isNil, isEmpty, head } from 'ramda'; import { wrap } from 'object-path-immutable'; import { useNavigate } from 'react-router-dom'; // store import { storeGet, storeSet, useStoreValue } 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'; import translationStrings from '../../../../translationStringsForComponents'; const AllBandiPreferredAccordion = () => { const chosenCompanyId = useStoreValue('chosenCompanyId'); const companies = useStoreValue('companies'); const isAsyncRequest = useStoreValue('isAsyncRequest'); const [items, setItems] = useState(null); const [filters, setFilters] = useState(null); const [expandedRows, setExpandedRows] = useState(null); const [statuses, setStatuses] = useState([]); const navigate = useNavigate(); useEffect(() => { const existingCompany = head(companies.filter(o => o.id === chosenCompanyId)); if (existingCompany) { storeSet('setAsyncRequest'); const userData = storeGet('userData'); PreferredBandoService.getPreferredCalls(getCallback, errGetCallbacks, [ ['companyId', chosenCompanyId], ['userId', userData.id] ]); } }, [chosenCompanyId, companies]); const getCallback = (data) => { if (data.status === 'SUCCESS') { setItems(getFormattedBandiData(data.data)); setStatuses(uniq(data.data.map(o => o.status))) } storeSet('unsetAsyncRequest'); } const errGetCallbacks = (data) => { set404FromErrorResponse(data); storeSet('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={translationStrings.selectOneLabel} className="p-column-filter"/>; }; const statusItemTemplate = (option) => { return ; }; const addToFavourites = (id, preferredId) => { const companyId = storeGet('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 addToFavourites(rowData.id, rowData.preferredCallId)}> } const rowExpansionTemplate = (data) => { return ( {renderHtmlContent(data.descriptionShort)} {__('Scadenza', 'gepafin')}: {getDateFromISOstring(data.dates[1])} {!isEmpty(chosenCompanyId) && chosenCompanyId !== 0 && !data.confidi ? goToBandoPage(data.id)} severity="info"> {__('Partecipa', 'gepafin')} : null} {!isEmpty(chosenCompanyId) && chosenCompanyId !== 0 && data.confidi ? goToBandoPage(data.id)} severity="info"> {__('Mostra', 'gepafin')} : 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;
{__('Scadenza', 'gepafin')}: {getDateFromISOstring(data.dates[1])}