diff --git a/nuxt4/app/composables/useCatacion.ts b/nuxt4/app/composables/useCatacion.ts index 54cda76..7203415 100644 --- a/nuxt4/app/composables/useCatacion.ts +++ b/nuxt4/app/composables/useCatacion.ts @@ -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('tab-activa', () => 'organoleptica') - const subcategoriasActivas = useState('subcategorias-activas', () => []) + const subcategoriasPorTab = useState('subcategorias-por-tab', cargarSubcategoriasDesdeStorage) const accordionAbierto = useState('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, diff --git a/nuxt4/app/pages/cata/sesion.vue b/nuxt4/app/pages/cata/sesion.vue index db92658..73e2797 100644 --- a/nuxt4/app/pages/cata/sesion.vue +++ b/nuxt4/app/pages/cata/sesion.vue @@ -144,7 +144,7 @@