refactor: enhance gestor status calculation and stability
- Introduced a more robust calculation for determining if a user is a gestor, considering team membership, roles, and subordinate requests. - Implemented stable state management to prevent UI flickering during updates. - Added logging for debugging purposes to track changes in gestor status. - Improved overall user experience by ensuring consistent visibility of tabs based on gestor status.
This commit is contained in:
@@ -110,8 +110,62 @@
|
|||||||
// Extração de meusTimesGestor
|
// Extração de meusTimesGestor
|
||||||
const meusTimesGestor = $derived(meusTimesGestorQuery?.data || []);
|
const meusTimesGestor = $derived(meusTimesGestorQuery?.data || []);
|
||||||
|
|
||||||
// Verificar se é gestor
|
// Estado estável para controlar se é gestor (evita desaparecimento das abas)
|
||||||
const ehGestor = $derived((meusTimesGestor || []).length > 0);
|
let ehGestorEstavel = $state(false);
|
||||||
|
let ultimaVerificacaoGestor = $state<number | null>(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
|
// Filtrar minhas solicitações
|
||||||
const solicitacoesFiltradas = $derived(
|
const solicitacoesFiltradas = $derived(
|
||||||
|
|||||||
Reference in New Issue
Block a user