"use client" import * as React from "react" import { CalendarIcon } from "lucide-react" import { format } from "date-fns" import { zodResolver } from "@hookform/resolvers/zod" import * as z from "zod" import { cn } from "@/lib/utils" import { Button } from "@/components/ui/button" import { Calendar } from "@/components/ui/calendar" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form" import { Input } from "@/components/ui/input" import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover" import { Checkbox } from "@/components/ui/checkbox" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { useForm } from "react-hook-form" import { CalendarEventExternal, } from "@schedule-x/calendar"; import ICalendarEvent from "@/interfaces/ICalendarEvent" export const eventFormSchema = z.object({ title: z.string().min(1, "Titre requis"), startDate: z.date({ required_error: "Date de début requise", }), startTime: z.string(), endDate: z.date({ required_error: "Date finale requise", }), endTime: z.string(), fullDay: z.boolean().default(false), frequency: z.enum(["unique", "quotidien", "hebdomadaire", "mensuel"]), frequencyEndDate: z.date().optional(), isVisible: z.boolean().default(true), }) export type EventFormValues = z.infer const frequencies = [ { label: "Unique", value: "unique" }, { label: "Quotidien", value: "quotidien" }, { label: "Hebdomadaire", value: "hebdomadaire" }, { label: "Mensuel", value: "mensuel" }, ] const isCalendarEventExternal = (event: CalendarEventExternal | Omit): event is CalendarEventExternal => { return (event as CalendarEventExternal).id !== undefined; }; export const EventForm: React.FC< { event: ICalendarEvent | Omit; onSubmitEvent: (eventFormValues: EventFormValues) => void; } > = ({ event, onSubmitEvent, }) => { const form = useForm({ resolver: zodResolver(eventFormSchema), defaultValues: { title: isCalendarEventExternal(event) ? event.title : "", startDate: isCalendarEventExternal(event) ? new Date(event.start) : new Date(), startTime: isCalendarEventExternal(event) ? `${new Date(event.start).getHours()}:${new Date(event.start).getMinutes()}` : "10:00", endDate: isCalendarEventExternal(event) ? new Date(event.end) : new Date(), endTime: isCalendarEventExternal(event) ? `${new Date(event.end).getHours()}:${new Date(event.end).getMinutes()}` : "11:00", fullDay: isCalendarEventExternal(event) ? event.fullday : false, frequency: isCalendarEventExternal(event) ? event.rrule : "unique", isVisible: isCalendarEventExternal(event) ? event.visibility : true, }, }) const frequency = form.watch("frequency") async function onSubmit(data: EventFormValues) { try { const validatedData = eventFormSchema.parse(data) onSubmitEvent(validatedData) } catch (error) { console.error("On submit error : ", error) } } return (
( Titre )} />
( Début )} /> ( )} /> Until ( Fin )} /> ( )} />
( Journée complète )} />
( Fréquence )} /> {frequency !== "unique" && ( ( Jusqu'au )} /> )}
( Evènement visible ? )} />
) }