import React, { useEffect, useState } from 'react'; import { Box, Card, CardContent, CircularProgress, Link, Typography, } from '@mui/material'; import { Link as RouterLink } from 'react-router-dom'; import { atemschutzApi } from '../../services/atemschutz'; import type { AtemschutzStats } from '../../types/atemschutz.types'; interface AtemschutzDashboardCardProps { hideWhenEmpty?: boolean; } const AtemschutzDashboardCard: React.FC = ({ hideWhenEmpty = false, }) => { const [stats, setStats] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { let mounted = true; const fetchStats = async () => { try { setLoading(true); setError(null); const data = await atemschutzApi.getStats(); if (mounted) setStats(data); } catch { if (mounted) setError('Atemschutzstatus konnte nicht geladen werden.'); } finally { if (mounted) setLoading(false); } }; fetchStats(); return () => { mounted = false; }; }, []); if (loading) { return ( Atemschutzstatus wird geladen... ); } if (error) { return ( {error} ); } if (!stats) return null; // Determine if there are any concerns const hasConcerns = stats.untersuchungAbgelaufen > 0 || stats.leistungstestAbgelaufen > 0 || stats.untersuchungBaldFaellig > 0 || stats.leistungstestBaldFaellig > 0; const allGood = stats.einsatzbereit === stats.total && !hasConcerns; // If hideWhenEmpty and everything is fine, render nothing if (hideWhenEmpty && allGood) return null; return ( Atemschutz {/* Main metric */} {stats.einsatzbereit}/{stats.total} einsatzbereit {/* Concerns list */} {hasConcerns && ( {stats.untersuchungAbgelaufen > 0 && ( {stats.untersuchungAbgelaufen} Untersuchung{stats.untersuchungAbgelaufen !== 1 ? 'en' : ''} abgelaufen )} {stats.leistungstestAbgelaufen > 0 && ( {stats.leistungstestAbgelaufen} Leistungstest{stats.leistungstestAbgelaufen !== 1 ? 's' : ''} abgelaufen )} {stats.untersuchungBaldFaellig > 0 && ( {stats.untersuchungBaldFaellig} Untersuchung{stats.untersuchungBaldFaellig !== 1 ? 'en' : ''} bald fällig )} {stats.leistungstestBaldFaellig > 0 && ( {stats.leistungstestBaldFaellig} Leistungstest{stats.leistungstestBaldFaellig !== 1 ? 's' : ''} bald fällig )} )} {/* All good message */} {allGood && ( Alle Atemschutzträger einsatzbereit )} {/* Link to management page */} Zur Verwaltung ); }; export default AtemschutzDashboardCard;