Feat: Agregar persistencia de subcategorías seleccionadas por tab
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s

Implementa la funcionalidad para que las subcategorías seleccionadas persistan:
- Entre cambios de tabs (cada tab mantiene sus propias subcategorías)
- Entre refrescos de página (guardado en localStorage)

Cambios técnicos:
- Modificado useCatacion.ts para guardar subcategorías por tab en lugar de array global
- Agregada función actualizarSubcategorias() que persiste en localStorage
- subcategoriasActivas ahora es computed basado en la tab activa
- Removida limpieza de subcategorías al cambiar de tab en sesion.vue
- Actualizado toggleSubcategoria para usar la nueva función de persistencia
This commit is contained in:
2025-10-18 14:56:09 -06:00
parent c27da68682
commit 45d4b1d663
2 changed files with 60 additions and 6 deletions

View File

@@ -16,14 +16,62 @@ export type SubcategoriaDescriptivaAfectiva = 'descriptiva' | 'afectiva' | 'frag
// Tipo unión de todas las subcategorías
export type Subcategoria = SubcategoriaOrganoleptica | SubcategoriaDescriptivaAfectiva | null
// Tipo para las subcategorías por tab
export type SubcategoriasPorTab = {
'organoleptica': Subcategoria[]
'descriptiva-afectiva': Subcategoria[]
'defectos': Subcategoria[]
'impresion-global': Subcategoria[]
}
// Clave para localStorage
const STORAGE_KEY_SUBCATEGORIAS = 'riocata-subcategorias-activas'
export const useCatacion = () => {
const { sesionActiva, cargando, error, guardar, actualizar, eliminar } = useIndexedDB()
// Cargar subcategorías desde localStorage
const cargarSubcategoriasDesdeStorage = (): SubcategoriasPorTab => {
if (process.client) {
try {
const stored = localStorage.getItem(STORAGE_KEY_SUBCATEGORIAS)
if (stored) {
return JSON.parse(stored)
}
} catch (err) {
console.warn('Error al cargar subcategorías desde localStorage:', err)
}
}
return {
'organoleptica': [],
'descriptiva-afectiva': [],
'defectos': [],
'impresion-global': [],
}
}
// Estado de la UI
const tabActiva = useState<TabCatacion>('tab-activa', () => 'organoleptica')
const subcategoriasActivas = useState<Subcategoria[]>('subcategorias-activas', () => [])
const subcategoriasPorTab = useState<SubcategoriasPorTab>('subcategorias-por-tab', cargarSubcategoriasDesdeStorage)
const accordionAbierto = useState<string[]>('accordion-abierto', () => [])
// Computed para obtener las subcategorías de la tab actual
const subcategoriasActivas = computed(() => subcategoriasPorTab.value[tabActiva.value])
/**
* Actualiza las subcategorías de la tab actual y las guarda en localStorage
*/
const actualizarSubcategorias = (subcategorias: Subcategoria[]) => {
subcategoriasPorTab.value[tabActiva.value] = subcategorias
if (process.client) {
try {
localStorage.setItem(STORAGE_KEY_SUBCATEGORIAS, JSON.stringify(subcategoriasPorTab.value))
} catch (err) {
console.warn('Error al guardar subcategorías en localStorage:', err)
}
}
}
/**
* Crea una nueva sesión de catación
*/
@@ -305,6 +353,7 @@ export const useCatacion = () => {
tabActiva,
subcategoriasActivas,
accordionAbierto,
actualizarSubcategorias,
// Estadísticas
estadisticasSesion,