import PrimaryButton from "@/components/button/PrimaryButton"; import SecondaryButton from "@/components/button/SecondaryButton"; import GameSelector from "@/components/game/GameSelector"; import IconInput from "@/components/input/IconInput"; import TextInput from "@/components/input/TextInput"; import RaidBuilderModal from "@/components/modal/RaidBuilderModal"; import { useGetGame } from "@/hooks/GameHooks"; import { useCreateRaidGroup, useUpdateRaidGroup } from "@/hooks/RaidGroupHooks"; import { Game } from "@/interface/Game"; import { RaidGroup } from "@/interface/RaidGroup"; import { useTimedModal } from "@/providers/TimedModalProvider"; import { useEffect, useState } from "react"; export default function RaidGroupModal({ display, close, raidGroup }:{ display: boolean; close: () => void; raidGroup?: RaidGroup; }){ const [ raidGroupName, setRaidGroupName ] = useState(raidGroup?.raidGroupName); const [ raidGroupIcon, setRaidGroupIcon ] = useState(raidGroup?.raidGroupIcon); const [ iconFile, setIconFile ] = useState(null); const [ game, setGame ] = useState(); const modalId = crypto.randomUUID().replaceAll("-", ""); useEffect(() => { setRaidGroupName(raidGroup?.raidGroupName ?? ""); setRaidGroupIcon(raidGroup?.raidGroupIcon ?? ""); setGame(undefined); setIconFile(null); }, [ display, raidGroup, setRaidGroupName, setRaidGroupIcon ]); const updateRaidGroupMutate = useUpdateRaidGroup(); const createRaidGroupMutate = useCreateRaidGroup(); const { addSuccessMessage, addErrorMessage } = useTimedModal(); const gameQuery = useGetGame(raidGroup?.gameId ?? "", raidGroup === undefined); if(gameQuery.status === "success" && !game){ setGame(gameQuery.data); } useEffect(() => { if(updateRaidGroupMutate.status === "success"){ updateRaidGroupMutate.reset(); addSuccessMessage(`Updated raid group ${raidGroup?.raidGroupName}`); close(); } else if(updateRaidGroupMutate.status === "error"){ updateRaidGroupMutate.reset(); addErrorMessage(`Error updating raid group ${raidGroup?.raidGroupName}: ${updateRaidGroupMutate.error.message}`); console.log(updateRaidGroupMutate.error); } else if(createRaidGroupMutate.status === "success"){ createRaidGroupMutate.reset(); addSuccessMessage(`Created raid group ${raidGroup?.raidGroupName}`); close(); } else if(createRaidGroupMutate.status === "error"){ createRaidGroupMutate.reset(); addErrorMessage(`Error creating raid group ${raidGroup?.raidGroupName}: ${createRaidGroupMutate.error.message}`); console.log(createRaidGroupMutate.error); } }, [ updateRaidGroupMutate, createRaidGroupMutate, raidGroup, close, addSuccessMessage, addErrorMessage ]); const updateRaidGroup = () => { if(!raidGroup?.raidGroupId || raidGroup.raidGroupId.trim().length <= 0){ addErrorMessage("Raid group ID not found"); return; } else if(!raidGroupName || raidGroupName.trim().length <= 0){ addErrorMessage("Raid group name is required"); return; } else if(!game){ addErrorMessage("Game is required"); return; } updateRaidGroupMutate.mutate({raidGroup: {raidGroupId: raidGroup?.raidGroupId, raidGroupName, gameId: game?.gameId, raidGroupIcon} as RaidGroup, iconFile}); } const createRaidGroup = () => { if(!raidGroupName || raidGroupName.trim().length <= 0){ addErrorMessage("Raid group name is required"); return; } else if(!game){ addErrorMessage("Game is required"); return; } createRaidGroupMutate.mutate({raidGroupName: raidGroupName ?? "", gameId: game?.gameId ?? "", iconFile}); } return (
setRaidGroupName(e.target.value)} />
{setIconFile(file); setRaidGroupIcon(undefined);}} addErrorMessage={addErrorMessage} /> } modalFooter={ <> {raidGroup ? "Update" : "Create"} Cancel } /> ); }