import React, { useState, useEffect } from 'react'; import { __ } from '@wordpress/i18n'; import { uniq, is, head } from 'ramda'; // tools import getBandoLabel from '../../../../helpers/getBandoLabel'; import getBandoSeverity from '../../../../helpers/getBandoSeverity'; // store import { useStore } from '../../../../store'; // api import ApplicationService from '../../../../service/application-service'; // components import { FilterMatchMode, FilterOperator } from 'primereact/api'; import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; import { Dropdown } from 'primereact/dropdown'; import { ProgressBar } from 'primereact/progressbar'; import { Button } from 'primereact/button'; import { Calendar } from 'primereact/calendar'; import { Tag } from 'primereact/tag'; import ProperBandoLabel from '../../../../components/ProperBandoLabel'; import { Link } from 'react-router-dom'; import translationStrings from '../../../../translationStringsForComponents'; import { ConfirmPopup, confirmPopup } from 'primereact/confirmpopup'; import isDateTimeInPast from '../../../../helpers/isDateTimeInPast'; const MyLatestSubmissionsTable = () => { const chosenCompanyId = useStore().main.chosenCompanyId(); const companies = useStore().main.companies(); const [localAsyncRequest, setLocalAsyncRequest] = useState(false); const [items, setItems] = useState(null); const [filters, setFilters] = useState(null); const [statuses, setStatuses] = useState([]); useEffect(() => { const existingCompany = head(companies.filter(o => o.id === chosenCompanyId)); if (existingCompany) { setLocalAsyncRequest(true); ApplicationService.getApplications(getApplCallback, errGetApplCallback, [ ['companyId', chosenCompanyId], ['statuses', ['DRAFT', 'AWAITING', 'READY']] ]); } }, [chosenCompanyId]); const getApplCallback = (data) => { if (data.status === 'SUCCESS') { if (is(Array, data.data)) { setItems(getFormattedBandiData(data.data)); setStatuses(uniq(items.map(o => o.status))) initFilters(); } } setLocalAsyncRequest(false); } const errGetApplCallback = (data) => { setLocalAsyncRequest(false); } 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 getFormattedBandiData = (data) => { return [...(data || [])].map((d) => { d.callEndDate = new Date(d.callEndDate); d.modifiedDate = new Date(d.modifiedDate); return d; }); }; const formatDate = (value) => { return value.toLocaleDateString('it-IT', { day: '2-digit', month: '2-digit', year: 'numeric' }); }; const clearFilter = () => { initFilters(); }; const initFilters = () => { setFilters({ global: { value: null, matchMode: FilterMatchMode.CONTAINS }, callTitle: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, companyName: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, modifiedDate: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, callEndDate: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, status: { operator: FilterOperator.OR, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] }, }); }; const renderHeader = () => { return (
); }; const dateModifyBodyTemplate = (rowData) => { return formatDate(rowData.modifiedDate); }; const dateEndBodyTemplate = (rowData) => { return formatDate(rowData.callEndDate); }; const dateFilterTemplate = (options) => { return options.filterCallback(e.value, options.index)} dateFormat="mm/dd/yy" placeholder="mm/dd/yyyy" mask="99/99/9999"/>; }; 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 progressBodyTemplate = (options) => { return ; }; const statusItemTemplate = (option) => { return ; }; const actionsBodyTemplate = (rowData) => { const isCallExpired = isDateTimeInPast(rowData.callEndDate, rowData.callEndTime); return
{'DRAFT' === rowData.status && !isCallExpired ?
} const header = renderHeader(); 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: () => { } }); }; return (
setFilters(e.filters)}>
) } export default MyLatestSubmissionsTable;