import { Button, Group, Menu } from "@mantine/core"; import { useModals } from "@mantine/modals"; import { useRouter } from "next/router"; import { useContext, useState } from "react"; import { Link, Mail } from "tabler-icons-react"; import Dropzone from "../components/upload/Dropzone"; import FileList from "../components/upload/FileList"; import showCompletedUploadModal from "../components/upload/showCompletedUploadModal"; import showCreateUploadModal from "../components/upload/showCreateUploadModal"; import { FileUpload } from "../types/File.type"; import aw from "../utils/appwrite.util"; import { IsSignedInContext } from "../utils/auth.util"; import toast from "../utils/toast.util"; const Upload = () => { const router = useRouter(); const modals = useModals(); const isSignedIn = useContext(IsSignedInContext); const [files, setFiles] = useState([]); const [isUploading, setisUploading] = useState(false); const uploadFiles = async ( id: string, expiration: number, security: { password?: string; maxVisitors?: number } ) => { setisUploading(true); const bucketId = JSON.parse( ( await aw.functions.createExecution( "createShare", JSON.stringify({ id, security, expiration }), false ) ).stdout ).id; for (let i = 0; i < files.length; i++) { files[i].uploadingState = "inProgress"; setFiles([...files]); aw.storage.createFile(bucketId, "unique()", files[i]).then( async () => { files[i].uploadingState = "finished"; setFiles([...files]); if (!files.some((f) => f.uploadingState == "inProgress")) { await aw.functions.createExecution( "finishShare", JSON.stringify({ id }), false ), setisUploading(false); showCompletedUploadModal( modals, `${window.location.origin}/share/${bucketId}`, new Date(Date.now()).toLocaleString() ); } }, (error) => { files[i].uploadingState = undefined; toast.error(error.message); setisUploading(false); } ); } }; if (!isSignedIn) { router.replace("/"); } else { return ( <>
Share } transition="pop-top-right" placement="end" size="lg" > } onClick={() => showCreateUploadModal(modals, uploadFiles)} > Share with link }> Share with email
{files.length > 0 && } ); } }; export default Upload;