From 3ee18a8cb3a2893f552275c35b0724daf4b8ab69 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Tue, 22 Oct 2024 12:23:35 +0300 Subject: frontend: await message --- frontend/src/components/UploadRunDialog.tsx | 22 ++++++++-------------- frontend/src/hooks/UseConfirm.tsx | 2 +- frontend/src/hooks/UseMessage.tsx | 8 +++++++- frontend/src/pages/Profile.tsx | 6 +++--- 4 files changed, 19 insertions(+), 19 deletions(-) (limited to 'frontend/src') diff --git a/frontend/src/components/UploadRunDialog.tsx b/frontend/src/components/UploadRunDialog.tsx index 0476d6f..a1bebd6 100644 --- a/frontend/src/components/UploadRunDialog.tsx +++ b/frontend/src/components/UploadRunDialog.tsx @@ -19,12 +19,9 @@ interface UploadRunDialogProps { const UploadRunDialog: React.FC = ({ token, open, onClose, games }) => { - const [confirmMessage, setConfirmMessage] = React.useState("Are you sure you want to upload this demo?"); - const { message, MessageDialogComponent } = useMessage(); const { confirm, ConfirmDialogComponent } = useConfirm(); - const navigate = useNavigate(); const [uploadRunContent, setUploadRunContent] = React.useState({ @@ -95,42 +92,39 @@ const UploadRunDialog: React.FC = ({ token, open, onClose, if (token) { if (games[selectedGameID].is_coop) { if (uploadRunContent.host_demo === null) { - message("Error", "You must select a host demo to upload.") + await message("Error", "You must select a host demo to upload.") return } else if (uploadRunContent.partner_demo === null) { - message("Error", "You must select a partner demo to upload.") + await message("Error", "You must select a partner demo to upload.") return } } else { if (uploadRunContent.host_demo === null) { - message("Error", "You must select a demo to upload.") + await message("Error", "You must select a demo to upload.") return } } const demo = SourceDemoParser.default() .setOptions({ packets: true, header: true }) .parse(await uploadRunContent.host_demo.arrayBuffer()); - const scoreboard = demo.findPacket((message) => { - return message instanceof NetMessages.SvcUserMessage && message.userMessage instanceof ScoreboardTempUpdate; + const scoreboard = demo.findPacket((msg) => { + return msg instanceof NetMessages.SvcUserMessage && msg.userMessage instanceof ScoreboardTempUpdate; }) if (!scoreboard) { - message("Error", "Error while processing demo: Unable to get scoreboard result. Either there is a demo that is corrupt or haven't been recorded in challenge mode.") + await message("Error", "Error while processing demo: Unable to get scoreboard result. Either there is a demo that is corrupt or haven't been recorded in challenge mode.") return } const { portalScore, timeScore } = scoreboard.userMessage?.as() ?? {}; - console.log(`Map Name: ${demo.mapName}. Portal Count: ${portalScore}. Ticks: ${timeScore}.`); - - setConfirmMessage(`Map Name: ${demo.mapName}\nPortal Count: ${portalScore}\nTicks: ${timeScore}\n\nAre you sure you want to upload this demo?`) - const userConfirmed = await confirm("Upload demo?", confirmMessage); + const userConfirmed = await confirm("Upload Record", `Map Name: ${demo.mapName}\nPortal Count: ${portalScore}\nTicks: ${timeScore}\n\nAre you sure you want to upload this demo?`); if (!userConfirmed) { return; } const response = await API.post_record(token, uploadRunContent); - message("Message", response); + await message("Upload Record", response); // navigate(0); onClose(); } diff --git a/frontend/src/hooks/UseConfirm.tsx b/frontend/src/hooks/UseConfirm.tsx index 80a0d51..9a7853b 100644 --- a/frontend/src/hooks/UseConfirm.tsx +++ b/frontend/src/hooks/UseConfirm.tsx @@ -3,9 +3,9 @@ import ConfirmDialog from '../components/ConfirmDialog'; const useConfirm = () => { const [isOpen, setIsOpen] = useState(false); - const [resolvePromise, setResolvePromise] = useState<((value: boolean) => void) | null>(null); const [title, setTitle] = useState(""); const [subtitle, setSubtitle] = useState(""); + const [resolvePromise, setResolvePromise] = useState<((value: boolean) => void) | null>(null); const confirm = ( titleN: string, subtitleN: string ) => { setIsOpen(true); diff --git a/frontend/src/hooks/UseMessage.tsx b/frontend/src/hooks/UseMessage.tsx index 249a3bf..0d2799c 100644 --- a/frontend/src/hooks/UseMessage.tsx +++ b/frontend/src/hooks/UseMessage.tsx @@ -3,18 +3,24 @@ import MessageDialog from "../components/MessageDialog"; const useMessage = () => { const [isOpen, setIsOpen] = useState(false); - const [title, setTitle] = useState(""); const [subtitle, setSubtitle] = useState(""); + const [resolvePromise, setResolvePromise] = useState<(() => void) | null>(null); const message = (title: string, subtitle: string) => { setIsOpen(true); setTitle(title); setSubtitle(subtitle); + return new Promise((resolve) => { + setResolvePromise(() => resolve); + }) }; const handleClose = () => { setIsOpen(false); + if (resolvePromise) { + setResolvePromise(null); + } }; const MessageDialogComponent = isOpen && ( diff --git a/frontend/src/pages/Profile.tsx b/frontend/src/pages/Profile.tsx index 7559c77..05f372e 100644 --- a/frontend/src/pages/Profile.tsx +++ b/frontend/src/pages/Profile.tsx @@ -63,7 +63,7 @@ const Profile: React.FC = ({ profile, token, gameData, onDeleteRec }; const _delete_submission = async (map_id: number, record_id: number) => { - const userConfirmed = await confirm("Delete record?", "This action cannot be undone"); + const userConfirmed = await confirm("Delete Record", "Are you sure you want to delete this record?"); if (!userConfirmed) { return; @@ -71,9 +71,9 @@ const Profile: React.FC = ({ profile, token, gameData, onDeleteRec const api_success = await API.delete_map_record(token!, map_id, record_id); if (api_success) { - message("Success", "Successfully deleted record"); + await message("Delete Record", "Successfully deleted record."); } else { - message("Error", "Could not delete record"); + await message("Delete Record", "Could not delete record."); } }; -- cgit v1.2.3