import React, { useEffect, useState, useCallback } from 'react'; import { __ } from '@wordpress/i18n'; import { is } from 'ramda'; import { Link } from 'react-router-dom'; import translationStrings from '../../../../translationStringsForComponents'; // store import { useStoreValue } from '../../../../store'; // api import ApplicationService from '../../../../service/application-service'; // import getBandoLabel from '../../../../helpers/getBandoLabel'; import getBandoSeverity from '../../../../helpers/getBandoSeverity'; import getFormattedDateString from '../../../../helpers/getFormattedDateString'; import getQueryParamsForPaginatedEndpoint from '../../../../helpers/getQueryParamsForPaginatedEndpoint'; import isDateTimeInPast from '../../../../helpers/isDateTimeInPast'; // 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 { confirmPopup, ConfirmPopup } from 'primereact/confirmpopup'; import { ProgressBar } from 'primereact/progressbar'; const REACT_APP_HUB_ID = process.env.REACT_APP_HUB_ID; const MyLatestSubmissionsTableAsync = () => { const chosenCompanyId = useStoreValue('chosenCompanyId'); const [localAsyncRequest, setLocalAsyncRequest] = useState(false); const [items, setItems] = useState(null); const [totalRecordsNum, setTotalRecordsNum] = useState(0); const [lazyState, setLazyState] = useState({ first: 0, rows: 5, page: 0, sortField: null, sortOrder: null, filters: { id: { value: null, matchMode: 'equals' }, callTitle: { value: null, matchMode: 'contains' }, companyName: { value: null, matchMode: 'contains' }, callEndDate: { value: null, matchMode: 'dateIs' }, modifiedDate: { value: null, matchMode: 'dateIs' }, assignedUserName: { value: null, matchMode: 'equals' }, status: { value: null, matchMode: 'equals' } } }); const colBandoLabel = REACT_APP_HUB_ID === 't7jh5wfg9QXylNaTZkPoE' ? __('Bando', 'gepafin') : __('Bandi e modello AR1', 'gepafin'); const statuses = ['DRAFT', 'AWAITING', 'READY']; 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.callEndDate = is(String, d.callEndDate) ? new Date(d.callEndDate) : (d.callEndDate ? d.callEndDate : ''); d.modifiedDate = is(String, d.modifiedDate) ? new Date(d.modifiedDate) : (d.modifiedDate ? d.modifiedDate : ''); return d; }); }; const confirmDelete = (event, id) => { confirmPopup({ target: event.currentTarget, message: __('Sei sicuro di voler rimuovere la domanda?', 'gepafin'), acceptLabel: __('Si', 'gepafin'), icon: 'pi pi-info-circle', defaultFocus: 'reject', acceptClassName: 'p-button-danger', accept: () => { handleDeleteApplication(id); }, reject: () => { } }); }; const handleDeleteApplication = (id) => { setLocalAsyncRequest(true); ApplicationService.deleteApplication(id, (resp) => delApplCallback(resp, id), errDelApplCallback) } const delApplCallback = (resp, id) => { if (resp.status === 'SUCCESS') { const newItems = items.filter(o => o.id !== id); setItems(newItems); } setLocalAsyncRequest(false); } const errDelApplCallback = (data) => { setLocalAsyncRequest(false); } const actionsBodyTemplate = (rowData) => { const isCallExpired = isDateTimeInPast(rowData.callEndDate, rowData.callEndTime); return
{'DRAFT' === rowData.status && !isCallExpired ?
} const progressBodyTemplate = (options) => { 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 dateEndBodyTemplate = (rowData) => { return getFormattedDateString(rowData.callEndDate); }; const dateModifyBodyTemplate = (rowData) => { return getFormattedDateString(rowData.modifiedDate); }; useEffect(() => { if (chosenCompanyId && chosenCompanyId !== 0) { setLocalAsyncRequest(true); const paginationQuery = getPaginationQuery(); ApplicationService.getApplicationsPaginated(paginationQuery, getCallback, errGetCallbacks, [ ['companyId', chosenCompanyId] ]); } }, [lazyState, chosenCompanyId]); return (
) } export default MyLatestSubmissionsTableAsync;