"use client"; import { request, useApi } from "@/hooks/use-api"; import "@schedule-x/theme-shadcn/dist/index.css"; import { useNextCalendarApp, ScheduleXCalendar } from "@schedule-x/react"; import { createEventsServicePlugin } from "@schedule-x/events-service"; import { CalendarEventExternal, createViewDay, createViewWeek, } from "@schedule-x/calendar"; import { useEffect, useState } from "react"; import { format } from "date-fns"; import { Dialog } from "@radix-ui/react-dialog"; import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Label } from "@/components/ui/label"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { CalendarIcon } from "lucide-react"; import { Calendar } from "@/components/ui/calendar"; import { cn } from "@/lib/utils"; import { requestFormReset } from "react-dom"; const Planning = () => { const plugins = [createEventsServicePlugin()]; const [eventSelected, setEventSelected] = useState(null); const [events, setEvents] = useState([ { id: "1", // TODO put an uuid there title: "Event 1", start: format(new Date(Date.now()), "yyyy-MM-dd HH:mm"), end: format( new Date(Date.now() + 1 * 3600 * 1000), "yyyy-MM-dd HH:mm", ), }, ]); const [requestCreateEvent, setRequestCreateEvent] = useState(false) const calendar = useNextCalendarApp( { theme: "shadcn", views: [createViewDay(), createViewWeek()], defaultView: "week", isDark: true, isResponsive: true, locale: "fr-FR", dayBoundaries: { start: "06:00", end: "00:00", }, events, callbacks: { onEventClick(event, e) { setEventSelected(event); }, async onClickDateTime(dateTime) { setRequestCreateEvent(true) const newEvent: CalendarEventExternal = { id: "5", title: "Event 1", start: dateTime, end: format( new Date(dateTime).getTime() + (1000 * 60 * 60), "yyyy-MM-dd HH:mm", ), } try { const res = await request( `/events/new`, { method: "POST", body: JSON.stringify(newEvent), requiresAuth: true, csrfToken: false },) if (res.status === "Error") { console.log("Error") } if (res.status === "Success") { console.log("Success") } } catch (e) { console.log(e) } }, }, }, plugins, ); const {data: requestedEvents, isLoading, success} = useApi("/events", { onSuccess: (data) => { calendar?.events.set(data) } }, false, false) useEffect(() => { // get all events calendar?.events.getAll(); }, []); return (
{ setEventSelected((e) => (open ? e : null)); }} > {eventSelected?.title} {eventSelected?.description}
{/* date > new Date() || date < new Date("1900-01-01") } initialFocus /> */} { const val = e.currentTarget.value; setEventSelected((ev) => { if (ev) return { ...ev, start: val, }; return ev; }); }} className="col-span-3" />
{ const val = e.currentTarget.value setEventSelected((ev) => { if (ev) return { ...ev, end: val, }; return ev; }) }} className="col-span-3" />
); }; export default Planning;