import { Badge, Box, Button, Flex, FormLabel, Switch, Wrap, } from "@chakra-ui/react"; import { t, Trans } from "@lingui/macro"; import BuildStats from "components/analyzer/BuildStats"; import EditableBuilds from "components/analyzer/EditableBuilds"; import { ViewSlotsAbilities } from "components/builds/ViewSlots"; import Breadcrumbs from "components/common/Breadcrumbs"; import WeaponSelector from "components/common/WeaponSelector"; import { isAbilityArray } from "lib/lists/abilities"; import { isWeapon } from "lib/lists/weapons"; import { AbilityOrUnknown } from "lib/types"; import useAbilityEffects from "lib/useAbilityEffects"; import { useMyTheme } from "lib/useMyTheme"; import { useRouter } from "next/router"; import { useEffect, useState } from "react"; import { FiSettings } from "react-icons/fi"; const CURRENT_PATCH = "5.3."; const defaultBuild: ViewSlotsAbilities = { headAbilities: ["UNKNOWN", "UNKNOWN", "UNKNOWN", "UNKNOWN"], clothingAbilities: ["UNKNOWN", "UNKNOWN", "UNKNOWN", "UNKNOWN"], shoesAbilities: ["UNKNOWN", "UNKNOWN", "UNKNOWN", "UNKNOWN"], }; const BuildAnalyzerPage = () => { const router = useRouter(); const { gray } = useMyTheme(); const [build, setBuild] = useState({ ...defaultBuild, }); const [otherBuild, setOtherBuild] = useState({ ...defaultBuild, }); const [weapon, setWeapon] = useState("Splattershot Jr."); const [showOther, setShowOther] = useState(false); const [showNotActualProgress, setShowNotActualProgress] = useState(false); const [startChartsAtZero, setStartChartsAtZero] = useState(true); const [otherFocused, setOtherFocused] = useState(false); const [hideExtra, setHideExtra] = useState(true); const [showSettings, setShowSettings] = useState(false); const [bonusAp, setBonusAp] = useState< Partial> >({}); const [otherBonusAp, setOtherBonusAp] = useState< Partial> >({}); const [lde, setLde] = useState(0); const [otherLde, setOtherLde] = useState(0); const explanations = useAbilityEffects({ abilities: build, weapon, bonusAp, lde, }); const otherExplanations = useAbilityEffects({ abilities: otherBuild, weapon, bonusAp: otherBonusAp, lde: otherLde, }); useEffect(parseQuery, []); return ( <> Patch {CURRENT_PATCH} AP = Ability Point = Mains * 10 + Subs * 3 {weapon && ( { setOtherFocused(!otherFocused); }} otherFocused={otherFocused} bonusAp={bonusAp} setBonusAp={setBonusAp} otherBonusAp={otherBonusAp} setOtherBonusAp={setOtherBonusAp} lde={lde} setLde={setLde} otherLde={otherLde} setOtherLde={setOtherLde} /> )} {showSettings && ( setHideExtra(!hideExtra)} mr="0.5em" /> {t`Hide stats at base value`} setShowNotActualProgress(!showNotActualProgress) } mr="0.5em" /> {t`Progress bars show progress to max value`} setStartChartsAtZero(!startChartsAtZero)} mr="0.5em" /> {t`Start charts Y axis from zero`} )} ); function parseQuery() { const query = router.query; const weapon = isWeapon(query.weapon) ? query.weapon : "Splattershot Jr."; const headAbilities = typeof query.head === "string" && isAbilityArray(query.head.split(","), "HEAD") ? query.head.split(",") : ["UNKNOWN", "UNKNOWN", "UNKNOWN", "UNKNOWN"]; const clothingAbilities = typeof query.clothing === "string" && isAbilityArray(query.clothing.split(","), "CLOTHING") ? query.clothing.split(",") : ["UNKNOWN", "UNKNOWN", "UNKNOWN", "UNKNOWN"]; const shoesAbilities = typeof query.shoes === "string" && isAbilityArray(query.shoes.split(","), "SHOES") ? query.shoes.split(",") : ["UNKNOWN", "UNKNOWN", "UNKNOWN", "UNKNOWN"]; setWeapon(weapon as string); setBuild({ headAbilities: headAbilities as AbilityOrUnknown[], clothingAbilities: clothingAbilities as AbilityOrUnknown[], shoesAbilities: shoesAbilities as AbilityOrUnknown[], }); } }; export default BuildAnalyzerPage;