'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) => (
))}
)
}