diff --git a/src/hooks/RaidInstanceHooks.ts b/src/hooks/RaidInstanceHooks.ts index 61eb7da..bf019f1 100644 --- a/src/hooks/RaidInstanceHooks.ts +++ b/src/hooks/RaidInstanceHooks.ts @@ -80,7 +80,14 @@ export function useCreateRaidInstance(raidGroupId: string){ return useMutation({ mutationKey: ["createRaidInstance", raidGroupId], mutationFn: async (raidInstance: RaidInstance) => { - const response = await api.post(`/raidGroup/${raidGroupId}/raidInstance`, raidInstance); + const response = await api.post(`/raidGroup/${raidGroupId}/raidInstance`, { + raidInstanceName: raidInstance.raidInstanceName, + raidStartDate: raidInstance.raidStartDate, + raidEndDate: raidInstance.raidEndDate, + raidSize: raidInstance.raidSize, + numberRuns: raidInstance.numberRuns, + raidGroupId: raidInstance.raidGroupId + }); if(response.status !== 200){ throw new Error("Failed to create raid instance"); @@ -88,6 +95,8 @@ export function useCreateRaidInstance(raidGroupId: string){ else if(response.data.errors){ throw new Error(response.data.errors.join(", ")); } + + return response.data.raidInstanceId as string; }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["raidInstances"] }); diff --git a/src/ui/raidInstance/RaidInstanceHeader.tsx b/src/ui/raidInstance/RaidInstanceHeader.tsx index 6ae3946..0d97aae 100644 --- a/src/ui/raidInstance/RaidInstanceHeader.tsx +++ b/src/ui/raidInstance/RaidInstanceHeader.tsx @@ -2,7 +2,7 @@ import PrimaryButton from "@/components/button/PrimaryButton"; import DateInput from "@/components/input/DateInput"; import NumberInput from "@/components/input/NumberInput"; import TextInput from "@/components/input/TextInput"; -import { useUpdateRaidInstanceNoInvalidation, useUpdateRaidInstancePersonCharacterXrefs } from "@/hooks/RaidInstanceHooks"; +import { useCreateRaidInstance, useUpdateRaidInstanceNoInvalidation, useUpdateRaidInstancePersonCharacterXrefs } from "@/hooks/RaidInstanceHooks"; import { RaidInstance } from "@/interface/RaidInstance"; import { useAuth } from "@/providers/AuthProvider"; import { useRaidInstanceContext } from "@/providers/RaidInstanceLayoutProvider"; @@ -11,6 +11,7 @@ import { isRaidGroupAdmin, isRaidGroupLeader } from "@/util/PermissionUtil"; import clsx from "clsx"; import moment from "moment"; import { useEffect, useState } from "react"; +import { useNavigate } from "react-router"; import PersonSelectorModal from "../person/modals/PersonSelectorModal"; import RaidLayoutSelectorModal from "../raidLayout/modal/RaidLayoutSelectorModal"; @@ -28,6 +29,7 @@ export default function RaidInstanceHeader(){ } = useRaidInstanceContext(); const { accountPermissions, raidGroupPermissions } = useAuth(); + const navigate = useNavigate(); const [ displayRaidLayoutSelectorModal, setDisplayRaidLayoutSelectorModal ] = useState(false); const [ displayRosterSelectorModal, setDisplayRosterSelectorModal ] = useState(false); @@ -55,19 +57,50 @@ export default function RaidInstanceHeader(){ } //Mutations + const { data: createRaidInstanceData, mutate: createRaidInstanceMutate, status: createRaidInstanceStatus, reset: createRaidInstanceReset, error: createRaidInstanceError } = useCreateRaidInstance(raidGroup?.raidGroupId ?? ""); const { mutate: updateRaidInstanceMutate, status: updateRaidInstanceStatus, reset: updateRaidInstanceReset, error: updateRaidInstanceError } = useUpdateRaidInstanceNoInvalidation(raidGroup?.raidGroupId ?? ""); - const { mutate: updatePersonCharacterXrefsMutate, status: updatePersonCharacterXrefsStatus, reset: updatePersonCharacterXrefsReset, error: updatePersonCharacterXrefsError } = useUpdateRaidInstancePersonCharacterXrefs(raidGroup?.raidGroupId ?? "", raidInstance?.raidInstanceId ?? ""); + const { mutate: updatePersonCharacterXrefsMutate, status: updatePersonCharacterXrefsStatus, reset: updatePersonCharacterXrefsReset, error: updatePersonCharacterXrefsError } = useUpdateRaidInstancePersonCharacterXrefs(raidGroup?.raidGroupId ?? "", raidInstance?.raidInstanceId ?? createRaidInstanceData ?? ""); const saveRaidInstance = () => { - updateRaidInstanceMutate(raidInstance!); - updatePersonCharacterXrefsMutate(personCharacterXrefs); + if(!raidInstance?.raidInstanceId || raidInstance?.raidInstanceId === ""){ + createRaidInstanceMutate({ + raidInstanceName: raidInstance?.raidInstanceName ?? "", + raidStartDate: raidInstance?.raidStartDate ?? new Date(), + raidEndDate: raidInstance?.raidEndDate ?? new Date(), + raidSize: raidInstance?.raidSize ?? 3, + numberRuns: raidInstance?.numberRuns ?? 1, + raidGroupId: raidGroup?.raidGroupId ?? "" + }); + } + else{ + updateRaidInstanceMutate(raidInstance!); + updatePersonCharacterXrefsMutate(personCharacterXrefs); + } } useEffect(() => { - if((updateRaidInstanceStatus === "success") && (updatePersonCharacterXrefsStatus === "success")){ + console.log("data", createRaidInstanceData); + if(createRaidInstanceStatus === "success" && createRaidInstanceData){ + createRaidInstanceReset(); + setRaidInstance({...raidInstance, raidInstanceId: createRaidInstanceData} as RaidInstance); + personCharacterXrefs.forEach(xref => xref.raidInstanceId = createRaidInstanceData); + updatePersonCharacterXrefsMutate(personCharacterXrefs); + setPersonCharacterXrefs([...personCharacterXrefs]); + } + }, [createRaidInstanceData, createRaidInstanceMutate, createRaidInstanceReset, createRaidInstanceStatus, personCharacterXrefs, raidInstance, setPersonCharacterXrefs, setRaidInstance, updatePersonCharacterXrefsMutate]) + + useEffect(() => { + if(((createRaidInstanceStatus !== "error") || (updateRaidInstanceStatus === "success")) && (updatePersonCharacterXrefsStatus === "success")){ addSuccessMessage("Raid Instance Saved"); updateRaidInstanceReset(); updatePersonCharacterXrefsReset(); + if(updateRaidInstanceStatus !== "success"){ + navigate(`/raidGroup/${raidGroup?.raidGroupId}/raidInstance/${raidInstance?.raidInstanceId}`) + } + } + else if(createRaidInstanceStatus === "error"){ + addErrorMessage("Error saving Raid Instance: " + createRaidInstanceError.message); + createRaidInstanceReset(); } else if(updateRaidInstanceStatus === "error"){ addErrorMessage("Error Saving Raid Instance: " + updateRaidInstanceError.message); @@ -77,7 +110,7 @@ export default function RaidInstanceHeader(){ addErrorMessage("Error Saving Raid Instance: " + updatePersonCharacterXrefsError.message); updatePersonCharacterXrefsReset(); } - }, [ addErrorMessage, addSuccessMessage, updatePersonCharacterXrefsError?.message, updatePersonCharacterXrefsReset, updatePersonCharacterXrefsStatus, updateRaidInstanceError?.message, updateRaidInstanceReset, updateRaidInstanceStatus ]); + }, [addErrorMessage, addSuccessMessage, createRaidInstanceData, createRaidInstanceError?.message, createRaidInstanceReset, createRaidInstanceStatus, navigate, raidGroup?.raidGroupId, raidInstance?.raidInstanceId, updatePersonCharacterXrefsError?.message, updatePersonCharacterXrefsReset, updatePersonCharacterXrefsStatus, updateRaidInstanceError?.message, updateRaidInstanceReset, updateRaidInstanceStatus]); return (