diff --git a/src/components/Recorder.tsx b/src/components/Recorder.tsx index f2707e6..7e52809 100644 --- a/src/components/Recorder.tsx +++ b/src/components/Recorder.tsx @@ -12,7 +12,19 @@ import { useRouter } from "next/router"; import { api } from "~/utils/api"; import fixWebmDuration from "fix-webm-duration"; -export default function Recorder() { +interface Props { + closeModal: () => void; + step: string; + setStep: ( + value: + | ((prevState: "pre" | "in" | "post") => "pre" | "in" | "post") + | "pre" + | "in" + | "post" + ) => void; +} + +export default function Recorder({ closeModal, step, setStep }: Props) { const [steam, setStream] = useState(null); const [blob, setBlob] = useState(null); const refVideo = useRef(null); @@ -22,7 +34,6 @@ export default function Recorder() { const [selectedDevice, setSelectedDevice] = useState( null ); - const [step, setStep] = useState<"pre" | "in" | "post">("pre"); const router = useRouter(); const [submitting, setSubmitting] = useState(false); const apiUtils = api.useContext(); @@ -84,6 +95,9 @@ export default function Recorder() { recorderRef.current.stopRecording(() => { steam?.getTracks().map((track) => track.stop()); }); + + closeModal(); + setStep("pre"); }; const handlePause = () => { @@ -262,7 +276,7 @@ export default function Recorder() { controls autoPlay ref={refVideo} - style={{ width: "700px", margin: "1em" }} + className="mb-4 w-[75vw]" /> )}
@@ -307,6 +321,13 @@ export default function Recorder() { <>Upload )} +
) : null} diff --git a/src/components/VideoRecordModal.tsx b/src/components/VideoRecordModal.tsx new file mode 100644 index 0000000..07da247 --- /dev/null +++ b/src/components/VideoRecordModal.tsx @@ -0,0 +1,58 @@ +import { Fragment, useState } from "react"; +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); + const [step, setStep] = useState<"pre" | "in" | "post">("pre"); + + function closeModal() { + setIsOpen(false); + } + + function openModal() { + setIsOpen(true); + } + + const handleClose = () => { + if (step === "pre") closeModal(); + }; + + return ( + <> + + New video + + + + +
+
+ + + + + +
+
+
+
+ + ); +} diff --git a/src/components/VideoUploadModal.tsx b/src/components/VideoUploadModal.tsx index 8dc0450..8bf40f9 100644 --- a/src/components/VideoUploadModal.tsx +++ b/src/components/VideoUploadModal.tsx @@ -3,8 +3,6 @@ import { Dialog, Transition } from "@headlessui/react"; import { api } from "~/utils/api"; import axios from "axios"; import { useRouter } from "next/router"; -const Recorder = dynamic(() => import("~/components/Recorder"), { ssr: false }); -import dynamic from "next/dynamic"; export default function VideoUploadModal() { const router = useRouter(); @@ -74,81 +72,77 @@ export default function VideoUploadModal() { leaveFrom="opacity-100 scale-100" leaveTo="opacity-0 scale-95" > - - {1 + 1 === 2 ? ( - - ) : ( -
- - -
- )} + + + + +
diff --git a/src/pages/videos.tsx b/src/pages/videos.tsx index 51b6568..f5f081f 100644 --- a/src/pages/videos.tsx +++ b/src/pages/videos.tsx @@ -6,10 +6,10 @@ import Link from "next/link"; import { useSession } from "next-auth/react"; import { useRouter } from "next/router"; import Image from "next/image"; -import VideoUploadModal from "~/components/VideoUploadModal"; import { getTime } from "~/utils/getTime"; import Checkout from "~/components/Checkout"; import ProfileMenu from "~/components/ProfileMenu"; +import VideoRecordModal from "~/components/VideoRecordModal"; const VideoList: NextPage = () => { const router = useRouter(); @@ -34,7 +34,7 @@ const VideoList: NextPage = () => { {["active", "past_due"].includes( session?.user.stripeSubscriptionStatus ?? "" ) ? ( - + ) : null} {status === "authenticated" && (