import { Box, Alert, Button, Typography } from '@mui/material' import { useNavigate } from 'react-router' import { useSupplyDashboard } from '../../hooks/useSupplyDashboard' import { useSessionStore } from '../../stores/sessionStore' import { UserRole } from '../../domain/enums' import { DashboardHeader, KpiGrid, StrongMatchOverview, DataQualityWidget, FutureSignalWidget, ReviewTaskWidget, QuickActionPanel, DashboardSkeleton, } from '../../components/supply' function WidgetError({ label }: { label: string }) { return ( {label} konnte nicht geladen werden. ) } export default function SupplyDashboard() { const { data, isLoading, isError, refetch } = useSupplyDashboard() const { currentUser } = useSessionStore() const navigate = useNavigate() const role = currentUser?.role ?? UserRole.DEMAND_USER const isReviewer = role === UserRole.REVIEWER const isOwnerViewer = role === UserRole.OWNER_VIEWER const canSeeMatches = role !== UserRole.OWNER_VIEWER && role !== UserRole.DEMAND_USER const canSeeOperations = role === UserRole.SUPER_ADMIN || role === UserRole.ORGANIZATION_ADMIN || role === UserRole.REVIEWER if (isLoading) return if (isError) { return ( Dashboard konnte nicht geladen werden Der Service ist vorübergehend nicht verfügbar. ) } if (!data || data.totalProperties === 0) { return ( Noch keine Objekte vorhanden Fügen Sie Ihr erstes Objekt hinzu oder laden Sie Demo-Daten. ) } return ( {isOwnerViewer ? ( Aktive Objekte {data.activeProperties} / {data.totalProperties} Ø Datenqualität {data.avgDataQuality}% ) : ( )} {/* REVIEWER: Review Queue first, then Matches */} {isReviewer && ( {data.reviewTasks !== null ? ( navigate('/ops/review-queue')} /> ) : ( )} {canSeeMatches && (data.strongMatches !== null ? ( navigate('/supply/match-center')} /> ) : ( ))} )} {/* Default: Matches + Data Quality */} {!isReviewer && canSeeMatches && ( {data.strongMatches !== null ? ( navigate('/supply/match-center')} /> ) : ( )} {data.dataQuality !== null ? ( navigate('/supply/data-quality')} /> ) : ( )} )} {canSeeMatches && data.strongMatches?.length === 0 && ( navigate('/demand/ai-search')}> Bedarfsprofil erstellen } > Noch keine Matches vorhanden. Erstellen Sie ein Bedarfsprofil, um passende Objekte zu finden. )} {!isOwnerViewer && ( {data.futureSignals !== null ? ( ) : ( )} {canSeeOperations && !isReviewer ? ( data.reviewTasks !== null ? ( navigate('/ops/review-queue')} /> ) : ( ) ) : !canSeeOperations && data.dataQuality !== null ? ( navigate('/supply/data-quality')} /> ) : null} )} ) }