Fix: Cambiar accordion de multiple a single con collapsible
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m6s

- Cambiar de type='multiple' a type='single' (solo un item abierto a la vez)
- Todos los accordions pueden estar cerrados (collapsible: true por defecto)
- Actualizar estado accordionAbierto de string[] a string | undefined
- Actualizar lógica toggleCollapseAll para modo single
- Agregar border-t al content del accordion para mejor separación visual
- Actualizar títulos del botón flotante: 'Abrir primera muestra' / 'Cerrar muestra abierta'
This commit is contained in:
2025-10-18 16:33:24 -06:00
parent c2ba2a561b
commit 0cdae3d4f5
2 changed files with 11 additions and 12 deletions

View File

@@ -53,7 +53,7 @@ export const useCatacion = () => {
// Estado de la UI // Estado de la UI
const tabActiva = useState<TabCatacion>('tab-activa', () => 'organoleptica') const tabActiva = useState<TabCatacion>('tab-activa', () => 'organoleptica')
const subcategoriasPorTab = useState<SubcategoriasPorTab>('subcategorias-por-tab', cargarSubcategoriasDesdeStorage) const subcategoriasPorTab = useState<SubcategoriasPorTab>('subcategorias-por-tab', cargarSubcategoriasDesdeStorage)
const accordionAbierto = useState<string[]>('accordion-abierto', () => []) const accordionAbierto = useState<string | undefined>('accordion-abierto', () => undefined)
// Computed para obtener las subcategorías de la tab actual // Computed para obtener las subcategorías de la tab actual
const subcategoriasActivas = computed(() => subcategoriasPorTab.value[tabActiva.value]) const subcategoriasActivas = computed(() => subcategoriasPorTab.value[tabActiva.value])
@@ -81,7 +81,7 @@ export const useCatacion = () => {
await guardar(nuevaSesion) await guardar(nuevaSesion)
// Resetear estado de UI // Resetear estado de UI
tabActiva.value = 'organoleptica' tabActiva.value = 'organoleptica'
accordionAbierto.value = [] accordionAbierto.value = undefined
return nuevaSesion return nuevaSesion
} catch (err) { } catch (err) {
console.error('Error al crear nueva sesión:', err) console.error('Error al crear nueva sesión:', err)
@@ -308,7 +308,7 @@ export const useCatacion = () => {
try { try {
await eliminar() await eliminar()
tabActiva.value = 'organoleptica' tabActiva.value = 'organoleptica'
accordionAbierto.value = [] accordionAbierto.value = undefined
} catch (err) { } catch (err) {
console.error('Error al eliminar sesión:', err) console.error('Error al eliminar sesión:', err)
throw err throw err

View File

@@ -158,12 +158,11 @@
<div class="muestras-container container mx-auto px-0 sm:px-4 py-4"> <div class="muestras-container container mx-auto px-0 sm:px-4 py-4">
<UAccordion <UAccordion
v-model="accordionAbierto" v-model="accordionAbierto"
type="multiple"
:items="accordionItems" :items="accordionItems"
:ui="{ :ui="{
item: 'border-b border-default', item: 'border-b border-default',
trigger: 'accordion-trigger w-full px-4 py-3 transition-colors', trigger: 'accordion-trigger w-full px-4 py-3 transition-colors',
content: '', content: 'border-t border-default',
}" }"
> >
<!-- Header personalizado con ResumenMuestra --> <!-- Header personalizado con ResumenMuestra -->
@@ -196,7 +195,7 @@
<button <button
class="floating-action-button cata-button p-2 rounded-full flex items-center justify-center" class="floating-action-button cata-button p-2 rounded-full flex items-center justify-center"
@click="toggleCollapseAll" @click="toggleCollapseAll"
:title="todosColapsados ? 'Expandir todas las muestras' : 'Colapsar todas las muestras'" :title="todosColapsados ? 'Abrir primera muestra' : 'Cerrar muestra abierta'"
> >
<UIcon <UIcon
:name="todosColapsados ? 'i-lucide-maximize-2' : 'i-lucide-minimize-2'" :name="todosColapsados ? 'i-lucide-maximize-2' : 'i-lucide-minimize-2'"
@@ -313,17 +312,17 @@ const obtenerMuestraPorValue = (value: string): Muestra | null => {
// Verificar si todos los acordiones están colapsados // Verificar si todos los acordiones están colapsados
const todosColapsados = computed(() => { const todosColapsados = computed(() => {
return accordionAbierto.value.length === 0 return !accordionAbierto.value
}) })
// Colapsar o expandir todos los acordiones // Colapsar o expandir el primer accordion
const toggleCollapseAll = () => { const toggleCollapseAll = () => {
if (todosColapsados.value) { if (todosColapsados.value) {
// Expandir todos: agregar todos los values // Abrir el primero
accordionAbierto.value = accordionItems.value.map(item => item.value) accordionAbierto.value = accordionItems.value[0]?.value
} else { } else {
// Colapsar todos: vaciar el array // Cerrar todo
accordionAbierto.value = [] accordionAbierto.value = undefined
} }
} }