From 9fcc5bb836014ddccef2e683ddc4e64716440391 Mon Sep 17 00:00:00 2001 From: Hikari Date: Mon, 9 Mar 2026 22:02:56 -0700 Subject: [PATCH] feat: persist zone selection across panel navigation in sessionStorage Both the boss panel and the quest panel now read their active zone from sessionStorage on mount and write back to it whenever the user selects a new zone. The stored selections are cleared automatically when the session ends, and fall back to verdant_vale when no stored value exists. Closes #36 --- apps/web/src/components/game/bossPanel.tsx | 11 +++++++++-- apps/web/src/components/game/questPanel.tsx | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/apps/web/src/components/game/bossPanel.tsx b/apps/web/src/components/game/bossPanel.tsx index df47f6e..0985962 100644 --- a/apps/web/src/components/game/bossPanel.tsx +++ b/apps/web/src/components/game/bossPanel.tsx @@ -239,7 +239,9 @@ const BossPanel = (): JSX.Element => { const [ challengingBossId, setChallengingBossId ] = useState( null, ); - const [ activeZoneId, setActiveZoneId ] = useState("verdant_vale"); + const [ activeZoneId, setActiveZoneId ] = useState(() => { + return sessionStorage.getItem("elysium_boss_zone") ?? "verdant_vale"; + }); const [ showLocked, setShowLocked ] = useState(true); if (state === null) { @@ -317,6 +319,11 @@ const BossPanel = (): JSX.Element => { } } + function handleZoneSelect(zoneId: string): void { + setActiveZoneId(zoneId); + sessionStorage.setItem("elysium_boss_zone", zoneId); + } + function handleToggle(): void { setShowLocked((current) => { return !current; @@ -374,7 +381,7 @@ const BossPanel = (): JSX.Element => { diff --git a/apps/web/src/components/game/questPanel.tsx b/apps/web/src/components/game/questPanel.tsx index 3aafb03..33b86dd 100644 --- a/apps/web/src/components/game/questPanel.tsx +++ b/apps/web/src/components/game/questPanel.tsx @@ -184,7 +184,9 @@ const QuestCard = ({ */ const QuestPanel = (): JSX.Element => { const { state, toggleAutoQuest } = useGame(); - const [ activeZoneId, setActiveZoneId ] = useState("verdant_vale"); + const [ activeZoneId, setActiveZoneId ] = useState(() => { + return sessionStorage.getItem("elysium_quest_zone") ?? "verdant_vale"; + }); const [ showLocked, setShowLocked ] = useState(true); if (state === null) { @@ -243,6 +245,11 @@ const QuestPanel = (): JSX.Element => { } } + function handleZoneSelect(zoneId: string): void { + setActiveZoneId(zoneId); + sessionStorage.setItem("elysium_quest_zone", zoneId); + } + function handleToggle(): void { setShowLocked((current) => { return !current; @@ -285,7 +292,7 @@ const QuestPanel = (): JSX.Element => {