Make punishment buttons work

This commit is contained in:
regalijan 2023-10-19 16:50:54 -04:00
parent 0a3bbf28ee
commit 8d041df174
Signed by: regalijan
GPG Key ID: 5D4196DA269EF520

View File

@ -12,34 +12,62 @@ import {
Spacer, Spacer,
Stack, Stack,
Text, Text,
useToast
} from "@chakra-ui/react"; } from "@chakra-ui/react";
import { useState } from "react"; import { useState } from "react";
export default function(props: ReportCardProps) { export default function(props: ReportCardProps) {
const [attachmentIdx, setAttachmentIdx] = useState(0); const [attachmentIdx, setAttachmentIdx] = useState(0);
const toast = useToast();
const targetMap: { [k: number]: string } = {}; const targetMap: { [k: number]: string } = {};
const [attachmentsReady, setAttachmentReady] = useState( const [attachmentsReady, setAttachmentReady] = useState(
!props.attachments_loading, !props.attachments_loading
); );
const actionMap: { [k: number]: number } = {}; const actionMap: { [k: number]: number } = {};
for (let i = 0; i < props.target_ids.length; i++) for (let i = 0; i < props.target_ids.length; i++)
Object.defineProperty(targetMap, props.target_ids[i], { Object.defineProperty(targetMap, props.target_ids[i], {
value: props.target_usernames[i], value: props.target_usernames[i]
}); });
async function recheckAttachment() { async function recheckAttachment() {
const attachmentCheck = await fetch("/api/uploads/status", { const attachmentCheck = await fetch("/api/uploads/status", {
body: JSON.stringify(props.attachments), body: JSON.stringify(props.attachments),
headers: { headers: {
"content-type": "application/json", "content-type": "application/json"
}, },
method: "POST", method: "POST"
}); });
setAttachmentReady(attachmentCheck.ok); setAttachmentReady(attachmentCheck.ok);
} }
async function submitActions() {
const submitReq = await fetch(`/api/reports/${props.id}/action`, {
body: JSON.stringify(actionMap),
headers: {
"content-type": "application/json"
},
method: "POST"
});
if (!submitReq.ok) {
toast({
description: (await submitReq.json() as { error: string }).error,
status: "error",
title: "S̸̯̜̈́o̴̳̅̾̏̽m̴͔͕̈́̋ē̴̙͓̯̍̃ț̸͖̘̀h̶̛̳̝̐i̵̋͘͜ņ̷̙̤͌g̴̭̻̓̈́ ̴̘͍̦̪̆w̸̡̏̑̊é̸̠̖̹̂͜n̴̖̳̤̕t̴͚̊̊̕ ̸̛͙̺̬̎́w̴͈͑̋͊r̷̢̛o̵̱̩̍͋ͅṇ̸̝̰̮́g̵̡̢̦͕͂"
});
return;
}
toast({
description: "Actions were successfully applied",
status: "success",
title: "Success"
});
}
return ( return (
<Card key={props.id} w="100%"> <Card key={props.id} w="100%">
<CardHeader> <CardHeader>
@ -135,7 +163,7 @@ export default function (props: ReportCardProps) {
name={props.target_ids[i].toString()} name={props.target_ids[i].toString()}
onChange={(val) => { onChange={(val) => {
Object.defineProperty(actionMap, props.target_ids[i], { Object.defineProperty(actionMap, props.target_ids[i], {
value: parseInt(val), value: parseInt(val)
}); });
}} }}
> >
@ -151,7 +179,7 @@ export default function (props: ReportCardProps) {
Ban Ban
</Radio> </Radio>
</Stack> </Stack>
</RadioGroup>, </RadioGroup>
); );
} }