Remove old game mod management modal

This commit is contained in:
2025-10-14 02:10:07 -04:00
parent 102b29c54f
commit cf84722418
3 changed files with 6 additions and 178 deletions

View File

@@ -30,7 +30,6 @@ import { useLoaderData } from "@remix-run/react";
import AppealBans from "../../components/AppealBans.js";
import AppealCard from "../../components/AppealCard.js";
import GameAppealCard from "../../components/GameAppealCard.js";
import GameModManagementModal from "../../components/GameModManagementModal.js";
import NewGameBan from "../../components/NewGameBan.js";
import NewInfractionModal from "../../components/NewInfractionModal.js";
import ReportCard from "../../components/ReportCard.js";
@@ -151,7 +150,7 @@ export default function () {
useEffect(() => {
if (messageChannel.current) {
messageChannel.current.port1.onmessage = function (ev) {
messageChannel.current.port1.onmessage = function (ev: any) {
const { data }: { data: string } = ev;
setEntries([...entries].filter((entry) => entry.id !== data));
@@ -337,7 +336,11 @@ export default function () {
},
appeal_bans: useDisclosure(),
game_ban: useDisclosure(),
gme: useDisclosure(),
gme: {
isOpen: false,
onClose: () => {},
onOpen: () => location.assign("/gmm"),
},
inactivity: useDisclosure(),
infraction: useDisclosure(),
user_lookup: {
@@ -431,10 +434,6 @@ export default function () {
isOpen={itemModals.appeal_bans.isOpen}
onClose={itemModals.appeal_bans.onClose}
/>
<GameModManagementModal
isOpen={itemModals.gme.isOpen}
onClose={itemModals.gme.onClose}
/>
<NewGameBan
isOpen={itemModals.game_ban.isOpen}
onClose={itemModals.game_ban.onClose}

View File

@@ -1,157 +0,0 @@
import {
Button,
HStack,
Input,
Link,
Modal,
ModalBody,
ModalCloseButton,
ModalContent,
ModalHeader,
ModalOverlay,
Table,
TableContainer,
Tbody,
Td,
Th,
Thead,
Tr,
useToast,
} from "@chakra-ui/react";
import { useEffect, useState } from "react";
export default function (props: { isOpen: boolean; onClose: () => void }) {
const [mods, setMods] = useState([]);
const [userToAdd, setUserToAdd] = useState("");
const toast = useToast();
useEffect(() => {
if (!props.isOpen) return;
(async function () {
const gmeResp = await fetch("/api/gme/list");
if (!gmeResp.ok) {
toast({
description: "Failed to load GME data",
status: "error",
title: "Oops",
});
return;
}
setMods(await gmeResp.json());
})();
}, [props.isOpen]);
async function addUser() {
if (!userToAdd || !userToAdd.match(/^\d{17,19}$/)) {
toast({
description: "Please check your input and try again",
status: "error",
title: "Invalid user",
});
return;
}
const addResp = await fetch("/api/gme/add", {
body: JSON.stringify({ user: userToAdd }),
headers: {
"content-type": "application/json",
},
method: "POST",
});
if (!addResp.ok) {
toast({
description: ((await addResp.json()) as { error: string }).error,
status: "error",
title: "Oops",
});
return;
}
toast({
description: `User ${userToAdd} added`,
status: "success",
title: "Success",
});
props.onClose();
}
async function removeUser(user: string) {
const removeResp = await fetch("/api/gme/remove", {
body: JSON.stringify({ user }),
headers: {
"content-type": "application/json",
},
method: "POST",
});
if (!removeResp.ok) {
toast({
description: ((await removeResp.json()) as { error: string }).error,
status: "error",
title: "Oops",
});
} else {
toast({
description: `User ${user} removed`,
status: "success",
title: "Success",
});
setMods(mods.filter((mod: any) => mod.user !== user));
}
}
return (
<Modal isCentered isOpen={props.isOpen} onClose={props.onClose}>
<ModalOverlay />
<ModalContent>
<ModalHeader>Game Moderators</ModalHeader>
<ModalCloseButton />
<ModalBody>
<TableContainer>
<Table variant="simple">
<Thead>
<Tr>
<Th>User</Th>
<Th>Added At</Th>
<Th>Added By</Th>
<Th>Remove</Th>
</Tr>
</Thead>
<Tbody>
{mods.map((mod: any) => (
<Tr>
<Td>{mod.user}</Td>
<Td>{new Date(mod.metadata.time).toLocaleString()}</Td>
<Td>{mod.metadata.user}</Td>
<Td>
<Link onClick={async () => await removeUser(mod.user)}>
Remove
</Link>
</Td>
</Tr>
))}
</Tbody>
</Table>
</TableContainer>
<HStack mt="8px">
<Input
maxLength={19}
onChange={(e) => setUserToAdd(e.target.value)}
placeholder="1234567890987654321"
/>
<Button onClick={async () => await addUser()}>Add</Button>
</HStack>
</ModalBody>
</ModalContent>
</Modal>
);
}

View File

@@ -1,14 +0,0 @@
import { jsonResponse } from "../../common.js";
export async function onRequestGet(context: RequestContext) {
const list = await context.env.DATA.list({ prefix: "gamemod_" });
const entries = [];
for (const key of list.keys)
entries.push({
metadata: key.metadata,
user: key.name.replace("gamemod_", ""),
});
return jsonResponse(JSON.stringify(entries));
}