- added instructor dashboard page;

This commit is contained in:
Vitalii Kiiko
2024-10-16 11:48:05 +02:00
parent 782ec5fda7
commit 487c6d0715
18 changed files with 693 additions and 160 deletions

View File

@@ -31,44 +31,12 @@ import { Link } from 'react-router-dom';
const LatestBandiTable = () => {
const [items, setItems] = useState(null);
const [filters, setFilters] = useState(null);
const [loading, setLoading] = useState(false);
const [localAsyncRequest, setLocalAsyncRequest] = useState(false);
const [globalFilterValue, setGlobalFilterValue] = useState('');
const [statuses, setStatuses] = useState([]);
useEffect(() => {
// TODO
/*const items = [
{
name: 'Bando Innovazione 2024',
start_date: '2024-08-08T00:00:00+00:00',
end_date: '2024-08-30T00:00:00+00:00',
submissions: 24,
status: 'PUBLISH',
id: 11
},
{
name: 'Bando Sostenibilità 2024',
start_date: '2024-07-28T00:00:00+00:00',
end_date: '2024-08-15T00:00:00+00:00',
submissions: 35,
status: 'PUBLISH',
id: 9
},
{
name: 'Bando A',
start_date: '2024-06-28T00:00:00+00:00',
end_date: '2024-06-15T00:00:00+00:00',
submissions: 2,
status: 'EXPIRED',
id: 2
}
]
setItems(getFormattedBandiData(items));
setStatuses(uniq(items.map(o => o.status)))
setLoading(false);
initFilters();*/
storeSet.main.setAsyncRequest();
setLocalAsyncRequest(true);
BandoService.getBandi(getCallback, errGetCallbacks);
}, []);
@@ -79,12 +47,11 @@ const LatestBandiTable = () => {
setStatuses(uniq(data.data.map(o => o.status)))
initFilters();
}
storeSet.main.unsetAsyncRequest();
setLocalAsyncRequest(false);
}
const errGetCallbacks = (data) => {
console.log('errGetCallbacks', data)
storeSet.main.unsetAsyncRequest();
setLocalAsyncRequest(false);
}
const getFormattedBandiData = (data) => {
@@ -179,13 +146,13 @@ const LatestBandiTable = () => {
return(
<div className="appPageSection__table">
<DataTable value={items} paginator showGridlines rows={10} loading={loading} dataKey="id"
<DataTable value={items} paginator showGridlines rows={10} loading={localAsyncRequest} dataKey="id"
filters={filters}
globalFilterFields={['name', 'status']}
header={header}
emptyMessage={__('Nessun dato disponibile', 'gepafin')}
onFilter={(e) => setFilters(e.filters)}>
<Column field="name" header={__('Nome Bando', 'gepafin')} filter filterPlaceholder="Search by name"
<Column field="name" header={__('Nome Bando', 'gepafin')} filter filterPlaceholder={__('Cerca il nome', 'gepafin')}
style={{ minWidth: '12rem' }}/>
<Column header={__('Data Pubblicazione', 'gepafin')} filterField="start_date" dataType="date"
style={{ minWidth: '10rem' }}

View File

@@ -2,6 +2,7 @@ import React, { useEffect, useState } from 'react';
import { __ } from '@wordpress/i18n';
import { useNavigate } from 'react-router-dom';
import { pathOr } from 'ramda';
import NumberFlow from '@number-flow/react';
// store
//import { storeSet } from '../../store';
@@ -13,6 +14,7 @@ import DashboardService from '../../service/dashboard-service';
import LatestBandiTable from './components/LatestBandiTable';
//import LatestUsersActivityTable from './components/LatestUsersActivityTable';
import { Button } from 'primereact/button';
import MyEvaluationsTable from '../DashboardInstructor/components/MyEvaluationsTable';
const Dashboard = () => {
const navigate = useNavigate();
@@ -67,27 +69,52 @@ const Dashboard = () => {
<div className="statsBigBadges__grid">
<div className="statsBigBadges__gridItem">
<span>{__('Bandi attivi', 'gepafin')}</span>
<span>{getStatValue('numberOfActiveCalls', 0)}</span>
<span><NumberFlow
value={getStatValue('numberOfActiveCalls', 0)}
format={{ notation: 'compact' }}
locales="it-IT" /></span>
</div>
<div className="statsBigBadges__gridItem">
<span>{__('Utenti registrati', 'gepafin')}</span>
<span>{getStatValue('numberOfResgisteredUsers', 0)}</span>
<span><NumberFlow
value={getStatValue('numberOfResgisteredUsers', 0)}
format={{ notation: 'compact' }}
locales="it-IT" /></span>
</div>
<div className="statsBigBadges__gridItem">
<span>{__('Domande in pre-istruttoria', 'gepafin')}</span>
<span>{getStatValue('numberOfSubmittedApplications', 0)}</span>
<span><NumberFlow
value={getStatValue('numberOfSubmittedApplications', 0)}
format={{ notation: 'compact' }}
locales="it-IT" /></span>
</div>
<div className="statsBigBadges__gridItem">
<span>{__('Domande in bozza', 'gepafin')}</span>
<span>{getStatValue('numberOfDraftApplications', 0)}</span>
<span><NumberFlow
value={getStatValue('numberOfDraftApplications', 0)}
format={{ notation: 'compact' }}
locales="it-IT" /></span>
</div>
<div className="statsBigBadges__gridItem">
<span>{__('Aziende', 'gepafin')}</span>
<span>{getStatValue('numberOfCompany', 0)}</span>
<span><NumberFlow
value={getStatValue('numberOfCompany', 0)}
format={{ notation: 'compact' }}
locales="it-IT" /></span>
</div>
<div className="statsBigBadges__gridItem">
<span>{__('Totale finanziamenti attivi', 'gepafin')}</span>
<span>{formatToMillions(getStatValue('totalActiveFinancing', 0))}</span>
<span><NumberFlow
value={getStatValue('totalActiveFinancing', 0)}
format={{
notation: 'compact',
compactDisplay: 'short',
roundingMode: 'trunc',
style: 'currency',
currency: 'EUR',
currencyDisplay: 'symbol'
}}
locales="en-US" /></span>
</div>
</div>
</div>
@@ -95,10 +122,17 @@ const Dashboard = () => {
<div className="appPage__spacer"></div>
<div className="appPageSection">
<h2>{__('Ultimi Bandi Pubblicati', 'gepafin')}</h2>
<h2>{__('Ultimi bandi pubblicati', 'gepafin')}</h2>
<LatestBandiTable/>
</div>
<div className="appPage__spacer"></div>
<div className="appPageSection">
<h2>{__('Ultime domande pubblicate', 'gepafin')}</h2>
<MyEvaluationsTable/>
</div>
{/*<div className="appPage__spacer"></div>
<div className="appPageSection">