Keine Termine in diesem Monat
{viewType === 'family' ? 'Füge einen neuen Termin hinzu für alle Familienmitglieder' : `Keine Termine für ${selectedUser} gefunden` }import React, { useState, useEffect } from 'react'; import { FaPlus, FaTrash, FaEdit, FaCalendarAlt, FaUsers, FaUser, FaChevronLeft, FaChevronRight, FaSave, FaTimes } from 'react-icons/fa'; import calendarService from './services/CalendarService'; import './App.sass'; const App = () => { const [events, setEvents] = useState([]); const [users, setUsers] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [currentDate, setCurrentDate] = useState(new Date()); const [viewType, setViewType] = useState('family'); // 'family' or 'individual' const [selectedUser, setSelectedUser] = useState(null); const [showAddForm, setShowAddForm] = useState(false); const [editingEvent, setEditingEvent] = useState(null); const [newEvent, setNewEvent] = useState({ user: '', date: '', text: '' }); useEffect(() => { loadUsers(); loadEvents(); }, [currentDate, viewType, selectedUser]); const loadUsers = async () => { try { const userData = await calendarService.getUsers(); setUsers(userData); if (userData.length > 0 && !selectedUser) { setSelectedUser(userData[0].name); setNewEvent(prev => ({ ...prev, user: userData[0].name })); } } catch (err) { setError('Fehler beim Laden der Benutzer'); console.error('Error loading users:', err); } }; const loadEvents = async () => { try { setLoading(true); const year = currentDate.getFullYear(); const month = String(currentDate.getMonth() + 1).padStart(2, '0'); const eventData = await calendarService.getEventsForMonth( year, month, selectedUser, viewType ); setEvents(eventData); setError(null); } catch (err) { setError('Fehler beim Laden der Termine'); console.error('Error loading events:', err); } finally { setLoading(false); } }; const handleAddEvent = async (e) => { e.preventDefault(); if (!newEvent.text.trim() || !newEvent.date || !newEvent.user) return; try { const createdEvent = await calendarService.createEvent(newEvent); setEvents([...events, createdEvent]); setNewEvent({ user: selectedUser || users[0]?.name || '', date: '', text: '' }); setShowAddForm(false); } catch (err) { setError('Fehler beim Erstellen des Termins'); console.error('Error creating event:', err); } }; const handleUpdateEvent = async (eventId, updatedData) => { try { const updatedEvent = await calendarService.updateEvent(eventId, updatedData); setEvents(events.map(event => event.id === eventId ? updatedEvent : event )); setEditingEvent(null); } catch (err) { setError('Fehler beim Aktualisieren des Termins'); console.error('Error updating event:', err); } }; const handleDeleteEvent = async (eventId, user) => { try { await calendarService.deleteEvent(eventId, user); setEvents(events.filter(event => event.id !== eventId)); } catch (err) { setError('Fehler beim Löschen des Termins'); console.error('Error deleting event:', err); } }; const navigateMonth = (direction) => { const newDate = new Date(currentDate); newDate.setMonth(newDate.getMonth() + direction); setCurrentDate(newDate); }; const formatDate = (dateString) => { const date = new Date(dateString); return date.toLocaleDateString('de-DE', { weekday: 'short', day: '2-digit', month: '2-digit' }); }; const getCurrentMonthYear = () => { return currentDate.toLocaleDateString('de-DE', { month: 'long', year: 'numeric' }); }; const groupEventsByDate = (events) => { const grouped = {}; events.forEach(event => { const date = event.date; if (!grouped[date]) { grouped[date] = []; } grouped[date].push(event); }); // Sort dates const sortedDates = Object.keys(grouped).sort(); const result = {}; sortedDates.forEach(date => { result[date] = grouped[date]; }); return result; }; const groupedEvents = groupEventsByDate(events); const getUserColor = (userName) => { const colors = [ '#3b82f6', // blue '#10b981', // green '#f59e0b', // amber '#ef4444', // red '#8b5cf6', // purple '#06b6d4', // cyan '#ec4899', // pink '#84cc16' // lime ]; const userIndex = users.findIndex(user => user.name === userName); return colors[userIndex % colors.length]; }; if (loading && events.length === 0) { return (
Kalender wird geladen...
Keine Termine in diesem Monat
{viewType === 'family' ? 'Füge einen neuen Termin hinzu für alle Familienmitglieder' : `Keine Termine für ${selectedUser} gefunden` }