'use client' import { Invoice, Deadline } from '@/types' import { cn } from '@/lib/utils' import { Button } from '@/components/ui/button' import { Plus } from 'lucide-react' import { formatDateISO, isSameDay, isInvoiceOverdue, isDeadlineOverdue, getTimeSlots, formatDayViewHeader, DEADLINE_TYPE_LABELS, PRIORITY_LABELS, } from '@/lib/calendar/utils' interface CalendarDayViewProps { date: Date invoices: Invoice[] deadlines: Deadline[] onAddDeadline: (date: Date) => void } export function CalendarDayView({ date, invoices, deadlines, onAddDeadline, }: CalendarDayViewProps) { const timeSlots = getTimeSlots(8, 20) const today = new Date() const isToday = isSameDay(date, today) const dateStr = formatDateISO(date) // Filter items for this day const dayInvoices = invoices.filter(inv => inv.due_date === dateStr) const dayDeadlines = deadlines.filter(d => d.due_date === dateStr) // Categorize items const activeInvoices = dayInvoices.filter(inv => inv.status !== 'paid' && inv.status !== 'cancelled' && inv.status !== 'credited' ) const paidInvoices = dayInvoices.filter(inv => inv.status === 'paid') const activeDeadlines = dayDeadlines.filter(d => !d.is_completed) const completedDeadlines = dayDeadlines.filter(d => d.is_completed) return (
{/* Header */}

{formatDayViewHeader(date)} {isToday && (Idag)}

{/* All-day events section */}
Hela dagen
{/* Active invoices */} {activeInvoices.length > 0 && (
{activeInvoices.map((invoice) => (
Faktura {invoice.invoice_number} {isInvoiceOverdue(invoice) && ( Förfallen )}
{invoice.customer?.name} • {(invoice.total_sek || invoice.total).toLocaleString('sv-SE')} kr
))}
)} {/* Paid invoices */} {paidInvoices.length > 0 && (
{paidInvoices.map((invoice) => (
Faktura {invoice.invoice_number} Betald
{invoice.customer?.name} • {(invoice.total_sek || invoice.total).toLocaleString('sv-SE')} kr
))}
)} {/* Active deadlines */} {activeDeadlines.length > 0 && (
{activeDeadlines.map((deadline) => (
{deadline.title} {isDeadlineOverdue(deadline) && ( Försenad )}
{DEADLINE_TYPE_LABELS[deadline.deadline_type] || deadline.deadline_type} {deadline.priority !== 'normal' && ( {PRIORITY_LABELS[deadline.priority]} )} {deadline.customer?.name && ` • ${deadline.customer.name}`}
))}
)} {/* Completed deadlines */} {completedDeadlines.length > 0 && (
{completedDeadlines.map((deadline) => (
{deadline.title}
{DEADLINE_TYPE_LABELS[deadline.deadline_type] || deadline.deadline_type} Klar
))}
)} {/* Empty state */} {dayInvoices.length === 0 && dayDeadlines.length === 0 && (
Inga händelser för denna dag
)}
{/* Time grid */}
{timeSlots.map((time) => ( ))}
) }