"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 { SubmitErrorHandler, SubmitHandler, useForm, UseFormReturn, } from "react-hook-form"; import { CalendarEventExternal } from "@schedule-x/calendar"; import ICalendarEvent from "@/interfaces/ICalendarEvent"; import { useEffect } from "react"; 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; setForm: React.Dispatch< React.SetStateAction | undefined> >; }> = ({ event, setForm }) => { const _start = new Date(event.start ?? Date.now()); const _end = new Date(event.end ?? Date.now()); const form = useForm({ resolver: zodResolver(eventFormSchema), defaultValues: { title: event.title ? event.title : "", startDate: _start, // event.start), startTime: format(_start, "HH:mm"), endDate: _end, // event.end), endTime: format(_end, "HH:mm"), fullDay: event.fullday, frequency: "unique", isVisible: event.isVisible, }, }); useEffect(() => { setForm(form); }, []); const frequency = form.watch("frequency"); return (
( Titre )} />
( Début )} /> ( )} /> Until ( Fin )} /> ( )} />
( Journée complète )} />
( Fréquence )} /> {frequency !== "unique" && ( ( Jusqu'au )} /> )}
( Evènement visible ? )} /> ); };