'use client' import { useState, useMemo } from 'react' import { Deadline, DeadlineType } from '@/types' import { Button } from '@/components/ui/button' import { DeadlineCard } from './DeadlineCard' import { DeadlineFilters } from './DeadlineFilters' import { DeadlineForm } from './DeadlineForm' import { isDeadlineOverdue } from '@/lib/calendar/utils' import { Plus, Calendar } from 'lucide-react' interface DeadlineListProps { deadlines: Deadline[] customers: { id: string; name: string }[] onDeadlineCreate: (data: Omit) => Promise onDeadlineToggle: (deadline: Deadline) => Promise onDeadlineEdit: (deadline: Deadline) => Promise onDeadlineDelete: (deadline: Deadline) => Promise } export function DeadlineList({ deadlines, customers, onDeadlineCreate, onDeadlineToggle, onDeadlineEdit, onDeadlineDelete, }: DeadlineListProps) { const [statusFilter, setStatusFilter] = useState<'all' | 'pending' | 'completed'>('pending') const [typeFilter, setTypeFilter] = useState('all') const [showForm, setShowForm] = useState(false) const [editingDeadline, setEditingDeadline] = useState(null) const filteredDeadlines = useMemo(() => { return deadlines.filter((d) => { // Status filter if (statusFilter === 'pending' && d.is_completed) return false if (statusFilter === 'completed' && !d.is_completed) return false // Type filter if (typeFilter !== 'all' && d.deadline_type !== typeFilter) return false return true }) }, [deadlines, statusFilter, typeFilter]) // Group by overdue, today, upcoming const groupedDeadlines = useMemo(() => { const today = new Date().toISOString().split('T')[0] const overdue: Deadline[] = [] const todayDeadlines: Deadline[] = [] const upcoming: Deadline[] = [] const completed: Deadline[] = [] for (const d of filteredDeadlines) { if (d.is_completed) { completed.push(d) } else if (isDeadlineOverdue(d)) { overdue.push(d) } else if (d.due_date === today) { todayDeadlines.push(d) } else { upcoming.push(d) } } return { overdue, today: todayDeadlines, upcoming, completed } }, [filteredDeadlines]) const handleResetFilters = () => { setStatusFilter('all') setTypeFilter('all') } const handleFormSubmit = async (data: Omit) => { if (editingDeadline) { await onDeadlineEdit({ ...editingDeadline, ...data }) } else { await onDeadlineCreate(data) } setShowForm(false) setEditingDeadline(null) } const handleEdit = (deadline: Deadline) => { setEditingDeadline(deadline) setShowForm(true) } const handleFormClose = () => { setShowForm(false) setEditingDeadline(null) } return (
{/* Header */}
{/* Deadline groups */} {filteredDeadlines.length === 0 ? (

Inga deadlines

{statusFilter !== 'all' || typeFilter !== 'all' ? 'Inga deadlines matchar dina filter' : 'Skapa din första deadline för att komma igång'}

) : (
{/* Overdue */} {groupedDeadlines.overdue.length > 0 && (

Förfallna ({groupedDeadlines.overdue.length})

{groupedDeadlines.overdue.map((deadline) => ( ))}
)} {/* Today */} {groupedDeadlines.today.length > 0 && (

Idag ({groupedDeadlines.today.length})

{groupedDeadlines.today.map((deadline) => ( ))}
)} {/* Upcoming */} {groupedDeadlines.upcoming.length > 0 && (

Kommande ({groupedDeadlines.upcoming.length})

{groupedDeadlines.upcoming.map((deadline) => ( ))}
)} {/* Completed */} {groupedDeadlines.completed.length > 0 && (

Klara ({groupedDeadlines.completed.length})

{groupedDeadlines.completed.map((deadline) => ( ))}
)}
)} {/* Deadline form dialog */}
) }