aboutsummaryrefslogtreecommitdiffstats
path: root/frontend/src/pages
diff options
context:
space:
mode:
authorPinapelz <yukais@pinapelz.com>2025-07-07 01:07:34 -0700
committerPinapelz <yukais@pinapelz.com>2025-07-07 01:07:41 -0700
commit7fe146f97ddd3f5a8d0c1a996a73cb296c28b9cc (patch)
tree916d2645c6332fe582ca62572a497724e1c8474a /frontend/src/pages
parent152894146b72830e48e800721ea6160228a9bdc1 (diff)
implement score deletion
Diffstat (limited to 'frontend/src/pages')
-rw-r--r--frontend/src/pages/Game.tsx0
-rw-r--r--frontend/src/pages/Score.tsx32
2 files changed, 30 insertions, 2 deletions
diff --git a/frontend/src/pages/Game.tsx b/frontend/src/pages/Game.tsx
deleted file mode 100644
index e69de29..0000000
--- a/frontend/src/pages/Game.tsx
+++ /dev/null
diff --git a/frontend/src/pages/Score.tsx b/frontend/src/pages/Score.tsx
index e32f001..0d18d7a 100644
--- a/frontend/src/pages/Score.tsx
+++ b/frontend/src/pages/Score.tsx
@@ -5,7 +5,6 @@ import { NavBar } from "../components/NavBar";
import SessionExpiredPopup from "../components/SessionExpiredPopup";
import ScoreDisplay from "../components/displays/GenericScoreDisplay";
import DancerushScoreDisplay from "../components/displays/DancerushScoreDisplay";
-// TODO: selector for PB/Recent
type SortField = string;
type SortDirection = "asc" | "desc";
@@ -79,7 +78,7 @@ const Score = () => {
url.searchParams.append("sortKey", requestOrder);
url.searchParams.append("direction", "asc");
- const response = await fetch(url.toString());
+ const response = await fetch(url.toString(), {credentials: 'include'});
if (!response.ok) throw new Error("Failed to fetch scores");
const data = await response.json();
const flattened = data.scores.map(flattenScoreData);
@@ -96,6 +95,33 @@ const Score = () => {
[user, gameName, requestOrder],
);
+ const handleDeleteScore = async (scoreId: number) => {
+ if (!user) return;
+
+ if (!confirm("Are you sure you want to delete this score? This action cannot be undone.")) {
+ return;
+ }
+
+ try {
+ const url = new URL(import.meta.env.VITE_API_URL + "/scores");
+ url.searchParams.append("userId", user.id);
+ url.searchParams.append("internalGameName", gameName);
+ url.searchParams.append("scoreId", scoreId.toString());
+
+ const response = await fetch(url.toString(), {
+ method: "DELETE",
+ credentials: "include",
+ });
+
+ if (!response.ok) throw new Error("Failed to delete score");
+
+ await fetchScores(currentPage);
+ } catch (error) {
+ console.error("Failed to delete score:", error);
+ alert("Failed to delete score. Please try again.");
+ }
+ };
+
useEffect(() => {
if (user) fetchScores(1);
}, [user, fetchScores]);
@@ -175,6 +201,7 @@ const Score = () => {
sortField={sortField}
sortDirection={sortDirection}
onSort={handleSort}
+ onDelete={handleDeleteScore}
/>
);
default:
@@ -185,6 +212,7 @@ const Score = () => {
sortField={sortField}
sortDirection={sortDirection}
onSort={handleSort}
+ onDelete={handleDeleteScore}
/>
);
}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage