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 BandoService from '../../../../service/bando-service'; 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'; // i18n import translationStrings from '../../../../translationStringsForComponents'; import isDateTimeInPast from '../../../../helpers/isDateTimeInPast'; const REACT_APP_HUB_ID = process.env.REACT_APP_HUB_ID; const AllBandiAccordion = ({ showOnlyPreferred = false }) => { 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(); BandoService.getBandi(getCallback, errGetCallbacks, [ ['companyId', chosenCompanyId], ['onlyPreferredCall', showOnlyPreferred] ]); }, [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 { 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); }}>{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" 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) => { const isCallExpired = isDateTimeInPast(data.dates[1], data.endTime); return (
{renderHtmlContent(data.descriptionShort)}

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

{!isCallExpired && !isEmpty(chosenCompanyId) && chosenCompanyId !== 0 && (!data.confidi || (data.confidi && data.id === 6 && REACT_APP_HUB_ID === 'p4lk3bcx1RStqTaIVVbXs')) ? : null} {isCallExpired ?

{__('È scaduto', 'gepafin')}

: null} {isCallExpired || (!isEmpty(chosenCompanyId) && chosenCompanyId !== 0 && data.confidi && (data.id !== 6 || (data.id === 6 && REACT_APP_HUB_ID !== 'p4lk3bcx1RStqTaIVVbXs'))) ? : null}
); }; const allowExpansion = (rowData) => { return true; }; return(
setExpandedRows(e.data)} rowExpansionTemplate={rowExpansionTemplate} onFilter={(e) => setFilters(e.filters)}> {!isEmpty(chosenCompanyId) && chosenCompanyId !== 0 ? : null}
) } export default AllBandiAccordion;