diff --git a/src/layout/melissa/MelissaMenu.vue b/src/layout/melissa/MelissaMenu.vue index c822284..2234adc 100644 --- a/src/layout/melissa/MelissaMenu.vue +++ b/src/layout/melissa/MelissaMenu.vue @@ -18,7 +18,7 @@ * - select(key) — sub-item clicado (parent decide navegação) * - close — clique fora ou X */ -import { ref, computed } from 'vue'; +import { ref, computed, watch } from 'vue'; import { useRouter } from 'vue-router'; import { sessionUser, sessionRole } from '@/app/session'; import { supabase } from '@/lib/supabase/client'; @@ -27,7 +27,7 @@ import { useLayout } from '@/layout/composables/layout'; import { useUserSettingsPersistence } from '@/composables/useUserSettingsPersistence'; import { primaryColors, surfaces, presetOptions, applyThemeEngine } from '@/theme/theme.options'; -defineProps({ +const props = defineProps({ secaoAtiva: { type: String, default: null } }); @@ -173,9 +173,32 @@ const CATEGORIAS = [ ]; // ── Estado ────────────────────────────────────────────────────── -const selectedKey = ref(CATEGORIAS[0].key); // primeira categoria por default +// Resolve a categoria que contem o sub-item ativo. Se nenhum casa, +// volta pra primeira (agenda-pacientes) — comportamento default. +function categoryKeyFor(itemKey) { + if (!itemKey) return null; + for (const cat of CATEGORIAS) { + for (const group of cat.groups) { + if (group.items.some((it) => it.key === itemKey)) return cat.key; + } + } + return null; +} + +const selectedKey = ref(categoryKeyFor(props.secaoAtiva) || CATEGORIAS[0].key); const copiado = ref(false); +// Sincroniza o destaque com a sessao ativa — se o user troca de +// "Lancamentos" pra "Agenda" sem fechar o menu, o selecionado +// acompanha a sessao corrente. +watch( + () => props.secaoAtiva, + (val) => { + const cat = categoryKeyFor(val); + if (cat) selectedKey.value = cat; + } +); + // Drill-down mobile: false = lista de categorias, true = sub-itens da // categoria escolhida. CSS controla visibilidade via translateX em