import React, { useState } from "react" import { getCookie } from "cookies-next" import { useRouter } from "next/router" import { useTranslation } from "next-i18next" import { AxiosResponse } from "axios" import * as Dialog from "@radix-ui/react-dialog" import AXSelect from "~components/AxSelect" import ElementToggle from "~components/ElementToggle" import WeaponKeyDropdown from "~components/WeaponKeyDropdown" import Button from "~components/Button" import api from "~utils/api" import { appState } from "~utils/appState" import CrossIcon from "~public/icons/Cross.svg" import "./index.scss" interface GridWeaponObject { weapon: { element?: number weapon_key1_id?: string weapon_key2_id?: string weapon_key3_id?: string ax_modifier1?: number ax_modifier2?: number ax_strength1?: number ax_strength2?: number } } interface Props { gridWeapon: GridWeapon children: React.ReactNode } const WeaponModal = (props: Props) => { const router = useRouter() const locale = router.locale && ["en", "ja"].includes(router.locale) ? router.locale : "en" const { t } = useTranslation("common") // Cookies const cookie = getCookie("account") const accountData: AccountCookie = cookie ? JSON.parse(cookie as string) : null const headers = accountData ? { Authorization: `Bearer ${accountData.token}` } : {} // Refs const weaponKey1Select = React.createRef() const weaponKey2Select = React.createRef() const weaponKey3Select = React.createRef() // State const [open, setOpen] = useState(false) const [formValid, setFormValid] = useState(false) const [element, setElement] = useState(-1) const [primaryAxModifier, setPrimaryAxModifier] = useState(-1) const [secondaryAxModifier, setSecondaryAxModifier] = useState(-1) const [primaryAxValue, setPrimaryAxValue] = useState(0.0) const [secondaryAxValue, setSecondaryAxValue] = useState(0.0) function receiveAxValues( primaryAxModifier: number, primaryAxValue: number, secondaryAxModifier: number, secondaryAxValue: number ) { setPrimaryAxModifier(primaryAxModifier) setSecondaryAxModifier(secondaryAxModifier) setPrimaryAxValue(primaryAxValue) setSecondaryAxValue(secondaryAxValue) } function receiveAxValidity(isValid: boolean) { setFormValid(isValid) } function receiveElementValue(element: string) { setElement(parseInt(element)) } function prepareObject() { let object: GridWeaponObject = { weapon: {} } if (props.gridWeapon.object.element == 0) object.weapon.element = element if ([2, 3, 17, 24].includes(props.gridWeapon.object.series)) object.weapon.weapon_key1_id = weaponKey1Select.current?.value if ([2, 3, 17].includes(props.gridWeapon.object.series)) object.weapon.weapon_key2_id = weaponKey2Select.current?.value if (props.gridWeapon.object.series == 17) object.weapon.weapon_key3_id = weaponKey3Select.current?.value if (props.gridWeapon.object.ax > 0) { object.weapon.ax_modifier1 = primaryAxModifier object.weapon.ax_modifier2 = secondaryAxModifier object.weapon.ax_strength1 = primaryAxValue object.weapon.ax_strength2 = secondaryAxValue } return object } async function updateWeapon() { const updateObject = prepareObject() return await api.endpoints.grid_weapons .update(props.gridWeapon.id, updateObject, headers) .then((response) => processResult(response)) .catch((error) => processError(error)) } function processResult(response: AxiosResponse) { const gridWeapon: GridWeapon = response.data.grid_weapon if (gridWeapon.mainhand) appState.grid.weapons.mainWeapon = gridWeapon else appState.grid.weapons.allWeapons[gridWeapon.position] = gridWeapon setOpen(false) } function processError(error: any) { console.error(error) } const elementSelect = () => { return (

{t("modals.weapon.subtitles.element")}

) } const keySelect = () => { return (

{t("modals.weapon.subtitles.weapon_keys")}

{[2, 3, 17, 22].includes(props.gridWeapon.object.series) ? ( ) : ( "" )} {[2, 3, 17].includes(props.gridWeapon.object.series) ? ( ) : ( "" )} {props.gridWeapon.object.series == 17 ? ( ) : ( "" )}
) } const axSelect = () => { return (

{t("modals.weapon.subtitles.ax_skills")}

) } function openChange(open: boolean) { setFormValid(false) setOpen(open) } return ( {props.children} event.preventDefault()} >
{t("modals.weapon.title")} {props.gridWeapon.object.name[locale]}
{props.gridWeapon.object.element == 0 ? elementSelect() : ""} {[2, 3, 17, 24].includes(props.gridWeapon.object.series) ? keySelect() : ""} {props.gridWeapon.object.ax > 0 ? axSelect() : ""}
) } export default WeaponModal