"use client" import { useEffect, useRef, useState } from "react" import { toast } from "sonner" import { Users, Video, X } from "lucide-react" import { AgendaEventScheduleFields } from "@/components/agenda/agenda-event-schedule-fields" import { AgendaGuestPicker } from "@/components/agenda/agenda-guest-picker" import { AgendaVideoToggle } from "@/components/agenda/agenda-video-toggle" import { AgendaFloatingCard, type AnchorRect } from "@/components/agenda/agenda-floating-card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { useCreateAgendaEvent, useCreateAgendaMeetLink } from "@/lib/api/hooks/use-calendar-mutations" import { createAgendaEventWithVideo } from "@/lib/agenda/agenda-save-with-video" import { calendarColor } from "@/lib/agenda/agenda-events" import { useEffectiveAgendaSettings } from "@/lib/agenda/use-effective-agenda-settings" import type { AgendaCalendar, AgendaEventAttendee, AgendaEventDraft, } from "@/lib/agenda/agenda-types" export interface AgendaQuickCreateState { start: Date end: Date allDay: boolean anchor: AnchorRect } export function AgendaQuickCreate({ state, calendars, defaultCalendarId, userEmail, onClose, onMoreOptions, }: { state: AgendaQuickCreateState | null calendars: AgendaCalendar[] defaultCalendarId: string userEmail?: string onClose: () => void onMoreOptions: (draft: AgendaEventDraft) => void }) { const [title, setTitle] = useState("") const [calendarId, setCalendarId] = useState(defaultCalendarId) const [start, setStart] = useState(() => new Date()) const [end, setEnd] = useState(() => new Date()) const [attendees, setAttendees] = useState([]) const [includeVideo, setIncludeVideo] = useState(false) const titleRef = useRef(null) const createMutation = useCreateAgendaEvent() const meetLinkMutation = useCreateAgendaMeetLink() const { buttonSnapMinutes, defaultVideoProvider } = useEffectiveAgendaSettings() useEffect(() => { if (!state) return setTitle("") setCalendarId(defaultCalendarId) setStart(state.start) setEnd(state.end) setAttendees([]) setIncludeVideo(false) const timer = window.setTimeout(() => titleRef.current?.focus(), 0) return () => window.clearTimeout(timer) }, [state, defaultCalendarId]) if (!state) return null const calendar = calendars.find((c) => c.id === calendarId) ?? calendars[0] const draft: AgendaEventDraft = { title, start, end, allDay: state.allDay, calendarId, attendees, includeVideo, } const save = async () => { if (!calendarId || !calendar) return try { await createAgendaEventWithVideo({ draft, calendar, userEmail, includeVideo: includeVideo && !state.allDay, videoProvider: defaultVideoProvider, createMutation, meetLinkMutation, }) toast.success(includeVideo && !state.allDay ? "Événement et visio créés" : "Événement créé") onClose() } catch { toast.error("Impossible de créer l'événement") } } const showVideo = !state.allDay && defaultVideoProvider !== "none" const guestTab = state.allDay ? 3 : 5 const videoTab = state.allDay ? 4 : 6 const calendarTab = state.allDay ? (showVideo ? 5 : 4) : showVideo ? 7 : 6 return (
setTitle(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter") void save() }} className="h-11 min-w-0 flex-1 rounded-none border-0 border-b-2 border-border/60 !bg-transparent px-1 !text-lg shadow-none focus-visible:border-primary focus-visible:ring-0" />
{state.allDay ? ( { setStart(nextStart) setEnd(nextEnd) }} /> ) : ( { setStart(nextStart) setEnd(nextEnd) }} /> )}
{showVideo ? (
) : null}
) }