import { useState, useMemo } from 'react' import { useNavigate } from 'react-router-dom' import { format, addDays, startOfWeek, isSameDay } from 'date-fns' import { de } from 'date-fns/locale' import { FaChevronLeft, FaChevronRight } from 'react-icons/fa6' import { PageHeader, Card, Button } from '../components/ui' import { useWorkorders } from '../hooks/useWorkorders' import { useEmployees } from '../hooks/useEmployees' import { groupAppointmentsByDay, countInRange, dayKey } from '../lib/planboard' import { ticketPath } from '../lib/ticketRoutes' /* Termine haengen an den Tickets (startDate/startTime/endTime/assignedTo); die Aufbereitung steckt in src/lib/planboard.js. */ // Farben nur ueber Tokens (P3 baut die Seite um) const TYPE_COLORS = { akquise: { bg: 'var(--appt-akquise)', fg: 'var(--orange-fg)' }, webpage: { bg: 'var(--bg-hover)', fg: 'var(--text-2)' }, project: { bg: 'var(--bg-hover)', fg: 'var(--text-2)' }, } export default function PlanboardPage() { const navigate = useNavigate() const [currentWeek, setCurrentWeek] = useState(startOfWeek(new Date(), { weekStartsOn: 1 })) const { workorders, loading } = useWorkorders({ limit: 500 }) const { employees } = useEmployees() const weekDays = Array.from({ length: 7 }, (_, i) => addDays(currentWeek, i)) const navigateWeek = (dir) => setCurrentWeek((prev) => addDays(prev, dir * 7)) const goToday = () => setCurrentWeek(startOfWeek(new Date(), { weekStartsOn: 1 })) const byDay = useMemo(() => groupAppointmentsByDay(workorders || [], employees || []), [workorders, employees]) const weekCount = countInRange(byDay, weekDays) return (
{format(currentWeek, 'dd.MM.yyyy')} - {format(addDays(currentWeek, 6), 'dd.MM.yyyy')}
} />
{weekDays.map((day) => { const entries = byDay[dayKey(day)] || [] const today = isSameDay(day, new Date()) return (
{format(day, 'EEEE', { locale: de })} {format(day, 'dd.MM')}
{entries.length === 0 && (

Keine Termine

)} {entries.map((entry) => { const color = TYPE_COLORS[String(entry.type).toLowerCase()] || { bg: 'var(--bg-subtle)', fg: 'var(--line-strong)' } return ( ) })}
) })}
) }