Requests tab working

This commit is contained in:
2025-03-10 19:19:48 -04:00
parent 65fb3479fd
commit 439e82b821
17 changed files with 595 additions and 22 deletions

View File

@@ -285,14 +285,14 @@ export function useDeleteAccount(accountId: string){
} }
export function UseRemoveAccountFromRaidGroup(raidGroupId?: string, accountId?: string){ export function useRemoveAccountFromRaidGroup(raidGroupId?: string, accountId?: string){
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation({ return useMutation({
mutationKey: ["removeAccountFromRaidGroup", raidGroupId, accountId], mutationKey: ["removeAccountFromRaidGroup", raidGroupId, accountId],
mutationFn: async () => { mutationFn: async () => {
const response = await api.delete(`/account/raidGroup/${raidGroupId}/permissions/${accountId}`); const response = await api.delete(`/account/${accountId}/raidGroup/${raidGroupId}/permission`);
if(response.status !== 200){ if(response.status !== 200){
throw new Error("Failed to remove account from raid group"); throw new Error("Failed to remove account from raid group");

View File

@@ -109,7 +109,6 @@ export function useUpdateClassGroup(raidGroupId: string){
return useMutation({ return useMutation({
mutationKey: ["updateClassGroup"], mutationKey: ["updateClassGroup"],
mutationFn: async ({classGroup, gameClassIds}:{classGroup: ClassGroup; gameClassIds: string[];}) => { mutationFn: async ({classGroup, gameClassIds}:{classGroup: ClassGroup; gameClassIds: string[];}) => {
console.log("Hit");
const response = await api.put(`/raidGroup/${raidGroupId}/classGroup/${classGroup.classGroupId}`, const response = await api.put(`/raidGroup/${raidGroupId}/classGroup/${classGroup.classGroupId}`,
{ {
classGroup, classGroup,

View File

@@ -0,0 +1,124 @@
import { RaidGroupPermissionType } from "@/interface/RaidGroup";
import { RaidGroupRequest } from "@/interface/RaidGroupRequest";
import { api } from "@/util/AxiosUtil";
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
export function useGetRaidGroupRequests(raidGroupId: string, page: number, pageSize: number, searchTerm?: string){
const searchParams = new URLSearchParams();
searchParams.append("page", page.toString());
searchParams.append("pageSize", pageSize.toString());
if(searchTerm){
searchParams.append("searchTerm", searchTerm);
}
return useQuery({
queryKey: ["raidGroupRequest", raidGroupId, {page, pageSize, searchTerm}],
queryFn: async () => {
const response = await api.get(`/raidGroup/${raidGroupId}/raidGroupRequest?${searchParams}`);
if(response.status !== 200){
throw new Error("Failed to get raid group requests");
}
else if(response.data.errors){
throw new Error(response.data.errors.join(", "));
}
return response.data as RaidGroupRequest[];
},
enabled: !!raidGroupId && raidGroupId !== ""
});
}
export function useGetRaidGroupRequestCount(raidGroupId?: string, searchTerm?: string){
const searchParams = new URLSearchParams();
if(searchTerm){
searchParams.append("searchTerm", searchTerm);
}
return useQuery({
queryKey: ["raidGroupRequest", raidGroupId, "count", searchTerm],
queryFn: async () => {
const response = await api.get(`/raidGroup/${raidGroupId}/raidGroupRequest/count?${searchParams}`);
if(response.status !== 200){
throw new Error("Failed to get raid group request count");
}
else if(response.data.errors){
throw new Error(response.data.errors.join(", "));
}
return response.data.count as number;
},
enabled: !!raidGroupId && raidGroupId !== ""
});
}
export function useCreateRaidGroupRequest(raidGroupId: string){
const queryClient = useQueryClient();
return useMutation({
mutationKey: ["raidGroupRequest", raidGroupId],
mutationFn: async (requestMessage: string) => {
const response = await api.post(`/raidGroup/${raidGroupId}/raidGroupRequest`, {
requestMessage
});
if(response.status !== 200){
throw new Error("Failed to create raid group request");
}
else if(response.data.errors){
throw new Error(response.data.errors.join(", "));
}
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["raidGroupRequest", raidGroupId] });
}
});
}
export function useResolveRaidGroupRequest(raidGroupId: string, raidGroupRequestId: string){
const queryClient = useQueryClient();
return useMutation({
mutationKey: ["raidGroupRequest", raidGroupId, raidGroupRequestId],
mutationFn: async (permission: RaidGroupPermissionType) => {
const response = await api.put(`/raidGroup/${raidGroupId}/raidGroupRequest/${raidGroupRequestId}/resolve`, {
resolution: permission
});
if(response.status !== 200){
throw new Error("Failed to resolve raid group request");
}
else if(response.data.errors){
throw new Error(response.data.errors.join(", "));
}
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["raidGroupRequest", raidGroupId] });
}
});
}
export function useDeleteRaidGroupRequest(raidGroupId: string, raidGroupRequestId: string){
const queryClient = useQueryClient();
return useMutation({
mutationKey: ["raidGroupRequest", raidGroupId, raidGroupRequestId],
mutationFn: async () => {
const response = await api.delete(`/raidGroup/${raidGroupId}/raidGroupRequest/${raidGroupRequestId}`);
if(response.status !== 200){
throw new Error("Failed to delete raid group request");
}
else if(response.data.errors){
throw new Error(response.data.errors.join(", "));
}
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["raidGroupRequest", raidGroupId] });
}
});
}

View File

@@ -0,0 +1,8 @@
export interface RaidGroupRequest {
raidGroupRequestId?: string;
raidGroupId: string;
accountId: string;
requestMessage: string;
username: string;
}

View File

@@ -6,6 +6,7 @@ import RaidGroupCalendarDisplay from "@/ui/calendar/RaidGroupCalendarDisplay";
import RaidGroupHeader from "@/ui/calendar/RaidGroupHeader"; import RaidGroupHeader from "@/ui/calendar/RaidGroupHeader";
import ClassGroupsTab from "@/ui/classGroup/ClassGroupsTab"; import ClassGroupsTab from "@/ui/classGroup/ClassGroupsTab";
import PersonTab from "@/ui/person/PersonTab"; import PersonTab from "@/ui/person/PersonTab";
import RaidGroupRequestTab from "@/ui/raidGroupRequest/RaidGroupRequestTab";
import RaidInstancesTab from "@/ui/raidInstances/RaidInstancesTab"; import RaidInstancesTab from "@/ui/raidInstances/RaidInstancesTab";
import RaidLayoutTab from "@/ui/raidLayout/RaidLayoutTab"; import RaidLayoutTab from "@/ui/raidLayout/RaidLayoutTab";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
@@ -65,13 +66,17 @@ export default function RaidGroupPage(){
{ {
tabHeader: "Users", tabHeader: "Users",
tabContent: <RaidGroupAccountsTab raidGroup={raidGroup}/> tabContent: <RaidGroupAccountsTab raidGroup={raidGroup}/>
},
{
tabHeader: "Requests",
tabContent: <RaidGroupRequestTab raidGroup={raidGroup}/>
} }
]; ];
return ( return (
<main <main
className="flex flex-col items-center justify-center" className="flex flex-col items-center justify-center gap-y-8"
> >
<RaidGroupHeader <RaidGroupHeader
raidGroup={raidGroup} raidGroup={raidGroup}

View File

@@ -38,7 +38,7 @@ export function AuthProvider({
const fetchToken = useCallback(async () => { const fetchToken = useCallback(async () => {
console.log("Fetching token"); //console.log("Fetching token");
try{ try{
const response = await api.get("/auth/refresh"); const response = await api.get("/auth/refresh");
//If the token is retrieved //If the token is retrieved

View File

@@ -15,16 +15,13 @@ import RevokeRefreshTokenModal from "./modals/RevokeRefreshTokenModal";
import RaidGroupAccountAdminButtons from "./RaidGroupAccountAdminButtons"; import RaidGroupAccountAdminButtons from "./RaidGroupAccountAdminButtons";
export interface AccountsListProps { export default function AccountsList({
accounts,
raidGroup
}:{
accounts: Account[]; accounts: Account[];
raidGroup?: RaidGroup; raidGroup?: RaidGroup;
} }){
export default function AccountsList(props: AccountsListProps){
const { accounts, raidGroup } = props;
const [ selectedAccount, setSelectedAccount ] = useState<Account | undefined>(undefined); const [ selectedAccount, setSelectedAccount ] = useState<Account | undefined>(undefined);
const [ displayForcePasswordResetModal, setDisplayForcePasswordResetModal ] = useState(false); const [ displayForcePasswordResetModal, setDisplayForcePasswordResetModal ] = useState(false);
const [ displayAccountPasswordSetModal, setDisplayAccountPasswordSetModal ] = useState(false); const [ displayAccountPasswordSetModal, setDisplayAccountPasswordSetModal ] = useState(false);
@@ -175,6 +172,7 @@ export default function AccountsList(props: AccountsListProps){
display={displayRemoveAccountFromRaidGroupModal} display={displayRemoveAccountFromRaidGroupModal}
close={() => {setDisplayRemoveAccountFromRaidGroupModal(false); setSelectedAccount(undefined);}} close={() => {setDisplayRemoveAccountFromRaidGroupModal(false); setSelectedAccount(undefined);}}
account={selectedAccount} account={selectedAccount}
raidGroup={raidGroup}
/> />
</> </>
); );

View File

@@ -51,7 +51,7 @@ export default function RaidGroupAccountsTab({
&nbsp; &nbsp;
</div> </div>
<div <div
className="flex flex-row items-center justify-end w-full" className="flex flex-row items-center justify-center w-full"
> >
&nbsp; &nbsp;
</div> </div>
@@ -72,7 +72,7 @@ export default function RaidGroupAccountsTab({
<AccountsByRaidGroupLoader <AccountsByRaidGroupLoader
page={page} page={page}
pageSize={pageSize} pageSize={pageSize}
searchTerm={searchTerm} searchTerm={sentSearchTerm}
raidGroup={raidGroup} raidGroup={raidGroup}
/> />
{/* Pagination */} {/* Pagination */}

View File

@@ -1,7 +1,7 @@
import DangerButton from "@/components/button/DangerButton"; import DangerButton from "@/components/button/DangerButton";
import SecondaryButton from "@/components/button/SecondaryButton"; import SecondaryButton from "@/components/button/SecondaryButton";
import RaidBuilderModal from "@/components/modal/RaidBuilderModal"; import RaidBuilderModal from "@/components/modal/RaidBuilderModal";
import { UseRemoveAccountFromRaidGroup } from "@/hooks/AccountHooks"; import { useRemoveAccountFromRaidGroup } from "@/hooks/AccountHooks";
import { Account } from "@/interface/Account"; import { Account } from "@/interface/Account";
import { RaidGroup } from "@/interface/RaidGroup"; import { RaidGroup } from "@/interface/RaidGroup";
import { useTimedModal } from "@/providers/TimedModalProvider"; import { useTimedModal } from "@/providers/TimedModalProvider";
@@ -19,7 +19,7 @@ export default function RemoveAccountFromRaidGroupModal({
account?: Account; account?: Account;
raidGroup?: RaidGroup; raidGroup?: RaidGroup;
}){ }){
const removeAccountFromRaidGroupQuery = UseRemoveAccountFromRaidGroup(raidGroup?.raidGroupId ?? "", account?.accountId ?? ""); const removeAccountFromRaidGroupQuery = useRemoveAccountFromRaidGroup(raidGroup?.raidGroupId ?? "", account?.accountId ?? "");
const { addSuccessMessage, addErrorMessage } = useTimedModal(); const { addSuccessMessage, addErrorMessage } = useTimedModal();

View File

@@ -0,0 +1,38 @@
import { ButtonProps } from "@/components/button/Button";
import DangerButton from "@/components/button/DangerButton";
import PrimaryButton from "@/components/button/PrimaryButton";
import { BsPencilFill, BsTrash3 } from "react-icons/bs";
export default function RaidGroupRequestButtons({
buttonProps,
showRaidGroupRequestModal,
showDeleteRaidGroupRequestModal
}:{
buttonProps: ButtonProps;
showRaidGroupRequestModal: () => void;
showDeleteRaidGroupRequestModal: () => void;
}){
return (
<div
className="flex flex-row items-center justify-center w-full gap-2"
>
<PrimaryButton
{...buttonProps}
onClick={showRaidGroupRequestModal}
>
<BsPencilFill
size={22}
/>
</PrimaryButton>
<DangerButton
{...buttonProps}
onClick={showDeleteRaidGroupRequestModal}
>
<BsTrash3
size={22}
/>
</DangerButton>
</div>
);
}

View File

@@ -0,0 +1,81 @@
import { ButtonProps } from "@/components/button/Button";
import Table from "@/components/table/Table";
import { RaidGroup } from "@/interface/RaidGroup";
import { RaidGroupRequest } from "@/interface/RaidGroupRequest";
import { useState } from "react";
import DeleteRaidGroupRequestModal from "./modal/DeleteRaidGroupRequestModal";
import RaidGroupRequestModal from "./modal/RaidGroupRequestModal";
import RaidGroupRequestButtons from "./RaidGroupRequestButtons";
export default function RaidGroupRequestList({
raidGroupRequests,
raidGroup
}:{
raidGroupRequests: RaidGroupRequest[];
raidGroup: RaidGroup;
}){
const [ selectedRequest, setSelectedRequest ] = useState<RaidGroupRequest>();
const [ displayRequestModal, setDisplayRequestModal ] = useState(false);
const [ displayDeleteRequestModal, setDisplayDeleteRequestModal ] = useState(false);
const buttonProps: ButtonProps = {
variant: "ghost",
size: "md",
shape: "square"
};
const headElements: React.ReactNode[] = [
<div>
Username
</div>,
<div>
Actions
</div>
];
const bodyElements: React.ReactNode[][] = raidGroupRequests.map((request) => [
<div>
{request.username}
</div>,
<div
className="flex flex-row items-center justify-center gap-2"
>
<div
className="py-4 border-l border-neutral-500"
>
&nbsp;
</div>
{
raidGroup &&
<RaidGroupRequestButtons
buttonProps={buttonProps}
showRaidGroupRequestModal={() => { setSelectedRequest(request); setDisplayRequestModal(true); }}
showDeleteRaidGroupRequestModal={() => { setSelectedRequest(request); setDisplayDeleteRequestModal(true); }}
/>
}
</div>
]);
return (
<>
<Table
tableHeadElements={headElements}
tableBodyElements={bodyElements}
/>
<RaidGroupRequestModal
display={displayRequestModal}
close={() => {setDisplayRequestModal(false); setSelectedRequest(undefined);}}
raidGroupRequest={selectedRequest}
raidGroupId={raidGroup.raidGroupId ?? ""}
/>
<DeleteRaidGroupRequestModal
display={displayDeleteRequestModal}
close={() => {setDisplayDeleteRequestModal(false); setSelectedRequest(undefined);}}
raidGroupRequest={selectedRequest}
/>
</>
);
}

View File

@@ -0,0 +1,10 @@
export default function RaidGroupRequestListSkeleton(){
//TODO:
return (
<div>
Raid Group Request List Skeleton
</div>
);
}

View File

@@ -0,0 +1,36 @@
import DangerMessage from "@/components/message/DangerMessage";
import { useGetRaidGroupRequests } from "@/hooks/RaidGroupRequestHooks";
import { RaidGroup } from "@/interface/RaidGroup";
import RaidGroupRequestList from "./RaidGroupRequestList";
import RaidGroupRequestListSkeleton from "./RaidGroupRequestListSkeleton";
export default function RaidGroupRequestLoader({
page,
pageSize,
searchTerm,
raidGroup
}:{
page: number;
pageSize: number;
searchTerm?: string;
raidGroup: RaidGroup;
}){
const raidGroupRequestsQuery = useGetRaidGroupRequests(raidGroup.raidGroupId!, page - 1, pageSize, searchTerm);
if(raidGroupRequestsQuery.status === "pending"){
return <RaidGroupRequestListSkeleton/>
}
else if(raidGroupRequestsQuery.status === "error"){
return <DangerMessage>Error: {raidGroupRequestsQuery.error.message}</DangerMessage>
}
else{
return (
<RaidGroupRequestList
raidGroupRequests={raidGroupRequestsQuery.data ?? []}
raidGroup={raidGroup}
/>
);
}
}

View File

@@ -0,0 +1,89 @@
import TextInput from "@/components/input/TextInput";
import Pagination from "@/components/pagination/Pagination";
import { useGetRaidGroupRequestCount } from "@/hooks/RaidGroupRequestHooks";
import { RaidGroup } from "@/interface/RaidGroup";
import { useEffect, useState } from "react";
import { useDebouncedCallback } from "use-debounce";
import RaidGroupRequestLoader from "./RaidGroupRequestLoader";
export default function RaidGroupRequestTab({
raidGroup
}:{
raidGroup: RaidGroup;
}){
const [ page, setPage ] = useState(1);
const [ totalPages, setTotalPages ] = useState(1);
const [ searchTerm, setSearchTerm ] = useState("");
const [ sentSearchTerm, setSentSearchTerm ] = useState<string>();
const pageSize = 10;
const modalId = crypto.randomUUID().replaceAll("-", "");
const raidGroupRequestsCountQuery = useGetRaidGroupRequestCount(raidGroup.raidGroupId);
const updateSearchTerm = useDebouncedCallback((newSearchTerm: string) => {
setSentSearchTerm(newSearchTerm.length ? newSearchTerm : undefined);
}, 1000);
useEffect(() => {
updateSearchTerm(searchTerm ?? "");
}, [ searchTerm, updateSearchTerm ]);
useEffect(() => {
if(raidGroupRequestsCountQuery.status === "success"){
setTotalPages(Math.ceil(raidGroupRequestsCountQuery.data / pageSize));
}
}, [ raidGroupRequestsCountQuery ]);
return (
<>
<div
className="flex flex-row items-center justify-between w-full"
>
<div
className="flex flex-row items-center justify-start w-full"
>
&nbsp;
</div>
<div
className="flex flex-row items-center justify-center w-full"
>
&nbsp;
</div>
<div
className="flex flex-row items-center justify-end w-full"
>
<div>
<TextInput
id={`accountSearchBox${modalId}`}
value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
placeholder="Search"
/>
</div>
</div>
</div>
{/* Requests List */}
<RaidGroupRequestLoader
page={page}
pageSize={pageSize}
searchTerm={sentSearchTerm}
raidGroup={raidGroup}
/>
{/* Pagination */}
<div
className="my-12"
>
<Pagination
currentPage={page}
totalPages={totalPages}
onChange={setPage}
/>
</div>
</>
);
}

View File

@@ -0,0 +1,63 @@
import DangerButton from "@/components/button/DangerButton";
import SecondaryButton from "@/components/button/SecondaryButton";
import RaidBuilderModal from "@/components/modal/RaidBuilderModal";
import { useDeleteRaidGroupRequest } from "@/hooks/RaidGroupRequestHooks";
import { RaidGroupRequest } from "@/interface/RaidGroupRequest";
import { useTimedModal } from "@/providers/TimedModalProvider";
import { useEffect } from "react";
export default function DeleteRaidGroupRequestModal({
display,
close,
raidGroupRequest
}:{
display: boolean;
close: () => void;
raidGroupRequest?: RaidGroupRequest;
}){
const deleteRaidGroupRequestMutate = useDeleteRaidGroupRequest(raidGroupRequest?.raidGroupId ?? "", raidGroupRequest?.raidGroupRequestId ?? "");
const { addSuccessMessage, addErrorMessage } = useTimedModal();
const deleteRaidGroupRequest = () => {
deleteRaidGroupRequestMutate.mutate();
}
useEffect(() => {
if(deleteRaidGroupRequestMutate.status === "success"){
deleteRaidGroupRequestMutate.reset();
addSuccessMessage("Raid Group Request deleted successfully");
close();
}
else if(deleteRaidGroupRequestMutate.status === "error"){
deleteRaidGroupRequestMutate.reset();
addErrorMessage(`Error deleting Raid Group Request: ${deleteRaidGroupRequestMutate.error.message}`);
console.log(deleteRaidGroupRequestMutate.error);
}
});
return(
<RaidBuilderModal
display={display}
close={close}
modalHeader="Delete Raid Group Request"
modalBody={`Are you sure you want to delete the request from ${raidGroupRequest?.username}?`}
modalFooter={
<>
<DangerButton
onClick={deleteRaidGroupRequest}
>
Delete
</DangerButton>
<SecondaryButton
onClick={close}
>
Cancel
</SecondaryButton>
</>
}
/>
);
}

View File

@@ -0,0 +1,127 @@
import PrimaryButton from "@/components/button/PrimaryButton";
import SecondaryButton from "@/components/button/SecondaryButton";
import TextInput from "@/components/input/TextInput";
import RaidBuilderModal from "@/components/modal/RaidBuilderModal";
import RaidGroupPermissionSelector from "@/components/raidGroup/RaidGroupPermissionSelector";
import { useCreateRaidGroupRequest, useResolveRaidGroupRequest } from "@/hooks/RaidGroupRequestHooks";
import { Account } from "@/interface/Account";
import { RaidGroupPermissionType } from "@/interface/RaidGroup";
import { RaidGroupRequest } from "@/interface/RaidGroupRequest";
import { useTimedModal } from "@/providers/TimedModalProvider";
import { useEffect, useState } from "react";
export default function RaidGroupRequestModal({
display,
close,
raidGroupId,
raidGroupRequest,
account
}:{
display: boolean;
close: () => void;
raidGroupId: string;
raidGroupRequest?: RaidGroupRequest;
account?: Account;
}){
const [ currentPermission, setCurrentPermission ] = useState(RaidGroupPermissionType.RAIDER);
const [ requestMessage, setRequestMessage ] = useState(raidGroupRequest?.requestMessage ?? "");
const modalId = crypto.randomUUID().replaceAll("-", "");
useEffect(() => {
setCurrentPermission(RaidGroupPermissionType.RAIDER);
setRequestMessage(raidGroupRequest?.requestMessage ?? "");
}, [ display, raidGroupRequest ]);
const createRaidGroupRequestMutate = useCreateRaidGroupRequest(raidGroupId);
const resolveRaidGroupRequestMutate = useResolveRaidGroupRequest(raidGroupId, raidGroupRequest?.raidGroupRequestId ?? "");
const { addSuccessMessage, addErrorMessage } = useTimedModal();
useEffect(() => {
if(createRaidGroupRequestMutate.status === "success"){
createRaidGroupRequestMutate.reset();
addSuccessMessage("Raid Group Request Created");
close();
}
else if(createRaidGroupRequestMutate.status === "error"){
createRaidGroupRequestMutate.reset();
addErrorMessage(`Error creating raid group request: ${createRaidGroupRequestMutate.error.message}`);
console.log(createRaidGroupRequestMutate.error);
}
else if(resolveRaidGroupRequestMutate.status === "success"){
resolveRaidGroupRequestMutate.reset();
addSuccessMessage("Raid Group Request Resolved");
close();
}
else if(resolveRaidGroupRequestMutate.status === "error"){
resolveRaidGroupRequestMutate.reset();
addErrorMessage(`Error resolving raid group request: ${resolveRaidGroupRequestMutate.error.message}`);
console.log(resolveRaidGroupRequestMutate.error);
}
});
const createRaidGroupRequest = () => {
createRaidGroupRequestMutate.mutate(requestMessage);
}
const resolveRaidGroupRequest = () => {
resolveRaidGroupRequestMutate.mutate(currentPermission);
}
return (
<RaidBuilderModal
display={display}
close={close}
modalHeader="Raid Group Request"
modalBody={
<div
className="flex flex-col items-center justify-center gap-4"
>
<div>
{
raidGroupRequest &&
raidGroupRequest?.username
}
{
account &&
account?.username
}
</div>
<TextInput
id={`raidGroupRequestModalMessageInput${modalId}`}
value={requestMessage}
onChange={(e) => setRequestMessage(e.target.value)}
placeholder="Message"
disabled={!!raidGroupRequest}
/>
{
raidGroupRequest &&
<RaidGroupPermissionSelector
value={currentPermission}
onChange={(e) => setCurrentPermission(e.target.value as RaidGroupPermissionType)}
/>
}
</div>
}
modalFooter={
<>
<PrimaryButton
onClick={raidGroupRequest ? resolveRaidGroupRequest : createRaidGroupRequest}
>
{raidGroupRequest ? "Resolve" : "Request"}
</PrimaryButton>
<SecondaryButton
onClick={close}
>
Cancel
</SecondaryButton>
</>
}
/>
);
}

View File

@@ -38,22 +38,17 @@ export default function RaidLayoutModal({
}, [ raidLayout, selectedClassGroups ]); }, [ raidLayout, selectedClassGroups ]);
const updateRaidLayoutSize = (newLayoutSize: number) => { const updateRaidLayoutSize = (newLayoutSize: number) => {
console.log("newLayoutSize = " + newLayoutSize + ", " + classGroups.length);
setRaidLayoutSize(newLayoutSize); setRaidLayoutSize(newLayoutSize);
if(newLayoutSize < classGroups.length){ if(newLayoutSize < classGroups.length){
console.log("Removing");
setClassGroups(classGroups.slice(0, newLayoutSize)); setClassGroups(classGroups.slice(0, newLayoutSize));
} }
else if(newLayoutSize > classGroups.length){ else if(newLayoutSize > classGroups.length){
console.log("Adding");
setClassGroups([ setClassGroups([
...classGroups, ...classGroups,
null null
]); ]);
} }
} }
console.log("classGroups");
console.log(classGroups);
const createRaidLayoutMutate = useCreateRaidLayout(raidGroup.raidGroupId ?? ""); const createRaidLayoutMutate = useCreateRaidLayout(raidGroup.raidGroupId ?? "");