diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..ffab39c Binary files /dev/null and b/public/favicon.ico differ diff --git a/src/hooks/RaidInstanceHooks.ts b/src/hooks/RaidInstanceHooks.ts index 4110ccd..61eb7da 100644 --- a/src/hooks/RaidInstanceHooks.ts +++ b/src/hooks/RaidInstanceHooks.ts @@ -18,7 +18,8 @@ export function useGetRaidInstance(raidInstanceId: string, raidGroupId: string){ } return response.data as RaidInstance; - } + }, + enabled: !!raidInstanceId && !!raidGroupId }); } diff --git a/src/providers/RaidInstanceLayoutProvider.tsx b/src/providers/RaidInstanceLayoutProvider.tsx index 81eafe0..dcc8c9f 100644 --- a/src/providers/RaidInstanceLayoutProvider.tsx +++ b/src/providers/RaidInstanceLayoutProvider.tsx @@ -127,7 +127,8 @@ export default function RaidInstanceLayoutProvider({ } } else if(!raidInstanceId){ - setRaidInstance({} as RaidInstance); + setRaidInstance({raidSize: 3, numberRuns: 1} as RaidInstance); + setSelectedClassGroups([null, null, null]); } }, [ raidInstanceId, raidInstanceQuery.status, raidInstanceQuery.data ]); diff --git a/src/ui/classGroup/modal/SelectClassGroupModal.tsx b/src/ui/classGroup/modal/SelectClassGroupModal.tsx index c2bed8e..c2cb351 100644 --- a/src/ui/classGroup/modal/SelectClassGroupModal.tsx +++ b/src/ui/classGroup/modal/SelectClassGroupModal.tsx @@ -23,7 +23,7 @@ export default function SelectClassGroupModal({ const [ currentClassGroup, setCurrentClassGroup ] = useState(selectedClassGroup); const selectorId = crypto.randomUUID().replaceAll("-", ""); - const classGroupsQuery = useGetClassGroups(raidGroupId, 0, 100); + const classGroupsQuery = useGetClassGroups(raidGroupId, 0, 1000); useEffect(() => { diff --git a/src/ui/personCharacter/modal/PersonCharacterSelectorModal.tsx b/src/ui/personCharacter/modal/PersonCharacterSelectorModal.tsx index 00e33af..27e1212 100644 --- a/src/ui/personCharacter/modal/PersonCharacterSelectorModal.tsx +++ b/src/ui/personCharacter/modal/PersonCharacterSelectorModal.tsx @@ -24,7 +24,7 @@ export default function PersonCharacterSelectorModal({ }:{ display: boolean; close: () => void; - currentSlotClassGroup?: ClassGroup; + currentSlotClassGroup?: ClassGroup | null; currentRunCharacters: PersonCharacter[]; otherRunsCharacters: PersonCharacter[]; personCharacters: PersonCharacter[]; diff --git a/src/ui/raidInstance/RaidInstanceHeader.tsx b/src/ui/raidInstance/RaidInstanceHeader.tsx index 865fb2b..6ae3946 100644 --- a/src/ui/raidInstance/RaidInstanceHeader.tsx +++ b/src/ui/raidInstance/RaidInstanceHeader.tsx @@ -4,8 +4,10 @@ import NumberInput from "@/components/input/NumberInput"; import TextInput from "@/components/input/TextInput"; import { useUpdateRaidInstanceNoInvalidation, useUpdateRaidInstancePersonCharacterXrefs } from "@/hooks/RaidInstanceHooks"; import { RaidInstance } from "@/interface/RaidInstance"; +import { useAuth } from "@/providers/AuthProvider"; import { useRaidInstanceContext } from "@/providers/RaidInstanceLayoutProvider"; import { useTimedModal } from "@/providers/TimedModalProvider"; +import { isRaidGroupAdmin, isRaidGroupLeader } from "@/util/PermissionUtil"; import clsx from "clsx"; import moment from "moment"; import { useEffect, useState } from "react"; @@ -25,6 +27,8 @@ export default function RaidInstanceHeader(){ personCharacterXrefs, setPersonCharacterXrefs } = useRaidInstanceContext(); + const { accountPermissions, raidGroupPermissions } = useAuth(); + const [ displayRaidLayoutSelectorModal, setDisplayRaidLayoutSelectorModal ] = useState(false); const [ displayRosterSelectorModal, setDisplayRosterSelectorModal ] = useState(false); const { addSuccessMessage, addErrorMessage } = useTimedModal(); @@ -98,7 +102,6 @@ export default function RaidInstanceHeader(){ raidInstanceName: e.target.value } as RaidInstance) } - //disabled={} /> @@ -197,6 +200,7 @@ export default function RaidInstanceHeader(){ Save diff --git a/src/ui/raidInstance/RaidInstanceTab.tsx b/src/ui/raidInstance/RaidInstanceTab.tsx index 3fd5c78..29f4909 100644 --- a/src/ui/raidInstance/RaidInstanceTab.tsx +++ b/src/ui/raidInstance/RaidInstanceTab.tsx @@ -6,6 +6,7 @@ import { RaidGroup } from "@/interface/RaidGroup"; import { useAuth } from "@/providers/AuthProvider"; import { isRaidGroupAdmin, isRaidGroupLeader } from "@/util/PermissionUtil"; import { useEffect, useState } from "react"; +import { useNavigate } from "react-router"; import { useDebouncedCallback } from "use-debounce"; import RaidInstanceLoader from "./RaidInstanceLoader"; import RaidInstanceModal from "./modals/RaidInstanceModal"; @@ -24,6 +25,7 @@ export default function RaidInstanceTab({ const [ sentSearchTerm, setSentSearchTerm ] = useState(); const pageSize = 10; const modalId = crypto.randomUUID().replaceAll("-", ""); + const navigate = useNavigate(); const updateSearchTerm = useDebouncedCallback((newSearchTerm: string) => { @@ -59,13 +61,25 @@ export default function RaidInstanceTab({
- setDisplayCreateRaidInstanceModal(true)} - disabled={!isRaidGroupAdmin(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions) && !isRaidGroupLeader(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions)} - > - Create Raid Instance - + { + (!isRaidGroupAdmin(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions) || !isRaidGroupLeader(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions)) && + navigate(`/raidGroup/${raidGroup.raidGroupId}/raidInstance`)} + > + Create Raid Instance + + } + { + (isRaidGroupAdmin(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions) || isRaidGroupLeader(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions)) && + setDisplayCreateRaidInstanceModal(true)} + disabled={!isRaidGroupAdmin(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions) && !isRaidGroupLeader(raidGroup.raidGroupId ?? "", raidGroupPermissions, accountPermissions)} + > + Create Raid Instance + + } setDisplayCreateRaidInstanceModal(false)} diff --git a/src/ui/raidInstance/creator/RaidInstanceCreator.tsx b/src/ui/raidInstance/creator/RaidInstanceCreator.tsx index 0bad77a..c737ca6 100644 --- a/src/ui/raidInstance/creator/RaidInstanceCreator.tsx +++ b/src/ui/raidInstance/creator/RaidInstanceCreator.tsx @@ -13,7 +13,6 @@ import RaidInstanceCreatorTable from "./RaidInstanceCreatorTable"; export default function RaidInstanceCreator(){ const { raidGroup, - classGroups, raidInstance, setRaidInstance, roster, setRaidLayout, @@ -117,7 +116,7 @@ export default function RaidInstanceCreator(){ setDisplayPersonCharacterSelectorModal(false)} - currentSlotClassGroup={classGroups[currentLocation.col]} + currentSlotClassGroup={selectedClassGroups.length >= currentLocation.col ? selectedClassGroups[currentLocation.col] : null} currentRunCharacters={getCurrentRunCharacters()} otherRunsCharacters={getCharactersFromOtherRuns()} personCharacters={getPersonCharactersFromRoster()}