Raid Instance Creator works for raiders

This commit is contained in:
2025-03-15 22:41:24 -04:00
parent 10d8159353
commit 59a57dbdc3
8 changed files with 33 additions and 14 deletions

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -18,7 +18,8 @@ export function useGetRaidInstance(raidInstanceId: string, raidGroupId: string){
} }
return response.data as RaidInstance; return response.data as RaidInstance;
} },
enabled: !!raidInstanceId && !!raidGroupId
}); });
} }

View File

@@ -127,7 +127,8 @@ export default function RaidInstanceLayoutProvider({
} }
} }
else if(!raidInstanceId){ else if(!raidInstanceId){
setRaidInstance({} as RaidInstance); setRaidInstance({raidSize: 3, numberRuns: 1} as RaidInstance);
setSelectedClassGroups([null, null, null]);
} }
}, [ raidInstanceId, raidInstanceQuery.status, raidInstanceQuery.data ]); }, [ raidInstanceId, raidInstanceQuery.status, raidInstanceQuery.data ]);

View File

@@ -23,7 +23,7 @@ export default function SelectClassGroupModal({
const [ currentClassGroup, setCurrentClassGroup ] = useState(selectedClassGroup); const [ currentClassGroup, setCurrentClassGroup ] = useState(selectedClassGroup);
const selectorId = crypto.randomUUID().replaceAll("-", ""); const selectorId = crypto.randomUUID().replaceAll("-", "");
const classGroupsQuery = useGetClassGroups(raidGroupId, 0, 100); const classGroupsQuery = useGetClassGroups(raidGroupId, 0, 1000);
useEffect(() => { useEffect(() => {

View File

@@ -24,7 +24,7 @@ export default function PersonCharacterSelectorModal({
}:{ }:{
display: boolean; display: boolean;
close: () => void; close: () => void;
currentSlotClassGroup?: ClassGroup; currentSlotClassGroup?: ClassGroup | null;
currentRunCharacters: PersonCharacter[]; currentRunCharacters: PersonCharacter[];
otherRunsCharacters: PersonCharacter[]; otherRunsCharacters: PersonCharacter[];
personCharacters: PersonCharacter[]; personCharacters: PersonCharacter[];

View File

@@ -4,8 +4,10 @@ import NumberInput from "@/components/input/NumberInput";
import TextInput from "@/components/input/TextInput"; import TextInput from "@/components/input/TextInput";
import { useUpdateRaidInstanceNoInvalidation, useUpdateRaidInstancePersonCharacterXrefs } from "@/hooks/RaidInstanceHooks"; import { useUpdateRaidInstanceNoInvalidation, useUpdateRaidInstancePersonCharacterXrefs } from "@/hooks/RaidInstanceHooks";
import { RaidInstance } from "@/interface/RaidInstance"; import { RaidInstance } from "@/interface/RaidInstance";
import { useAuth } from "@/providers/AuthProvider";
import { useRaidInstanceContext } from "@/providers/RaidInstanceLayoutProvider"; import { useRaidInstanceContext } from "@/providers/RaidInstanceLayoutProvider";
import { useTimedModal } from "@/providers/TimedModalProvider"; import { useTimedModal } from "@/providers/TimedModalProvider";
import { isRaidGroupAdmin, isRaidGroupLeader } from "@/util/PermissionUtil";
import clsx from "clsx"; import clsx from "clsx";
import moment from "moment"; import moment from "moment";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
@@ -25,6 +27,8 @@ export default function RaidInstanceHeader(){
personCharacterXrefs, setPersonCharacterXrefs personCharacterXrefs, setPersonCharacterXrefs
} = useRaidInstanceContext(); } = useRaidInstanceContext();
const { accountPermissions, raidGroupPermissions } = useAuth();
const [ displayRaidLayoutSelectorModal, setDisplayRaidLayoutSelectorModal ] = useState(false); const [ displayRaidLayoutSelectorModal, setDisplayRaidLayoutSelectorModal ] = useState(false);
const [ displayRosterSelectorModal, setDisplayRosterSelectorModal ] = useState(false); const [ displayRosterSelectorModal, setDisplayRosterSelectorModal ] = useState(false);
const { addSuccessMessage, addErrorMessage } = useTimedModal(); const { addSuccessMessage, addErrorMessage } = useTimedModal();
@@ -98,7 +102,6 @@ export default function RaidInstanceHeader(){
raidInstanceName: e.target.value raidInstanceName: e.target.value
} as RaidInstance) } as RaidInstance)
} }
//disabled={}
/> />
</h1> </h1>
</div> </div>
@@ -197,6 +200,7 @@ export default function RaidInstanceHeader(){
<PrimaryButton <PrimaryButton
id="saveInstanceButton" id="saveInstanceButton"
onClick={saveRaidInstance} onClick={saveRaidInstance}
disabled={!isRaidGroupAdmin(raidGroup?.raidGroupId ?? "", raidGroupPermissions, accountPermissions) && !isRaidGroupLeader(raidGroup?.raidGroupId ?? "", raidGroupPermissions, accountPermissions)}
> >
Save Save
</PrimaryButton> </PrimaryButton>

View File

@@ -6,6 +6,7 @@ import { RaidGroup } from "@/interface/RaidGroup";
import { useAuth } from "@/providers/AuthProvider"; import { useAuth } from "@/providers/AuthProvider";
import { isRaidGroupAdmin, isRaidGroupLeader } from "@/util/PermissionUtil"; import { isRaidGroupAdmin, isRaidGroupLeader } from "@/util/PermissionUtil";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { useNavigate } from "react-router";
import { useDebouncedCallback } from "use-debounce"; import { useDebouncedCallback } from "use-debounce";
import RaidInstanceLoader from "./RaidInstanceLoader"; import RaidInstanceLoader from "./RaidInstanceLoader";
import RaidInstanceModal from "./modals/RaidInstanceModal"; import RaidInstanceModal from "./modals/RaidInstanceModal";
@@ -24,6 +25,7 @@ export default function RaidInstanceTab({
const [ sentSearchTerm, setSentSearchTerm ] = useState<string>(); const [ sentSearchTerm, setSentSearchTerm ] = useState<string>();
const pageSize = 10; const pageSize = 10;
const modalId = crypto.randomUUID().replaceAll("-", ""); const modalId = crypto.randomUUID().replaceAll("-", "");
const navigate = useNavigate();
const updateSearchTerm = useDebouncedCallback((newSearchTerm: string) => { const updateSearchTerm = useDebouncedCallback((newSearchTerm: string) => {
@@ -59,13 +61,25 @@ export default function RaidInstanceTab({
<div <div
className="flex flex-row items-center justify-center w-full" className="flex flex-row items-center justify-center w-full"
> >
<PrimaryButton {
className="text-nowrap" (!isRaidGroupAdmin(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions) || !isRaidGroupLeader(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions)) &&
onClick={() => setDisplayCreateRaidInstanceModal(true)} <PrimaryButton
disabled={!isRaidGroupAdmin(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions) && !isRaidGroupLeader(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions)} className="text-nowrap"
> onClick={() => navigate(`/raidGroup/${raidGroup.raidGroupId}/raidInstance`)}
Create Raid Instance >
</PrimaryButton> Create Raid Instance
</PrimaryButton>
}
{
(isRaidGroupAdmin(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions) || isRaidGroupLeader(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions)) &&
<PrimaryButton
className="text-nowrap"
onClick={() => setDisplayCreateRaidInstanceModal(true)}
disabled={!isRaidGroupAdmin(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions) && !isRaidGroupLeader(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions)}
>
Create Raid Instance
</PrimaryButton>
}
<RaidInstanceModal <RaidInstanceModal
display={displayCreateRaidInstanceModal} display={displayCreateRaidInstanceModal}
close={() => setDisplayCreateRaidInstanceModal(false)} close={() => setDisplayCreateRaidInstanceModal(false)}

View File

@@ -13,7 +13,6 @@ import RaidInstanceCreatorTable from "./RaidInstanceCreatorTable";
export default function RaidInstanceCreator(){ export default function RaidInstanceCreator(){
const { const {
raidGroup, raidGroup,
classGroups,
raidInstance, setRaidInstance, raidInstance, setRaidInstance,
roster, roster,
setRaidLayout, setRaidLayout,
@@ -117,7 +116,7 @@ export default function RaidInstanceCreator(){
<PersonCharacterSelectorModal <PersonCharacterSelectorModal
display={displayPersonCharacterSelectorModal} display={displayPersonCharacterSelectorModal}
close={() => setDisplayPersonCharacterSelectorModal(false)} close={() => setDisplayPersonCharacterSelectorModal(false)}
currentSlotClassGroup={classGroups[currentLocation.col]} currentSlotClassGroup={selectedClassGroups.length >= currentLocation.col ? selectedClassGroups[currentLocation.col] : null}
currentRunCharacters={getCurrentRunCharacters()} currentRunCharacters={getCurrentRunCharacters()}
otherRunsCharacters={getCharactersFromOtherRuns()} otherRunsCharacters={getCharactersFromOtherRuns()}
personCharacters={getPersonCharactersFromRoster()} personCharacters={getPersonCharactersFromRoster()}