fix: persist enchantment design state across tab navigation
Build and Publish Mana Loop Docker Image / build-and-publish (push) Failing after 1m2s
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:
@@ -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' && (
|
||||
|
||||
Reference in New Issue
Block a user