From e757f7cfd82f636862280b0b8e3be8164231f10c Mon Sep 17 00:00:00 2001 From: MarconLP <13001502+MarconLP@users.noreply.github.com> Date: Wed, 19 Apr 2023 00:09:41 +0200 Subject: [PATCH] add in-recording step buttons --- src/components/Recorder.tsx | 121 +++++++++++++++++----------- src/components/VideoUploadModal.tsx | 8 +- 2 files changed, 80 insertions(+), 49 deletions(-) diff --git a/src/components/Recorder.tsx b/src/components/Recorder.tsx index e3b269b..5a28dc1 100644 --- a/src/components/Recorder.tsx +++ b/src/components/Recorder.tsx @@ -2,6 +2,9 @@ import React, { useState, useRef, Fragment, useEffect } from "react"; import RecordRTC, { invokeSaveAsDialog } from "recordrtc"; import { Listbox, Transition } from "@headlessui/react"; import { CheckIcon, ChevronUpDownIcon } from "@heroicons/react/20/solid"; +import { MicrophoneIcon, PauseIcon } from "@heroicons/react/24/outline"; +import { TrashIcon } from "@radix-ui/react-icons"; +import { StopIcon } from "@heroicons/react/24/solid"; export default function Recorder() { const [steam, setStream] = useState(null); @@ -13,6 +16,7 @@ export default function Recorder() { const [selectedDevice, setSelectedDevice] = useState( null ); + const [step, setStep] = useState<"pre" | "in" | "post">("pre"); const handleRecording = async () => { const screenStream = await navigator.mediaDevices.getDisplayMedia({ @@ -41,6 +45,8 @@ export default function Recorder() { setStream(mediaStream); recorderRef.current = new RecordRTC(mediaStream, { type: "video" }); recorderRef.current.startRecording(); + + setStep("in"); }; const handleStop = () => { @@ -53,6 +59,14 @@ export default function Recorder() { }); }; + const handleDelete = () => { + if (recorderRef.current === null) return; + setBlob(null); + recorderRef.current.stopRecording(() => { + steam?.getTracks().map((track) => track.stop()); + }); + }; + const handlePause = () => { if (recorderRef.current) { console.log(recorderRef.current?.state); @@ -89,40 +103,16 @@ export default function Recorder() { }; return ( -
-
- - - - -
+
+ {step === "pre" ? ( +
- + + @@ -144,10 +137,8 @@ export default function Recorder() { - `relative cursor-default select-none py-2 pl-10 pr-4 ${ - active - ? "bg-amber-100 text-amber-900" - : "text-gray-900" + `relative cursor-default select-none py-2 pl-10 pr-4 text-gray-900 ${ + active ? "bg-gray-200" : "" }` } value={audioDevice} @@ -177,17 +168,53 @@ export default function Recorder() {
+
- {blob && ( -
+ ) : null} + {step === "in" ? ( +
+
+
+
+
+
+
+
+
+ ) : null} + {step === "post" ? ( +
+ post recording + {blob && ( +
+ ) : null}
); } diff --git a/src/components/VideoUploadModal.tsx b/src/components/VideoUploadModal.tsx index b87b4d0..0257b43 100644 --- a/src/components/VideoUploadModal.tsx +++ b/src/components/VideoUploadModal.tsx @@ -58,7 +58,11 @@ export default function VideoUploadModal() { - + void closeModal} + > - + {1 + 1 === 2 ? ( ) : (