import React, { useEffect, useState, useCallback } from 'react'; import { __ } from '@wordpress/i18n'; import { Link } from 'react-router-dom'; import translationStrings from '../../../../translationStringsForComponents'; // store import { storeGet, useStoreValue } from '../../../../store'; // api import BandoService from '../../../../service/bando-service'; import PreferredBandoService from '../../../../service/preferred-bando-service'; // tools import getTimeParsedFromString from '../../../../helpers/getTimeParsedFromString'; import getTimeFromISOstring from '../../../../helpers/getTimeFromISOstring'; import getFormattedDateString from '../../../../helpers/getFormattedDateString'; import getBandoLabel from '../../../../helpers/getBandoLabel'; import getBandoSeverity from '../../../../helpers/getBandoSeverity'; import getQueryParamsForPaginatedEndpoint from '../../../../helpers/getQueryParamsForPaginatedEndpoint'; import set404FromErrorResponse from '../../../../helpers/set404FromErrorResponse'; // components import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; import { Button } from 'primereact/button'; import ProperBandoLabel from '../../../../components/ProperBandoLabel'; import { Dropdown } from 'primereact/dropdown'; import { Tag } from 'primereact/tag'; import { Calendar } from 'primereact/calendar'; import { isNil } from 'ramda'; const REACT_APP_HUB_ID = process.env.REACT_APP_HUB_ID; const LatestBandiBeneficiarioTableAsync = ({ isAntiMoneylaundry = false }) => { const chosenCompanyId = useStoreValue('chosenCompanyId'); const antiMoneyLaundryCalls = useStoreValue('antiMoneyLaundryCalls'); const [localAsyncRequest, setLocalAsyncRequest] = useState(false); const [items, setItems] = useState([]); let filteredItems = items; if (REACT_APP_HUB_ID !== 't7jh5wfg9QXylNaTZkPoE') { filteredItems = isAntiMoneylaundry ? items.filter(o => antiMoneyLaundryCalls.includes(o.id)) : items.filter(o => !antiMoneyLaundryCalls.includes(o.id)); } const [totalRecordsNum, setTotalRecordsNum] = useState(0); const [lazyState, setLazyState] = useState({ first: 0, rows: 5, page: 0, sortField: null, sortOrder: null, filters: { name: { value: null, matchMode: 'contains' }, startDate: { value: null, matchMode: 'dateIs' }, endDate: { value: null, matchMode: 'dateIs' }, status: { value: null, matchMode: 'equals' } } }); const statuses = ['PUBLISH']; const getPaginationQuery = useCallback(() => getQueryParamsForPaginatedEndpoint(lazyState, statuses, 'id'), [lazyState]); const onPage = (event) => { setLazyState(event); }; const onSort = (event) => { event['first'] = 0; event['page'] = 0; setLazyState(event); }; const onFilter = useCallback((event) => { event['first'] = 0; event['page'] = 0; setLazyState(event); }, [lazyState]); const getCallback = (resp) => { if (resp.status === 'SUCCESS') { const { body, totalRecords, //currentPage, totalPages, pageSize } = resp.data; setTotalRecordsNum(totalRecords); setItems(getFormattedData(body)); } setLocalAsyncRequest(false); } const errGetCallbacks = () => { setLocalAsyncRequest(false); } const getFormattedData = (data) => { return [...(data || [])].map((d) => { d.startDate = new Date(d.dates[0]); d.endDate = new Date(d.dates[1]); return d; }); }; const addToFavourites = (id, preferredId) => { const companyId = storeGet('chosenCompanyId') const data = { companyId, callId: id } setLocalAsyncRequest(true); 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) } setLocalAsyncRequest(false); } 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) } setLocalAsyncRequest(false); } const errToggleFavCallback = (data) => { set404FromErrorResponse(data); setLocalAsyncRequest(false); } const actionsBodyTemplate = (rowData) => { return
} const statusBodyTemplate = (rowData) => { 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"/>; }; const dateFilterTemplate = (options) => { return options.filterCallback(e.value, options.index)} dateFormat="dd/mm/yy" placeholder="dd/mm/yyyy" mask="99/99/9999"/>; }; const dateStartBodyTemplate = (rowData) => { const startTimeObj = getTimeParsedFromString(rowData.startTime); return getFormattedDateString(rowData.startDate) + ' ' + getTimeFromISOstring(startTimeObj); }; const dateEndBodyTemplate = (rowData) => { const endTimeObg = getTimeParsedFromString(rowData.endTime); return getFormattedDateString(rowData.endDate) + ' ' + getTimeFromISOstring(endTimeObg); }; useEffect(() => { setLocalAsyncRequest(true); const paginationQuery = getPaginationQuery(); const role = storeGet('getRole'); if (role === 'ROLE_CONFIDI') { BandoService.getBandiPaginated(paginationQuery, getCallback, errGetCallbacks, [ ['companyId', chosenCompanyId], ['onlyConfidiCall', true] ]); } else { BandoService.getBandiPaginated(paginationQuery, getCallback, errGetCallbacks, [ ['companyId', chosenCompanyId] ]); } }, [lazyState, chosenCompanyId]); return (
) } export default LatestBandiBeneficiarioTableAsync;