Fix adhoc raid instance saving

This commit is contained in:
2025-03-16 15:06:36 -04:00
parent 7fcabf69f1
commit f10e54ddfd
2 changed files with 49 additions and 7 deletions

View File

@@ -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"] });

View File

@@ -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 (