diff --git a/src/components/NewVideoMenu.tsx b/src/components/NewVideoMenu.tsx new file mode 100644 index 0000000..f7fc03e --- /dev/null +++ b/src/components/NewVideoMenu.tsx @@ -0,0 +1,65 @@ +import { Menu, Transition } from "@headlessui/react"; +import { Fragment, useState } from "react"; +import VideoRecordModal from "~/components/VideoRecordModal"; +import VideoUploadModal from "~/components/VideoUploadModal"; + +export default function NewVideoMenu() { + const [recordOpen, setRecordOpen] = useState(false); + const [uploadOpen, setUploadOpen] = useState(false); + + return ( + <> + + + + + + New video + + + + +
+ + {({ active }) => ( +
setRecordOpen(true)} + className={`mx-2 flex h-8 w-40 cursor-pointer flex-row content-center rounded-md p-2 ${ + active ? "bg-gray-100" : "" + }`} + > +

+ Record a video +

+
+ )} +
+ + {({ active }) => ( +
setUploadOpen(true)} + className={`mx-2 flex h-8 w-40 cursor-pointer flex-row content-center rounded-md p-2 ${ + active ? "bg-gray-100" : "" + }`} + > +

+ Upload a video +

+
+ )} +
+
+
+
+
+ + ); +} diff --git a/src/components/VideoRecordModal.tsx b/src/components/VideoRecordModal.tsx index 07da247..2491374 100644 --- a/src/components/VideoRecordModal.tsx +++ b/src/components/VideoRecordModal.tsx @@ -3,16 +3,16 @@ import { Dialog, Transition } from "@headlessui/react"; const Recorder = dynamic(() => import("~/components/Recorder"), { ssr: false }); import dynamic from "next/dynamic"; -export default function VideoRecordModal() { - const [isOpen, setIsOpen] = useState(false); +interface Props { + open: boolean; + setOpen: (value: boolean) => void; +} + +export default function VideoRecordModal({ open, setOpen }: Props) { const [step, setStep] = useState<"pre" | "in" | "post">("pre"); function closeModal() { - setIsOpen(false); - } - - function openModal() { - setIsOpen(true); + setOpen(false); } const handleClose = () => { @@ -20,39 +20,30 @@ export default function VideoRecordModal() { }; return ( - <> - - New video - - - - -
-
- - - - - -
+ + +
+
+ + + + +
-
-
- +
+
+
); } diff --git a/src/components/VideoUploadModal.tsx b/src/components/VideoUploadModal.tsx index 8bf40f9..bdc69d8 100644 --- a/src/components/VideoUploadModal.tsx +++ b/src/components/VideoUploadModal.tsx @@ -4,9 +4,13 @@ import { api } from "~/utils/api"; import axios from "axios"; import { useRouter } from "next/router"; -export default function VideoUploadModal() { +interface Props { + open: boolean; + setOpen: (value: boolean) => void; +} + +export default function VideoUploadModal({ open, setOpen }: Props) { const router = useRouter(); - const [isOpen, setIsOpen] = useState(false); const [submitting, setSubmitting] = useState(false); const [file, setFile] = useState(); const getSignedUrl = api.video.getUploadUrl.useMutation(); @@ -19,11 +23,7 @@ export default function VideoUploadModal() { }; function closeModal() { - setIsOpen(false); - } - - function openModal() { - setIsOpen(true); + setOpen(false); } const handleSubmit = async (): Promise => { @@ -47,108 +47,99 @@ export default function VideoUploadModal() { }; return ( - <> - + void closeModal()} > - New video - - - - void closeModal} - > -
-
- - -
- - -
-
-
-
+ + + + +
+ + -
-
- + + + ); } diff --git a/src/pages/videos.tsx b/src/pages/videos.tsx index f5f081f..8310de6 100644 --- a/src/pages/videos.tsx +++ b/src/pages/videos.tsx @@ -9,7 +9,7 @@ import Image from "next/image"; import { getTime } from "~/utils/getTime"; import Checkout from "~/components/Checkout"; import ProfileMenu from "~/components/ProfileMenu"; -import VideoRecordModal from "~/components/VideoRecordModal"; +import NewVideoMenu from "~/components/NewVideoMenu"; const VideoList: NextPage = () => { const router = useRouter(); @@ -34,7 +34,7 @@ const VideoList: NextPage = () => { {["active", "past_due"].includes( session?.user.stripeSubscriptionStatus ?? "" ) ? ( - + ) : null} {status === "authenticated" && (