// frontend/src/pages/Dashboard/Dashboard.tsx
import React, { useState, useEffect } from 'react';
import { Link } from 'react-router-dom';
import { useAuth } from '../../contexts/AuthContext';
// Mock Data für die Demo
const mockData = {
currentShiftPlan: {
id: '1',
name: 'November Schichtplan 2024',
period: '01.11.2024 - 30.11.2024',
status: 'Aktiv',
shiftsCovered: 85,
totalShifts: 120
},
upcomingShifts: [
{ id: '1', date: 'Heute', time: '08:00 - 16:00', type: 'Frühschicht', assigned: true },
{ id: '2', date: 'Morgen', time: '14:00 - 22:00', type: 'Spätschicht', assigned: true },
{ id: '3', date: '15.11.2024', time: '08:00 - 16:00', type: 'Frühschicht', assigned: false }
],
teamStats: {
totalEmployees: 24,
availableToday: 18,
onVacation: 3,
sickLeave: 2
},
recentActivities: [
{ id: '1', action: 'Schichtplan veröffentlicht', user: 'Max Mustermann', time: 'vor 2 Stunden' },
{ id: '2', action: 'Mitarbeiter hinzugefügt', user: 'Sarah Admin', time: 'vor 4 Stunden' },
{ id: '3', action: 'Verfügbarkeit geändert', user: 'Tom Bauer', time: 'vor 1 Tag' }
]
};
const Dashboard: React.FC = () => {
const { user, hasRole } = useAuth();
const [loading, setLoading] = useState(true);
useEffect(() => {
// Simuliere Daten laden
setTimeout(() => setLoading(false), 1000);
}, []);
if (loading) {
return (
);
}
return (
{/* Willkommens-Bereich */}
Willkommen zurück, {user?.name}! 👋
{new Date().toLocaleDateString('de-DE', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric'
})}
{/* Quick Actions - Nur für Admins/Instandhalter */}
{hasRole(['admin', 'instandhalter']) && (
Schnellaktionen
{
e.currentTarget.style.transform = 'translateY(-2px)';
}} onMouseLeave={(e) => {
e.currentTarget.style.transform = 'translateY(0)';
}}>
📅
Neuen Schichtplan
Erstellen
{
e.currentTarget.style.transform = 'translateY(-2px)';
}} onMouseLeave={(e) => {
e.currentTarget.style.transform = 'translateY(0)';
}}>
👥
Mitarbeiter
Verwalten
{
e.currentTarget.style.transform = 'translateY(-2px)';
}} onMouseLeave={(e) => {
e.currentTarget.style.transform = 'translateY(0)';
}}>
📋
Alle Pläne
Anzeigen
)}
{/* Haupt-Grid mit Informationen */}
{/* Aktueller Schichtplan */}
📊 Aktueller Schichtplan
{mockData.currentShiftPlan.name}
{mockData.currentShiftPlan.period}
Fortschritt:
{mockData.currentShiftPlan.shiftsCovered}/{mockData.currentShiftPlan.totalShifts} Schichten
{mockData.currentShiftPlan.status}
{/* Team-Statistiken */}
👥 Team-Übersicht
Gesamt Mitarbeiter:
{mockData.teamStats.totalEmployees}
Verfügbar heute:
{mockData.teamStats.availableToday}
Im Urlaub:
{mockData.teamStats.onVacation}
Krankgeschrieben:
{mockData.teamStats.sickLeave}
{/* Unteres Grid */}
{/* Meine nächsten Schichten (für normale User) */}
{hasRole(['user']) && (
⏰ Meine nächsten Schichten
{mockData.upcomingShifts.map(shift => (
{shift.date}
{shift.time}
{shift.type}
{shift.assigned ? 'Zugewiesen' : 'Noch offen'}
))}
)}
{/* Letzte Aktivitäten (für Admins/Instandhalter) */}
{hasRole(['admin', 'instandhalter']) && (
📝 Letzte Aktivitäten
{mockData.recentActivities.map(activity => (
{activity.action}
von {activity.user}
{activity.time}
))}
)}
{/* Schnelllinks */}
🔗 Schnellzugriff
{
e.currentTarget.style.backgroundColor = '#e9ecef';
}} onMouseLeave={(e) => {
e.currentTarget.style.backgroundColor = '#f8f9fa';
}}>
📅
Alle Schichtpläne anzeigen
{
e.currentTarget.style.backgroundColor = '#e9ecef';
}} onMouseLeave={(e) => {
e.currentTarget.style.backgroundColor = '#f8f9fa';
}}>
❓
Hilfe & Anleitung
{hasRole(['user']) && (
{
e.currentTarget.style.backgroundColor = '#e9ecef';
}} onMouseLeave={(e) => {
e.currentTarget.style.backgroundColor = '#f8f9fa';
}}>
📝
Meine Verfügbarkeit bearbeiten
)}
);
};
export default Dashboard;