diff --git a/components/Modals/CreateCalendar.tsx b/components/Modals/CreateCalendar.tsx new file mode 100644 index 0000000..0ea7526 --- /dev/null +++ b/components/Modals/CreateCalendar.tsx @@ -0,0 +1,197 @@ +"use client"; + +import { useState, useRef, useEffect } from "react"; +import Image from "next/image"; +import { HiX } from "react-icons/hi"; +import { toast } from "sonner"; +import { cn } from "@/lib/utils"; +import { randomId } from "@/lib/nostr"; +import { unixTimeNowInSeconds } from "@/lib/nostr/dates"; +import { addMinutesToDate, toUnix, convertToTimezone } from "@/lib/utils/dates"; + +import { Button } from "@/components/ui/button"; +import { Textarea } from "@/components/ui/textarea"; +import { DatePicker } from "@/components/ui/date-picker"; +import { TimePicker } from "@/components/ui/time-picker"; +import { TimezoneSelector } from "@/components/ui/timezone"; +import { Label } from "@/components/ui/label"; + +import SmallCalendarIcon from "@/components/EventIcons/DateIcon"; +import LocationIcon from "@/components/EventIcons/LocationIcon"; +import LocationSearchInput from "@/components/LocationSearch"; +import Spinner from "../spinner"; + +import useAutosizeTextArea from "@/lib/hooks/useAutoSizeTextArea"; +import { useModal } from "@/app/_providers/modal/provider"; +import { useRouter } from "next/navigation"; +import { createEvent } from "@/lib/actions/create"; +import { useNDK } from "@/app/_providers/ndk"; +import useCurrentUser from "@/lib/hooks/useCurrentUser"; +import useImageUpload from "@/lib/hooks/useImageUpload"; + +export default function CreateCalendarEventModal() { + const modal = useModal(); + const now = new Date(new Date().setHours(12, 0, 0, 0)); + const [isLoading, setIsLoading] = useState(false); + const { + ImageUploadButton, + clear, + imagePreview, + imageUrl, + status: imageStatus, + } = useImageUpload("event"); + const [error, setError] = useState(""); + const [name, setName] = useState(""); + const [description, setDescription] = useState(""); + + const { ndk } = useNDK(); + const { currentUser } = useCurrentUser(); + const router = useRouter(); + + async function handleSubmit() { + console.log("CALLED", ndk, currentUser); + if (!ndk || !currentUser) { + alert("MISSING"); + return; + } + + setIsLoading(true); + if (!name) { + setError("Please add a title"); + return; + } + + try { + const random = randomId(); + const tags: string[][] = [ + ["d", random], + ["name", name], + ["description", description], + ["p", currentUser.pubkey, "", "host"], + ]; + + if (imageUrl) { + tags.push(["image", imageUrl]); + } + const preEvent = { + content: description, + pubkey: currentUser.pubkey, + created_at: unixTimeNowInSeconds(), + tags: tags, + kind: 31924, + }; + const event = await createEvent(ndk, preEvent); + if (event) { + toast.success("Calendar Created!"); + modal?.hide(); + router.push(`/calendar/${event.encode()}`); + } else { + toast.error("An error occured"); + } + } catch (err) { + console.log("err", err); + } finally { + setIsLoading(false); + } + } + + const nameRef = useRef(null); + useAutosizeTextArea(nameRef.current, name); + + console.log(Intl.DateTimeFormat().resolvedOptions().timeZone); + + return ( +
+ +
+