"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; onSubmit: (data: EventFormValues) => any; }> = ({ event, onSubmit }) => { 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, }, }); 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); // } // } // useEffect(() => { // try { // const validatedData = eventFormSchema.parse(form); // setEvent((old) => { // const rrule = mapFrequencyToRrule( // validatedData.frequency, // validatedData.frequencyEndDate, // ); // const [sHours, sMinutes] = validatedData.startTime.split(":"); // validatedData.startDate.setHours( // parseInt(sHours), // parseInt(sMinutes), // ); // const [eHours, eMinutes] = validatedData.endTime.split(":"); // validatedData.endDate.setHours( // parseInt(eHours), // parseInt(eMinutes), // ); // return { // ...old, // start: validatedData.startDate.toISOString(), // end: validatedData.endDate.toISOString(), // title: `${validatedData.title}`, // fullDay: validatedData.fullDay, // rrule: rrule, // isVisible: validatedData.isVisible, // }; // }); // } catch (e) { // console.log(e); // } // }, [form]); return (
( Titre )} />
( Début )} /> ( )} /> Until ( Fin )} /> ( )} />
( Journée complète )} />
( Fréquence )} /> {frequency !== "unique" && ( ( Jusqu'au )} /> )}
( Evènement visible ? )} /> ); };