import React, { useCallback, useMemo, useState } from 'react'; import { useParams } from 'react-router-dom'; import { useAssignedExtensions } from '@openmrs/esm-framework'; import HomeHeader from './components/header/home-header.component'; import { DashboardMetric } from './components/dashboard-metric.component'; import { TopDiseasesBarCharts } from './components/top-diseases-barcharts.component'; import AdmittedOPDLineChart from './components/admitted-opd-line-chart.component'; import { DashboardConfig } from '../../types/index'; import { useFacilityDashboardData } from './hooks/useFacilityDashboardData'; import styles from './facility-dashboard.scss'; import { useTranslation } from 'react-i18next'; const FacilityDashboard: React.FC = () => { const params = useParams(); const assignedExtensions = useAssignedExtensions('express-workflow-left-panel-slot'); const today = useMemo(() => new Date().toISOString().split('T')[0], []); const [dateRange, setDateRange] = useState({ startDate: today, endDate: today }); const { data: dashboardData, error, isLoading } = useFacilityDashboardData(dateRange.startDate, dateRange.endDate); const { t } = useTranslation(); const dashboards = useMemo(() => { const ungrouped = assignedExtensions .map((extension) => extension.meta) .filter((meta) => meta && Object.keys(meta).length > 0); return (ungrouped as Array) || []; }, [assignedExtensions]); const activeDashboard = useMemo(() => { if (!dashboards.length) { return undefined; } return dashboards.find((dashboard) => dashboard.name === params?.dashboard) || dashboards[0]; }, [dashboards, params?.dashboard]); const handleDateChange = useCallback((startDate: string, endDate: string) => { setDateRange({ startDate, endDate }); }, []); return (
{!dashboards.length ? (
No dashboards available.
) : isLoading ? (
Loading...
) : error ? (
Error loading dashboard data
) : (
{/* First Row: Bar Charts for Top Diseases */}
{/* Second Row: 3 Metric Tiles */}
5 years')} value={dashboardData?.metrics.opdOver5 ?? 0} />
{/* Third Row: Left Metrics (30%) + Right Line Chart (70%) */}
)}
); }; export default FacilityDashboard;