feat: Implement localStorage persistence for UI panel resize states in Draft and Deck views.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import React, { useState, useMemo } from 'react';
|
||||
import React, { useState, useMemo, useEffect } from 'react';
|
||||
import { socketService } from '../../services/SocketService';
|
||||
import { Save, Layers, Clock, Columns, LayoutTemplate, List, LayoutGrid, ChevronDown, Check, GripVertical } from 'lucide-react';
|
||||
import { StackView } from '../../components/StackView';
|
||||
@@ -239,8 +239,14 @@ export const DeckBuilderView: React.FC<DeckBuilderViewProps> = ({ initialPool, a
|
||||
const [sortDropdownOpen, setSortDropdownOpen] = useState(false);
|
||||
|
||||
// --- Resize State ---
|
||||
const [sidebarWidth, setSidebarWidth] = useState(320); // Initial 320px
|
||||
const [poolHeightPercent, setPoolHeightPercent] = useState(60); // Initial 60% for pool (horizontal layout)
|
||||
const [sidebarWidth, setSidebarWidth] = useState(() => {
|
||||
const saved = localStorage.getItem('deck_sidebarWidth');
|
||||
return saved ? parseInt(saved, 10) : 320;
|
||||
});
|
||||
const [poolHeightPercent, setPoolHeightPercent] = useState(() => {
|
||||
const saved = localStorage.getItem('deck_poolHeightPercent');
|
||||
return saved ? parseFloat(saved) : 60;
|
||||
});
|
||||
|
||||
const sidebarRef = React.useRef<HTMLDivElement>(null);
|
||||
const poolRef = React.useRef<HTMLDivElement>(null);
|
||||
@@ -258,6 +264,15 @@ export const DeckBuilderView: React.FC<DeckBuilderViewProps> = ({ initialPool, a
|
||||
if (poolRef.current) poolRef.current.style.height = `${poolHeightPercent}%`;
|
||||
}, []);
|
||||
|
||||
// Persist Resize
|
||||
useEffect(() => {
|
||||
localStorage.setItem('deck_sidebarWidth', sidebarWidth.toString());
|
||||
}, [sidebarWidth]);
|
||||
|
||||
useEffect(() => {
|
||||
localStorage.setItem('deck_poolHeightPercent', poolHeightPercent.toString());
|
||||
}, [poolHeightPercent]);
|
||||
|
||||
const [pool, setPool] = useState<any[]>(initialPool);
|
||||
const [deck, setDeck] = useState<any[]>([]);
|
||||
const [lands, setLands] = useState({ Plains: 0, Island: 0, Swamp: 0, Mountain: 0, Forest: 0 });
|
||||
|
||||
@@ -61,7 +61,10 @@ export const DraftView: React.FC<DraftViewProps> = ({ draftState, currentPlayerI
|
||||
|
||||
|
||||
// --- UI State & Persistence ---
|
||||
const [sidebarWidth, setSidebarWidth] = useState(320);
|
||||
const [sidebarWidth, setSidebarWidth] = useState(() => {
|
||||
const saved = localStorage.getItem('draft_sidebarWidth');
|
||||
return saved ? parseInt(saved, 10) : 320;
|
||||
});
|
||||
const [poolHeight, setPoolHeight] = useState<number>(() => {
|
||||
const saved = localStorage.getItem('draft_poolHeight');
|
||||
return saved ? parseInt(saved, 10) : 220;
|
||||
@@ -107,6 +110,10 @@ export const DraftView: React.FC<DraftViewProps> = ({ draftState, currentPlayerI
|
||||
localStorage.setItem('draft_poolHeight', poolHeight.toString());
|
||||
}, [poolHeight]);
|
||||
|
||||
useEffect(() => {
|
||||
localStorage.setItem('draft_sidebarWidth', sidebarWidth.toString());
|
||||
}, [sidebarWidth]);
|
||||
|
||||
useEffect(() => {
|
||||
localStorage.setItem('draft_cardScale', cardScale.toString());
|
||||
}, [cardScale]);
|
||||
|
||||
Reference in New Issue
Block a user