import { useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import * as z from "zod"; import { CalendarIcon, Loader2, Upload } from "lucide-react"; import { format } from "date-fns"; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger, } from "@/components/ui/sheet"; import { Button } from "@/components/ui/button"; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { Calendar } from "@/components/ui/calendar"; import { Checkbox } from "@/components/ui/checkbox"; import { cn } from "@/lib/utils"; import { toast } from "sonner"; const formSchema = z.object({ name: z.string().min(2, "Name is required"), description: z.string().optional(), startDate: z.date({ required_error: "Start date is required" }), endDate: z.date().optional(), startTime: z.string().optional(), endTime: z.string().optional(), allYearEvent: z.boolean().default(false), latitude: z.string().optional(), longitude: z.string().optional(), pincode: z.string().optional(), district: z.string().optional(), state: z.string().optional(), place: z.string().optional(), // Specific locality/place isBookable: z.boolean().default(false), isEventifyEvent: z.boolean().default(false), outsideEventUrl: z.string().optional(), eventType: z.string().min(1, "Event type is required"), eventStatus: z.string().default("Pending"), cancelledReason: z.string().optional(), title: z.string().min(2, "Title is required"), // Display title? importantInformation: z.string().optional(), venueName: z.string().optional(), source: z.string().optional(), imageUrl: z.string().optional(), }); type FormValues = z.infer; interface CreateEventSheetProps { children: React.ReactNode; } export function CreateEventSheet({ children }: CreateEventSheetProps) { const [open, setOpen] = useState(false); const [isSubmitting, setIsSubmitting] = useState(false); const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { name: "", description: "", startTime: "", endTime: "", allYearEvent: false, latitude: "", longitude: "", pincode: "", district: "", state: "", place: "", isBookable: false, isEventifyEvent: false, outsideEventUrl: "NA", eventType: "", eventStatus: "Pending", cancelledReason: "NA", title: "", importantInformation: "", venueName: "", source: "", imageUrl: "", }, }); async function onSubmit(data: FormValues) { setIsSubmitting(true); // Simulate API call await new Promise((resolve) => setTimeout(resolve, 1500)); console.log("Form submitted:", data); toast.success("Event created successfully"); setIsSubmitting(false); setOpen(false); form.reset(); } return ( {children} Add Event Fill in the details to create a new event.
{/* Basic Info */} ( Name )} /> ( Title )} /> ( Description