Files
FranciaOcupada/client/src/hooks/useSessionStorage.ts
Resistencia Dev e953babdb8
Some checks failed
CI/CD - Francia Ocupada (La Resistencia) / build-and-deploy (push) Failing after 5s
fix: Corregir errores de linter y dependencias de React para Gitea
- Memoizar acciones en useSocket (useMemo)
- Memoizar funciones en useSessionStorage (useCallback)
- Completar dependency arrays en page.tsx y dashboard/page.tsx
- Resolver advertencias de 'exhaustive-deps' para asegurar builds limpios
2025-12-22 18:50:02 +01:00

56 lines
1.6 KiB
TypeScript

import { useState, useEffect, useCallback } from 'react';
interface SessionData {
playerName: string;
fullPlayerName: string;
currentView: 'login' | 'lobby' | 'game';
roomId?: string;
}
export function useSessionStorage() {
const [session, setSession] = useState<SessionData | null>(null);
// Cargar sesión al iniciar
useEffect(() => {
const savedSession = localStorage.getItem('resistencia_session');
if (savedSession) {
try {
const parsed = JSON.parse(savedSession);
setSession(parsed);
} catch (e) {
console.error('Error parsing session:', e);
localStorage.removeItem('resistencia_session');
}
}
}, []);
// Guardar sesión
const saveSession = useCallback((data: SessionData) => {
localStorage.setItem('resistencia_session', JSON.stringify(data));
setSession(data);
}, []);
// Actualizar sesión parcialmente
const updateSession = useCallback((partial: Partial<SessionData>) => {
setSession(prev => {
if (!prev) return null;
const updated = { ...prev, ...partial };
localStorage.setItem('resistencia_session', JSON.stringify(updated));
return updated;
});
}, []);
// Limpiar sesión
const clearSession = useCallback(() => {
localStorage.removeItem('resistencia_session');
setSession(null);
}, []);
return {
session,
saveSession,
updateSession,
clearSession
};
}