"use client" import { useEffect, useState } from "react" import { toast } from "sonner" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { useCreateAgendaCalendar, useUpdateAgendaCalendar, } from "@/lib/api/hooks/use-calendar-mutations" import { AGENDA_COLOR_PALETTE } from "@/lib/agenda/agenda-colors" import { calendarColor } from "@/lib/agenda/agenda-events" import type { AgendaCalendar } from "@/lib/agenda/agenda-types" import { cn } from "@/lib/utils" export function AgendaCalendarDialog({ open, onOpenChange, calendar, onAddExternalICal, }: { open: boolean onOpenChange: (open: boolean) => void /** Agenda à modifier — absent en création. */ calendar?: AgendaCalendar | null /** Création uniquement — ouvre la modale iCal externe. */ onAddExternalICal?: () => void }) { const [name, setName] = useState("") const [color, setColor] = useState(AGENDA_COLOR_PALETTE[0].value) const createMutation = useCreateAgendaCalendar() const updateMutation = useUpdateAgendaCalendar() const pending = createMutation.isPending || updateMutation.isPending useEffect(() => { if (!open) return setName(calendar?.display_name ?? "") setColor(calendar ? calendarColor(calendar) : AGENDA_COLOR_PALETTE[0].value) }, [open, calendar]) const submit = async () => { const displayName = name.trim() if (!displayName) return try { if (calendar) { await updateMutation.mutateAsync({ id: calendar.id, display_name: displayName, color, }) toast.success("Agenda mis à jour") } else { await createMutation.mutateAsync({ display_name: displayName, color }) toast.success(`Agenda « ${displayName} » créé`) } onOpenChange(false) } catch { toast.error("Impossible d'enregistrer l'agenda") } } return ( {calendar ? "Modifier l'agenda" : "Nouvel agenda"}
setName(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter") void submit() }} />
{AGENDA_COLOR_PALETTE.map((c) => (
{!calendar && onAddExternalICal ? ( ) : null}
) }