Fix adhoc raid instance saving
This commit is contained in:
@@ -80,7 +80,14 @@ export function useCreateRaidInstance(raidGroupId: string){
|
|||||||
return useMutation({
|
return useMutation({
|
||||||
mutationKey: ["createRaidInstance", raidGroupId],
|
mutationKey: ["createRaidInstance", raidGroupId],
|
||||||
mutationFn: async (raidInstance: RaidInstance) => {
|
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){
|
if(response.status !== 200){
|
||||||
throw new Error("Failed to create raid instance");
|
throw new Error("Failed to create raid instance");
|
||||||
@@ -88,6 +95,8 @@ export function useCreateRaidInstance(raidGroupId: string){
|
|||||||
else if(response.data.errors){
|
else if(response.data.errors){
|
||||||
throw new Error(response.data.errors.join(", "));
|
throw new Error(response.data.errors.join(", "));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return response.data.raidInstanceId as string;
|
||||||
},
|
},
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
queryClient.invalidateQueries({ queryKey: ["raidInstances"] });
|
queryClient.invalidateQueries({ queryKey: ["raidInstances"] });
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import PrimaryButton from "@/components/button/PrimaryButton";
|
|||||||
import DateInput from "@/components/input/DateInput";
|
import DateInput from "@/components/input/DateInput";
|
||||||
import NumberInput from "@/components/input/NumberInput";
|
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 { useCreateRaidInstance, useUpdateRaidInstanceNoInvalidation, useUpdateRaidInstancePersonCharacterXrefs } from "@/hooks/RaidInstanceHooks";
|
||||||
import { RaidInstance } from "@/interface/RaidInstance";
|
import { RaidInstance } from "@/interface/RaidInstance";
|
||||||
import { useAuth } from "@/providers/AuthProvider";
|
import { useAuth } from "@/providers/AuthProvider";
|
||||||
import { useRaidInstanceContext } from "@/providers/RaidInstanceLayoutProvider";
|
import { useRaidInstanceContext } from "@/providers/RaidInstanceLayoutProvider";
|
||||||
@@ -11,6 +11,7 @@ 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";
|
||||||
|
import { useNavigate } from "react-router";
|
||||||
import PersonSelectorModal from "../person/modals/PersonSelectorModal";
|
import PersonSelectorModal from "../person/modals/PersonSelectorModal";
|
||||||
import RaidLayoutSelectorModal from "../raidLayout/modal/RaidLayoutSelectorModal";
|
import RaidLayoutSelectorModal from "../raidLayout/modal/RaidLayoutSelectorModal";
|
||||||
|
|
||||||
@@ -28,6 +29,7 @@ export default function RaidInstanceHeader(){
|
|||||||
} = useRaidInstanceContext();
|
} = useRaidInstanceContext();
|
||||||
|
|
||||||
const { accountPermissions, raidGroupPermissions } = useAuth();
|
const { accountPermissions, raidGroupPermissions } = useAuth();
|
||||||
|
const navigate = useNavigate();
|
||||||
|
|
||||||
const [ displayRaidLayoutSelectorModal, setDisplayRaidLayoutSelectorModal ] = useState(false);
|
const [ displayRaidLayoutSelectorModal, setDisplayRaidLayoutSelectorModal ] = useState(false);
|
||||||
const [ displayRosterSelectorModal, setDisplayRosterSelectorModal ] = useState(false);
|
const [ displayRosterSelectorModal, setDisplayRosterSelectorModal ] = useState(false);
|
||||||
@@ -55,19 +57,50 @@ export default function RaidInstanceHeader(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Mutations
|
//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: 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 = () => {
|
const saveRaidInstance = () => {
|
||||||
updateRaidInstanceMutate(raidInstance!);
|
if(!raidInstance?.raidInstanceId || raidInstance?.raidInstanceId === ""){
|
||||||
updatePersonCharacterXrefsMutate(personCharacterXrefs);
|
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(() => {
|
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");
|
addSuccessMessage("Raid Instance Saved");
|
||||||
updateRaidInstanceReset();
|
updateRaidInstanceReset();
|
||||||
updatePersonCharacterXrefsReset();
|
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"){
|
else if(updateRaidInstanceStatus === "error"){
|
||||||
addErrorMessage("Error Saving Raid Instance: " + updateRaidInstanceError.message);
|
addErrorMessage("Error Saving Raid Instance: " + updateRaidInstanceError.message);
|
||||||
@@ -77,7 +110,7 @@ export default function RaidInstanceHeader(){
|
|||||||
addErrorMessage("Error Saving Raid Instance: " + updatePersonCharacterXrefsError.message);
|
addErrorMessage("Error Saving Raid Instance: " + updatePersonCharacterXrefsError.message);
|
||||||
updatePersonCharacterXrefsReset();
|
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 (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user