import React, { useEffect, useState, useCallback } from 'react'; import { __ } from '@wordpress/i18n'; import { head, is } from 'ramda'; import { klona } from 'klona'; import translationStrings from '../../../../translationStringsForComponents'; // api import AssignedApplicationService from '../../../../service/assigned-application-service'; // store import { useStoreValue } from '../../../../store'; // tools import getFormattedDateString from '../../../../helpers/getFormattedDateString'; import getBandoLabel from '../../../../helpers/getBandoLabel'; import getBandoSeverity from '../../../../helpers/getBandoSeverity'; import getQueryParamsForPaginatedEndpoint from '../../../../helpers/getQueryParamsForPaginatedEndpoint'; // components import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; import ProperBandoLabel from '../../../../components/ProperBandoLabel'; import { Dropdown } from 'primereact/dropdown'; import { Tag } from 'primereact/tag'; import { Calendar } from 'primereact/calendar'; import { Button } from 'primereact/button'; import { Link, useNavigate } from 'react-router-dom'; import SoccorsoResendEmails from '../../../SoccorsoEditPreInstructor/components/SoccorsoResendEmails'; const APP_HUB_ID = process.env.REACT_APP_HUB_ID; const DomandeTablePreInstructorAsync = ({ userId = null, statuses = [] }) => { const navigate = useNavigate(); const userData = useStoreValue('userData'); 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: { applicationId: { value: null, matchMode: 'equals' }, protocolNumber: { value: null, matchMode: 'equals' }, callName: { value: null, matchMode: 'contains' }, companyName: { value: null, matchMode: 'contains' }, submissionDate: { value: null, matchMode: 'dateIs' }, evaluationEndDate: { value: null, matchMode: 'dateIs' }, applicationStatus: { value: null, matchMode: 'equals' } } }); const getPaginationQuery = useCallback(() => getQueryParamsForPaginatedEndpoint(lazyState, statuses, 'applicationId'), [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.evaluationEndDate = is(String, d.evaluationEndDate) ? new Date(d.evaluationEndDate) : (d.evaluationEndDate ? d.evaluationEndDate : ''); d.submissionDate = is(String, d.submissionDate) ? new Date(d.submissionDate) : (d.submissionDate ? d.submissionDate : ''); return d; }); }; 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 dateAppliedBodyTemplate = (rowData) => { return getFormattedDateString(rowData.submissionDate); }; const dateEndBodyTemplate = (rowData) => { return getFormattedDateString(rowData.evaluationEndDate); }; const updateRowData = useCallback((id, updateResponse) => { const newItems = items.map((o) => { if (o.id === id) { o.emailSendResponse = updateResponse; } return o; }) setItems(newItems); }, [items]); const actionsBodyTemplate = (rowData) => { if (rowData.status === 'AWAITING') { return
} else { const label = ['OPEN', 'SOCCORSO'].includes(rowData.status) && userData.id === rowData.userId ? __('Valuta', 'gepafin') : __('Mostra', 'gepafin'); return (
) } } const handleInitiateEvaluation = (id) => { setLocalAsyncRequest(true); AssignedApplicationService.updateStatusAssignedApplication(id, getInitEvalCallback, errInitEvalCallbacks, [ ['status', 'OPEN'] ]) } const getInitEvalCallback = (resp) => { if (resp.status === 'SUCCESS') { const evaluation = klona(head(getFormattedData([resp.data]))); const newItems = items.map(o => o.id === evaluation.id ? evaluation : o); setItems(newItems); navigate(`/domande/${evaluation.applicationId}`); } setLocalAsyncRequest(false); } const errInitEvalCallbacks = (resp) => { setLocalAsyncRequest(false); } const clearFilter = () => { setLazyState({ first: 0, rows: 5, page: 0, sortField: null, sortOrder: null, filters: { applicationId: { value: null, matchMode: 'equals' }, protocolNumber: { value: null, matchMode: 'equals' }, callName: { value: null, matchMode: 'contains' }, companyName: { value: null, matchMode: 'contains' }, submissionDate: { value: null, matchMode: 'dateIs' }, evaluationEndDate: { value: null, matchMode: 'dateIs' }, applicationStatus: { value: null, matchMode: 'equals' } } }); }; const renderHeader = () => { return (
); }; const header = renderHeader(); useEffect(() => { setLocalAsyncRequest(true); const paginationQuery = getPaginationQuery(); if (userId) { AssignedApplicationService.assignApplicationPaginated(paginationQuery, getCallback, errGetCallbacks, [ ['userId', userId] ]); } else { AssignedApplicationService.assignApplicationPaginated(paginationQuery, getCallback, errGetCallbacks); } }, [lazyState]); return (
{APP_HUB_ID !== 't7jh5wfg9QXylNaTZkPoE' ? : null} {APP_HUB_ID !== 't7jh5wfg9QXylNaTZkPoE' ? : null}
) } export default DomandeTablePreInstructorAsync;