import React, { useState, useEffect } from 'react'; import { __ } from '@wordpress/i18n'; import { head, is, uniq } from 'ramda'; // store import { useStoreValue } from '../../../../store'; // tools import getBandoSeverity from '../../../../helpers/getBandoSeverity'; import getBandoLabel from '../../../../helpers/getBandoLabel'; import getDateFromISOstring from '../../../../helpers/getDateFromISOstring'; // api import CompanyDocumentsService from '../../../../service/company-documents-service'; // components import { FilterMatchMode, FilterOperator } from 'primereact/api'; import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; import { Dropdown } from 'primereact/dropdown'; import { Button } from 'primereact/button'; import { Calendar } from 'primereact/calendar'; import { Tag } from 'primereact/tag'; import ProperBandoLabel from '../../../../components/ProperBandoLabel'; import { confirmPopup, ConfirmPopup } from 'primereact/confirmpopup'; const DocumentsTable = ({ type, reload = 0 }) => { const chosenCompanyId = useStoreValue('chosenCompanyId'); const companies = useStoreValue('companies'); const [docs, setDocs] = useState([]); const [filters, setFilters] = useState(null); const [loading, setLoading] = useState(false); const [statuses, setStatuses] = useState([]); useEffect(() => { const existingCompany = head(companies.filter(o => o.id === chosenCompanyId)); if (!loading && existingCompany && reload !== 0) { setLoading(true); CompanyDocumentsService.getCompanyDocuments(chosenCompanyId, getCallback, errGetCallbacks, [ ['documentType', type] ]); } }, [chosenCompanyId, reload, companies]); useEffect(() => { const existingCompany = head(companies.filter(o => o.id === chosenCompanyId)); if (existingCompany) { setLoading(true); CompanyDocumentsService.getCompanyDocuments(chosenCompanyId, getCallback, errGetCallbacks, [ ['documentType', type] ]); } }, []); const getCallback = (resp) => { if (resp.status === 'SUCCESS') { setDocs(getFormattedData(resp.data)); setStatuses(uniq(resp.data.map(o => o.status))) initFilters(); } setLoading(false); } const errGetCallbacks = () => { setLoading(false); } const getFormattedData = (data) => { return data.map((d) => { d.callEndDate = is(String, d.callEndDate) ? new Date(d.callEndDate) : (d.callEndDate ? d.callEndDate : ''); return d; }); }; const clearFilter = () => { initFilters(); }; const initFilters = () => { setFilters({ name: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, createdDate: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, expirationDate: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] } }); }; const renderHeader = () => { return (
); }; const dateCreatedBodyTemplate = (rowData) => { return getDateFromISOstring(rowData.createdDate); }; const dateExpirationBodyTemplate = (rowData) => { return getDateFromISOstring(rowData.expirationDate); }; const dateFilterTemplate = (options) => { return options.filterCallback(e.value, options.index)} dateFormat="dd/mm/yy" placeholder="dd/mm/yyyy" mask="99/99/9999"/>; }; const catBodyTemplate = (rowData) => { return rowData.category.categoryName; }; const statusBodyTemplate = (rowData) => { return ; }; const statusFilterTemplate = (options) => { return options.filterCallback(e.value, options.index)} itemTemplate={statusItemTemplate} placeholder={__('Scegli uno', 'gepafin')} className="p-column-filter"/>; }; const statusItemTemplate = (option) => { return ; }; const handleDeleteFile = (id) => { setLoading(true); CompanyDocumentsService.deleteCompanyDocument(id,(resp) => deleteCallback(resp, id), errDeleteCallback) } const deleteCallback = (resp, deletedId) => { if (resp.status === 'SUCCESS') { setDocs(docs.filter(o => o.id !== deletedId)); } setLoading(false); } const errDeleteCallback = () => { setLoading(false); } const actionsBodyTemplate = (rowData) => { return
} const confirmDelete = (event, id) => { confirmPopup({ target: event.currentTarget, message: __('Sei sicuro di voler rimuovere il file?', 'gepafin'), acceptLabel: __('Si', 'gepafin'), icon: 'pi pi-info-circle', defaultFocus: 'reject', acceptClassName: 'p-button-danger', accept: () => { handleDeleteFile(id); }, reject: () => { } }); }; const header = renderHeader(); return (
setFilters(e.filters)}>
) } export default DocumentsTable;