From 5a2c8a8936466853c18e2b0af4ed7fec129b8744 Mon Sep 17 00:00:00 2001 From: Mattrixwv Date: Mon, 10 Mar 2025 20:30:39 -0400 Subject: [PATCH] Raid Request button working --- src/interface/GamePermission.ts | 11 ++++++++++ src/interface/RaidGroupPermission.ts | 9 ++++++++ src/providers/AuthProvider.tsx | 24 +++++++++++++++++++--- src/ui/calendar/RaidGroupHeader.tsx | 2 ++ src/ui/raidGroup/RaidGroupAdminButtons.tsx | 23 +++++++++++++++++++-- src/ui/raidGroup/RaidGroupsList.tsx | 16 +++++++++++++++ src/util/PermissionUtil.ts | 21 +++++++++++++++++++ 7 files changed, 101 insertions(+), 5 deletions(-) create mode 100644 src/interface/GamePermission.ts create mode 100644 src/interface/RaidGroupPermission.ts create mode 100644 src/util/PermissionUtil.ts diff --git a/src/interface/GamePermission.ts b/src/interface/GamePermission.ts new file mode 100644 index 0000000..426e021 --- /dev/null +++ b/src/interface/GamePermission.ts @@ -0,0 +1,11 @@ +export enum GamePermissionType { + ADMIN = "ADMIN" +} + + +export interface GamePermission { + gamePermissionId?: string; + accountId: string; + gameId: string; + gamePermissionType: GamePermissionType; +} diff --git a/src/interface/RaidGroupPermission.ts b/src/interface/RaidGroupPermission.ts new file mode 100644 index 0000000..7f13ec9 --- /dev/null +++ b/src/interface/RaidGroupPermission.ts @@ -0,0 +1,9 @@ +import { RaidGroupPermissionType } from "./RaidGroup"; + + +export interface RaidGroupPermission { + raidGroupPermissionId?: string; + accountId: string; + raidGroupId: string; + permission: RaidGroupPermissionType; +} diff --git a/src/providers/AuthProvider.tsx b/src/providers/AuthProvider.tsx index 2203906..a6cb425 100644 --- a/src/providers/AuthProvider.tsx +++ b/src/providers/AuthProvider.tsx @@ -1,3 +1,6 @@ +import { GamePermission } from "@/interface/GamePermission"; +import { RaidGroupPermission } from "@/interface/RaidGroupPermission"; +import { RaidGroupRequest } from "@/interface/RaidGroupRequest"; import { api } from "@/util/AxiosUtil"; import { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useState } from "react"; import { Navigate, Outlet } from "react-router"; @@ -15,6 +18,9 @@ type AuthProviderState = { expiration: Date | null; setExpiration: (expiration: Date | null) => void; accountId: string | null; + raidGroupPermissions: RaidGroupPermission[]; + gamePermissions: GamePermission[]; + raidGroupRequests: RaidGroupRequest[]; } const initialState: AuthProviderState = { @@ -22,7 +28,10 @@ const initialState: AuthProviderState = { setJwt: () => null, expiration: null, setExpiration: () => null, - accountId: null + accountId: null, + raidGroupPermissions: [], + gamePermissions: [], + raidGroupRequests: [] } const AuthContext = createContext(initialState); @@ -35,6 +44,9 @@ export function AuthProvider({ const [ expiration, setExpiration ] = useState(null); const [ firstFetch, setFirstFetch ] = useState(true); const [ accountId, setAccountId ] = useState(null); + const [ raidGroupPermissions, setRaidGroupPermissions ] = useState([]); + const [ gamePermissions, setGamePermissions ] = useState([]); + const [ raidGroupRequests, setRaidGroupRequests ] = useState([]); const fetchToken = useCallback(async () => { @@ -50,6 +62,9 @@ export function AuthProvider({ setExpiration(new Date(decodedToken.exp * 1000)); setFirstFetch(false); setAccountId(decodedToken.accountId); + setRaidGroupPermissions(JSON.parse(decodedToken.raidGroupPermissions)); + setGamePermissions(JSON.parse(decodedToken.gamePermissions)); + setRaidGroupRequests(JSON.parse(decodedToken.raidGroupRequests)); return response.data.token; } //If the token cannot be retrieved @@ -98,8 +113,11 @@ export function AuthProvider({ setJwt, expiration, setExpiration, - accountId - }), [ jwt, setJwt, expiration, setExpiration, accountId ]); + accountId, + raidGroupPermissions, + gamePermissions, + raidGroupRequests + }), [ jwt, setJwt, expiration, setExpiration, accountId, raidGroupPermissions, gamePermissions, raidGroupRequests ]); //TODO: Return a spinner while the first token is being fetched diff --git a/src/ui/calendar/RaidGroupHeader.tsx b/src/ui/calendar/RaidGroupHeader.tsx index 7a413f3..2611cc1 100644 --- a/src/ui/calendar/RaidGroupHeader.tsx +++ b/src/ui/calendar/RaidGroupHeader.tsx @@ -42,6 +42,8 @@ export default function RaidGroupHeader({ buttonProps={buttonProps} showEditRaidGroupModal={() => setDisplayEditRaidGroupModal(true)} showDeleteRaidGroupModal={() => setDisplayDeleteRaidGroupModal(true)} + hasRaidGroupPermissions={true} + hasRaidGroupRequest={false} /> void; showEditRaidGroupModal: () => void; showDeleteRaidGroupModal: () => void; + hasRaidGroupPermissions: boolean; + hasRaidGroupRequest: boolean; }){ return (
+ { + !hasRaidGroupPermissions && + + + + } (); + const [ displayRaidGroupRequestModal, setDisplayRaidGroupRequestModal ] = useState(false); const [ displayEditRaidGroupModal, setDisplayEditRaidGroupModal ] = useState(false); const [ displayDeleteRaidGroupModal, setDisplayDeleteRaidGroupModal ] = useState(false); + const { raidGroupPermissions, raidGroupRequests } = useAuth(); const buttonProps: ButtonProps = { @@ -69,6 +74,10 @@ export default function RaidGroupsList({
{ + setSelectedRaidGroup(raidGroup); + setDisplayRaidGroupRequestModal(true); + }} showEditRaidGroupModal={() => { setSelectedRaidGroup(raidGroup); setDisplayEditRaidGroupModal(true); @@ -77,6 +86,8 @@ export default function RaidGroupsList({ setSelectedRaidGroup(raidGroup); setDisplayDeleteRaidGroupModal(true); }} + hasRaidGroupPermissions={containsRaidGroupPermission(raidGroup.raidGroupId ?? "", raidGroupPermissions)} + hasRaidGroupRequest={containsRaidGroupRequest(raidGroup.raidGroupId ?? "", raidGroupRequests)} /> ]); @@ -88,6 +99,11 @@ export default function RaidGroupsList({ tableHeadElements={headElements} tableBodyElements={bodyElements} /> + {setDisplayRaidGroupRequestModal(false); setSelectedRaidGroup(undefined);}} + raidGroupId={selectedRaidGroup?.raidGroupId ?? ""} + /> {setDisplayEditRaidGroupModal(false); setSelectedRaidGroup(undefined);}} diff --git a/src/util/PermissionUtil.ts b/src/util/PermissionUtil.ts new file mode 100644 index 0000000..e35e7aa --- /dev/null +++ b/src/util/PermissionUtil.ts @@ -0,0 +1,21 @@ +import { RaidGroupPermission } from "@/interface/RaidGroupPermission"; +import { RaidGroupRequest } from "@/interface/RaidGroupRequest"; + + +export function containsRaidGroupPermission(raidGroupId: string, permissions: RaidGroupPermission[]): boolean{ + for(const permission of permissions){ + if(permission.raidGroupId === raidGroupId){ + return true; + } + } + return false; +} + +export function containsRaidGroupRequest(raidGroupId: string, requests: RaidGroupRequest[]){ + for(const request of requests){ + if(request.raidGroupId === raidGroupId){ + return true; + } + } + return false; +}