fix: persist enchantment design state across tab navigation
Build and Publish Mana Loop Docker Image / build-and-publish (push) Failing after 1m2s

- EnchantmentDesigner now reads selection state directly from useCraftingStore
  instead of receiving it as props, so state survives tab unmount/remount
- EnchanterSubTab no longer uses local useState for selectedEquipmentType,
  selectedEffects, designName, selectedDesign — all sourced from store
- Removed unused EnchantmentDesignerProps interface from types
- All 1158 existing tests pass, no new type errors introduced

Fixes #366
This commit is contained in:
2026-06-11 11:54:45 +02:00
parent 9476e92a4b
commit 1dce061cdd
5 changed files with 40 additions and 50 deletions
@@ -9,7 +9,6 @@ import {
EnchantmentApplier,
} from '@/components/game/crafting';
import { useCraftingStore } from '@/lib/game/stores';
import type { DesignEffect } from '@/lib/game/types';
import { DebugName } from '@/components/game/debug/debug-context';
type EnchanterPhase = 'design' | 'prepare' | 'apply';
@@ -23,14 +22,17 @@ const PHASES: { key: EnchanterPhase; label: string; icon: typeof PenLine }[] = [
export function EnchanterSubTab() {
const [activePhase, setActivePhase] = useState<EnchanterPhase>('design');
// Shared state for the enchantment flow
const [selectedEquipmentType, setSelectedEquipmentType] = useState<string | null>(null);
const [selectedEffects, setSelectedEffects] = useState<DesignEffect[]>([]);
const [designName, setDesignName] = useState('');
const [selectedDesign, setSelectedDesign] = useState<string | null>(null);
const [selectedEquipmentInstance, setSelectedEquipmentInstance] = useState<string | null>(null);
const resetEnchantmentSelection = useCraftingStore((s) => s.resetEnchantmentSelection);
const setSelectedEquipmentInstance = useCraftingStore((s) => s.setSelectedEquipmentInstance);
const setSelectedDesign = useCraftingStore((s) => s.setSelectedDesign);
// Read persisted selection state from the store
const selectedEquipmentInstance = useCraftingStore(
(s) => s.enchantmentSelection.selectedEquipmentInstance,
);
const selectedDesign = useCraftingStore(
(s) => s.enchantmentSelection.selectedDesign,
);
const handlePhaseChange = (phase: EnchanterPhase) => {
setActivePhase(phase);
@@ -67,16 +69,7 @@ export function EnchanterSubTab() {
{/* Phase content */}
{activePhase === 'design' && (
<EnchantmentDesigner
selectedEquipmentType={selectedEquipmentType}
setSelectedEquipmentType={setSelectedEquipmentType}
selectedEffects={selectedEffects}
setSelectedEffects={setSelectedEffects}
designName={designName}
setDesignName={setDesignName}
selectedDesign={selectedDesign}
setSelectedDesign={setSelectedDesign}
/>
<EnchantmentDesigner />
)}
{activePhase === 'prepare' && (