"use client"; import { useTranslations, useFormatter } from "next-intl"; import { Button } from "@/components/ui/button"; import { ArrowLeft, ChevronLeft, ChevronRight, Plus, Upload } from "lucide-react"; import { addDays, startOfWeek } from "date-fns"; import { cn } from "@/lib/utils"; import type { CalendarViewMode } from "@/stores/calendar-store"; interface CalendarToolbarProps { selectedDate: Date; viewMode: CalendarViewMode; onNavigateBack: () => void; onPrev: () => void; onNext: () => void; onToday: () => void; onViewModeChange: (mode: CalendarViewMode) => void; onCreateEvent: () => void; onImport?: () => void; isMobile?: boolean; firstDayOfWeek?: number; } export function CalendarToolbar({ selectedDate, viewMode, onNavigateBack, onPrev, onNext, onToday, onViewModeChange, onCreateEvent, onImport, isMobile, firstDayOfWeek = 1, }: CalendarToolbarProps) { const t = useTranslations("calendar"); const formatter = useFormatter(); const views: CalendarViewMode[] = ["month", "week", "day", "agenda"]; const getDateLabel = (): string => { switch (viewMode) { case "month": return formatter.dateTime(selectedDate, { month: "long", year: "numeric" }); case "week": { const ws = startOfWeek(selectedDate, { weekStartsOn: firstDayOfWeek as 0 | 1 }); const we = addDays(ws, 6); const sameMonth = ws.getMonth() === we.getMonth(); if (sameMonth) { return `${formatter.dateTime(ws, { month: "short", day: "numeric" })} – ${formatter.dateTime(we, { day: "numeric" })}, ${we.getFullYear()}`; } return `${formatter.dateTime(ws, { month: "short", day: "numeric" })} – ${formatter.dateTime(we, { month: "short", day: "numeric" })}, ${we.getFullYear()}`; } case "day": return formatter.dateTime(selectedDate, { weekday: "long", month: "long", day: "numeric", year: "numeric" }); case "agenda": return formatter.dateTime(selectedDate, { month: "long", year: "numeric" }); } }; return (
{getDateLabel()}
{!isMobile && (
{views.map((v) => ( ))}
)} {onImport && ( )}
); }