From 66b46f2f372594e08e3675478455157d8553fc73 Mon Sep 17 00:00:00 2001 From: FifthWit Date: Thu, 30 Jan 2025 10:41:25 -0600 Subject: missing useEffect dependancies --- frontend/src/components/ModMenu.tsx | 466 ++++++++++++++++++++++++------------ 1 file changed, 313 insertions(+), 153 deletions(-) (limited to 'frontend') diff --git a/frontend/src/components/ModMenu.tsx b/frontend/src/components/ModMenu.tsx index 925b8a8..f765cd8 100644 --- a/frontend/src/components/ModMenu.tsx +++ b/frontend/src/components/ModMenu.tsx @@ -1,12 +1,12 @@ -import React from 'react'; -import ReactMarkdown from 'react-markdown'; -import { useNavigate } from 'react-router-dom'; +import React from "react"; +import ReactMarkdown from "react-markdown"; +import { useNavigate } from "react-router-dom"; -import { MapSummary } from '@customTypes/Map'; -import { ModMenuContent } from '@customTypes/Content'; -import { API } from '@api/Api'; -import "@css/ModMenu.css" -import useConfirm from '@hooks/UseConfirm'; +import { MapSummary } from "@customTypes/Map"; +import { ModMenuContent } from "@customTypes/Content"; +import { API } from "@api/Api"; +import "@css/ModMenu.css"; +import useConfirm from "@hooks/UseConfirm"; interface ModMenuProps { token?: string; @@ -15,8 +15,12 @@ interface ModMenuProps { mapID: string; } -const ModMenu: React.FC = ({ token, data, selectedRun, mapID }) => { - +const ModMenu: React.FC = ({ + token, + data, + selectedRun, + mapID, +}) => { const { confirm, ConfirmDialogComponent } = useConfirm(); const [menu, setMenu] = React.useState(0); @@ -40,7 +44,7 @@ const ModMenu: React.FC = ({ token, data, selectedRun, mapID }) => function compressImage(file: File): Promise { const reader = new FileReader(); reader.readAsDataURL(file); - return new Promise(resolve => { + return new Promise((resolve) => { reader.onload = () => { const img = new Image(); if (typeof reader.result === "string") { @@ -55,74 +59,99 @@ const ModMenu: React.FC = ({ token, data, selectedRun, mapID }) => width *= 320 / height; height = 320; } - const canvas = document.createElement('canvas'); + const canvas = document.createElement("canvas"); canvas.width = width; canvas.height = height; - canvas.getContext('2d')!.drawImage(img, 0, 0, width, height); + canvas.getContext("2d")!.drawImage(img, 0, 0, width, height); resolve(canvas.toDataURL(file.type, 0.6)); }; } }; }); - }; + } const _edit_map_summary_image = async () => { - if (await confirm("Edit Map Summary Image", "Are you sure you want to submit this to the database?")) { + if ( + await confirm( + "Edit Map Summary Image", + "Are you sure you want to submit this to the database?" + ) + ) { if (token) { const success = await API.put_map_image(token, mapID, image); if (success) { navigate(0); } else { - alert("Error. Check logs.") + alert("Error. Check logs."); } } } }; const _edit_map_summary_route = async () => { - if (await confirm("Edit Map Summary Route", "Are you sure you want to submit this to the database?")) { + if ( + await confirm( + "Edit Map Summary Route", + "Are you sure you want to submit this to the database?" + ) + ) { if (token) { routeContent.date += "T00:00:00Z"; const success = await API.put_map_summary(token, mapID, routeContent); if (success) { navigate(0); } else { - alert("Error. Check logs.") + alert("Error. Check logs."); } } } }; const _create_map_summary_route = async () => { - if (await confirm("Create Map Summary Route", "Are you sure you want to submit this to the database?")) { + if ( + await confirm( + "Create Map Summary Route", + "Are you sure you want to submit this to the database?" + ) + ) { if (token) { routeContent.date += "T00:00:00Z"; const success = await API.post_map_summary(token, mapID, routeContent); if (success) { navigate(0); } else { - alert("Error. Check logs.") + alert("Error. Check logs."); } } } }; const _delete_map_summary_route = async () => { - if (await confirm("Delete Map Summary Route", `Are you sure you want to submit this to the database?\n - ${data.summary.routes[selectedRun].category.name}\n${data.summary.routes[selectedRun].history.score_count} portals\n${data.summary.routes[selectedRun].history.runner_name}`)) { + if ( + await confirm( + "Delete Map Summary Route", + `Are you sure you want to submit this to the database?\n + ${data.summary.routes[selectedRun].category.name}\n${data.summary.routes[selectedRun].history.score_count} portals\n${data.summary.routes[selectedRun].history.runner_name}` + ) + ) { if (token) { - const success = await API.delete_map_summary(token, mapID, data.summary.routes[selectedRun].route_id); + const success = await API.delete_map_summary( + token, + mapID, + data.summary.routes[selectedRun].route_id + ); if (success) { navigate(0); } else { - alert("Error. Check logs.") + alert("Error. Check logs."); } } } }; React.useEffect(() => { - if (menu === 3) { // add route + if (menu === 3) { + // add route setRouteContent({ id: 0, name: "", @@ -134,7 +163,8 @@ const ModMenu: React.FC = ({ token, data, selectedRun, mapID }) => }); setMd("No description available."); } - if (menu === 2) { // edit route + if (menu === 2) { + // edit route setRouteContent({ id: data.summary.routes[selectedRun].route_id, name: data.summary.routes[selectedRun].history.runner_name, @@ -146,207 +176,337 @@ const ModMenu: React.FC = ({ token, data, selectedRun, mapID }) => }); setMd(data.summary.routes[selectedRun].description); } - }, [menu]); + }, [menu, data.summary.routes, selectedRun]); React.useEffect(() => { - const modview = document.querySelector("div#modview") as HTMLElement + const modview = document.querySelector("div#modview") as HTMLElement; if (modview) { - showButton ? modview.style.transform = "translateY(-68%)" - : modview.style.transform = "translateY(0%)" + showButton + ? (modview.style.transform = "translateY(-68%)") + : (modview.style.transform = "translateY(0%)"); } - const modview_block = document.querySelector("#modview_block") as HTMLElement + const modview_block = document.querySelector( + "#modview_block" + ) as HTMLElement; if (modview_block) { - showButton ? modview_block.style.display = "none" : modview_block.style.display = "block" + showButton + ? (modview_block.style.display = "none") + : (modview_block.style.display = "block"); } - }, [showButton]) + }, [showButton]); return ( <> {ConfirmDialogComponent}
-
+
- +
{showButton ? ( ) : ( - + )}
-
- {// Edit Image +
+
+ { + // Edit Image menu === 1 && ( -
+
Current Image: missing
- New Image: - { - if (e.target.files) { - compressImage(e.target.files[0]) - .then(d => setImage(d)); - } - }} /> - {image ? () : } - - + + New Image: + { + if (e.target.files) { + compressImage(e.target.files[0]).then((d) => + setImage(d) + ); + } + }} + /> + + {image ? ( + + ) : ( + + )} +
- )} + ) + } - {// Edit Route + { + // Edit Route menu === 2 && ( -
-
+
+
Route ID:
-
+
Runner Name: - { - setRouteContent({ - ...routeContent, - name: e.target.value, - }); - }} /> + { + setRouteContent({ + ...routeContent, + name: e.target.value, + }); + }} + />
-
+
Score: - { - setRouteContent({ - ...routeContent, - score: parseInt(e.target.value), - }); - }} /> + { + setRouteContent({ + ...routeContent, + score: parseInt(e.target.value), + }); + }} + />
-
+
Date: - { - setRouteContent({ - ...routeContent, - date: e.target.value, - }); - }} /> + { + setRouteContent({ + ...routeContent, + date: e.target.value, + }); + }} + />
-
+
Showcase Video: - { - setRouteContent({ - ...routeContent, - showcase: e.target.value, - }); - }} /> + { + setRouteContent({ + ...routeContent, + showcase: e.target.value, + }); + }} + />
-
+
Description: -