import { type ChangeEvent, Fragment, useState } from "react"; import { Dialog, Transition } from "@headlessui/react"; import { api } from "~/utils/api"; import axios from "axios"; import { useRouter } from "next/router"; export default function VideoUploadModal() { const router = useRouter(); const [isOpen, setIsOpen] = useState(false); const [submitting, setSubmitting] = useState(false); const [file, setFile] = useState(); const getSignedUrl = api.video.getUploadUrl.useMutation(); const apiUtils = api.useContext(); const handleFileChange = (e: ChangeEvent): void => { if (e.target.files) { setFile(e.target.files[0]); } }; function closeModal() { setIsOpen(false); } function openModal() { setIsOpen(true); } const handleSubmit = async (): Promise => { if (!file) return; setSubmitting(true); const { signedUrl, id } = await getSignedUrl.mutateAsync({ key: file.name, }); await axios .put(signedUrl, file.slice(), { headers: { "Content-Type": file.type }, }) .then(() => { void router.push("share/" + id); }) .catch((err) => { console.error(err); }); setSubmitting(false); void apiUtils.video.getAll.invalidate(); }; return ( <> New video
); }