diff --git a/apps/web/src/routes/(dashboard)/perfil/+page.svelte b/apps/web/src/routes/(dashboard)/perfil/+page.svelte index dc835ef..95c78f1 100644 --- a/apps/web/src/routes/(dashboard)/perfil/+page.svelte +++ b/apps/web/src/routes/(dashboard)/perfil/+page.svelte @@ -110,8 +110,62 @@ // Extração de meusTimesGestor const meusTimesGestor = $derived(meusTimesGestorQuery?.data || []); - // Verificar se é gestor - const ehGestor = $derived((meusTimesGestor || []).length > 0); + // Estado estável para controlar se é gestor (evita desaparecimento das abas) + let ehGestorEstavel = $state(false); + let ultimaVerificacaoGestor = $state(null); + + // Calcular se é gestor - com lógica mais robusta (sem atualizar estado aqui) + const ehGestorCalculado = $derived.by(() => { + // Verificar se tem times como gestor + const temTimesComoGestor = (meusTimesGestor || []).length > 0; + + // Verificar se tem role de TI que pode aprovar (TI_MASTER, TI_ADMIN) + const rolePermiteAprovacao = currentUser?.data?.role?.nome === 'TI_MASTER' || + currentUser?.data?.role?.nome === 'TI_ADMIN'; + + // Verificar se tem solicitações de subordinados (indica que é gestor) + const temSolicitacoesSubordinados = (solicitacoesSubordinados || []).length > 0 || + (ausenciasSubordinados || []).length > 0; + + // É gestor se: tem times OU tem role de TI OU tem solicitações de subordinados + return temTimesComoGestor || rolePermiteAprovacao || temSolicitacoesSubordinados; + }); + + // Efeito para atualizar o estado estável (evita desaparecimento das abas) + $effect(() => { + const resultado = ehGestorCalculado; + + // Log para depuração (apenas quando mudar) + if (import.meta.env.DEV && resultado !== ehGestorEstavel) { + console.log('🔍 [Perfil] Status de gestor mudou:', { + temTimesComoGestor: (meusTimesGestor || []).length > 0, + rolePermiteAprovacao: currentUser?.data?.role?.nome === 'TI_MASTER' || currentUser?.data?.role?.nome === 'TI_ADMIN', + role: currentUser?.data?.role?.nome, + temSolicitacoesSubordinados: (solicitacoesSubordinados || []).length > 0 || (ausenciasSubordinados || []).length > 0, + resultado, + meusTimesGestor: meusTimesGestor?.length || 0, + timestamp: new Date().toISOString() + }); + } + + // Atualizar estado estável apenas se o resultado for true (para manter as abas visíveis) + // ou se já passou tempo suficiente desde a última verificação + const agora = Date.now(); + if (resultado) { + ehGestorEstavel = true; + ultimaVerificacaoGestor = agora; + } else if (ultimaVerificacaoGestor === null || (agora - ultimaVerificacaoGestor) > 5000) { + // Só atualiza para false se passou mais de 5 segundos desde a última verificação positiva + // Isso evita que as abas desapareçam durante atualizações temporárias das queries + ehGestorEstavel = resultado; + if (!resultado) { + ultimaVerificacaoGestor = agora; + } + } + }); + + // Valor final usado para renderizar as abas + const ehGestor = $derived(ehGestorEstavel); // Filtrar minhas solicitações const solicitacoesFiltradas = $derived(