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}
)}
)
}