From 0c74d10a7b5671ac9ab70836efb148a7cf874f9d Mon Sep 17 00:00:00 2001 From: Regalijan Date: Tue, 27 Feb 2024 16:26:32 -0500 Subject: [PATCH] Add point editing support --- app/routes/et-members.tsx | 113 +++++++++++++++++++++++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-) diff --git a/app/routes/et-members.tsx b/app/routes/et-members.tsx index c7f9fb8..3f4e7f2 100644 --- a/app/routes/et-members.tsx +++ b/app/routes/et-members.tsx @@ -1,8 +1,21 @@ import { useLoaderData } from "@remix-run/react"; import { + Button, Container, Heading, Link, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalHeader, + ModalOverlay, + NumberDecrementStepper, + NumberIncrementStepper, + NumberInput, + NumberInputField, + NumberInputStepper, Table, TableCaption, TableContainer, @@ -11,6 +24,8 @@ import { Th, Thead, Tr, + useDisclosure, + useToast, } from "@chakra-ui/react"; import { useState } from "react"; @@ -42,6 +57,8 @@ export async function loader({ context }: { context: RequestContext }) { } export default function () { + const toast = useToast(); + async function removeMember(id: string) { await fetch("/api/events-team/team-members/user", { body: JSON.stringify({ id }), @@ -55,10 +72,91 @@ export default function () { } const [realtimePoints, setRealtimePoints] = useState(0); + const [currentModalMember, setModalMember] = useState(""); const [memberData, setMemberData] = useState(useLoaderData()); + const { isOpen, onClose, onOpen } = useDisclosure(); + const isManagement = Math.round(Math.random()) === 1; + + async function updatePoints(id: string, points: number) { + const updateResp = await fetch(`/api/events-team/points/${id}`, { + body: JSON.stringify({ points }), + headers: { + "content-type": "application/json", + }, + method: "POST", + }); + + if (!updateResp.ok) { + toast({ + description: "Failed to update points", + status: "error", + title: "Oops!", + }); + + return; + } + + toast({ + description: `Point count changed to ${points}`, + status: "success", + title: "Points updated", + }); + + const newMemberData = memberData; + newMemberData[memberData.findIndex((m) => m.id === id)].points = points; + + setMemberData(newMemberData); + } return ( + { + setRealtimePoints(0); + onClose(); + }} + > + + + Modify Points + + + setRealtimePoints(parseInt(n))} + pt="8px" + > + + + + + + + + {isManagement ? ( + + + + + ) : null} + + Events Team Members @@ -80,7 +178,20 @@ export default function () { - +
{member.id} {member.name} {member.roblox_id}{member.points} + {isManagement ? ( + { + setModalMember(member.id); + onOpen(); + }} + > + {member.points} + + ) : ( + member.points + )} + removeMember(member.id)}> Remove