From f48d28067c190990191451647b221cecf1ec5d90 Mon Sep 17 00:00:00 2001 From: deyvisonwanderley Date: Tue, 2 Dec 2025 16:28:35 -0300 Subject: [PATCH] feat: add refresh functionality to absence and vacation requests queries; update backend to support refresh parameter for improved data handling --- .../routes/(dashboard)/perfil/+page.svelte | 59 ++++++++++--------- packages/backend/convex/ausencias.ts | 5 +- packages/backend/convex/ferias.ts | 5 +- 3 files changed, 39 insertions(+), 30 deletions(-) diff --git a/apps/web/src/routes/(dashboard)/perfil/+page.svelte b/apps/web/src/routes/(dashboard)/perfil/+page.svelte index bf4e8ac..92059d1 100644 --- a/apps/web/src/routes/(dashboard)/perfil/+page.svelte +++ b/apps/web/src/routes/(dashboard)/perfil/+page.svelte @@ -83,10 +83,12 @@ // Estados para Minhas Férias let mostrarWizard = $state(false); let filtroStatusFerias = $state('todos'); + let refreshKeyFerias = $state(0); // Estados para Minhas Ausências let mostrarWizardAusencia = $state(false); let filtroStatusAusencias = $state('todos'); + let refreshKeyAusencias = $state(0); // Estados para Aprovar Ausências (Gestores) let solicitacaoAusenciaAprovar = $state | null>(null); @@ -181,15 +183,19 @@ const minhasSolicitacoesQuery = $derived.by(() => { if (!funcionarioIdParaQueries) return { data: [] }; + // Usar refreshKey para forçar atualização quando necessário return useQuery(api.ferias.listarMinhasSolicitacoes, { - funcionarioId: funcionarioIdParaQueries + funcionarioId: funcionarioIdParaQueries, + _refresh: refreshKeyFerias }); }); const minhasAusenciasQuery = $derived.by(() => { if (!funcionarioIdParaQueries) return { data: [] }; + // Usar refreshKey para forçar atualização quando necessário return useQuery(api.ausencias.listarMinhasSolicitacoes, { - funcionarioId: funcionarioIdParaQueries + funcionarioId: funcionarioIdParaQueries, + _refresh: refreshKeyAusencias }); }); @@ -220,26 +226,28 @@ }); $effect(() => { - if (Array.isArray(minhasSolicitacoesQuery?.data) && funcionarioIdParaQueries) { - minhasSolicitacoesEstaveis = minhasSolicitacoesQuery.data; - } else if ( - minhasSolicitacoesQuery !== undefined && - minhasSolicitacoesQuery?.data === null && - !funcionarioIdParaQueries - ) { - minhasSolicitacoesEstaveis = []; + if (minhasSolicitacoesQuery !== undefined) { + if (Array.isArray(minhasSolicitacoesQuery.data) && funcionarioIdParaQueries) { + minhasSolicitacoesEstaveis = minhasSolicitacoesQuery.data; + } else if (minhasSolicitacoesQuery.data === null && !funcionarioIdParaQueries) { + minhasSolicitacoesEstaveis = []; + } else if (minhasSolicitacoesQuery.data === null && funcionarioIdParaQueries) { + // Se a query retornou null mas temos funcionarioId, pode ser que não há dados ainda + // Mantemos o estado atual, não limpamos + } } }); $effect(() => { - if (Array.isArray(minhasAusenciasQuery?.data) && funcionarioIdParaQueries) { - minhasAusenciasEstaveis = minhasAusenciasQuery.data; - } else if ( - minhasAusenciasQuery !== undefined && - minhasAusenciasQuery?.data === null && - !funcionarioIdParaQueries - ) { - minhasAusenciasEstaveis = []; + if (minhasAusenciasQuery !== undefined) { + if (Array.isArray(minhasAusenciasQuery.data) && funcionarioIdParaQueries) { + minhasAusenciasEstaveis = minhasAusenciasQuery.data; + } else if (minhasAusenciasQuery.data === null && !funcionarioIdParaQueries) { + minhasAusenciasEstaveis = []; + } else if (minhasAusenciasQuery.data === null && funcionarioIdParaQueries) { + // Se a query retornou null mas temos funcionarioId, pode ser que não há dados ainda + // Mantemos o estado atual, não limpamos + } } }); @@ -2821,6 +2829,8 @@ funcionarioId={funcionarioIdDisponivel} onSucesso={() => { mostrarWizard = false; + // Forçar atualização das queries + refreshKeyFerias++; }} onCancelar={() => (mostrarWizard = false)} /> @@ -2878,17 +2888,10 @@
{ + onSucesso={() => { mostrarWizardAusencia = false; - // As queries do Convex são reativas e devem atualizar automaticamente - // Mas garantimos que o componente será re-renderizado - // Forçar recarregamento das queries mudando temporariamente o filtro - const filtroAnterior = filtroStatusAusencias; - if (filtroAnterior !== 'todos') { - filtroStatusAusencias = 'todos'; - await new Promise((resolve) => setTimeout(resolve, 200)); - } - filtroStatusAusencias = filtroAnterior; + // Forçar atualização das queries + refreshKeyAusencias++; }} onCancelar={() => (mostrarWizardAusencia = false)} /> diff --git a/packages/backend/convex/ausencias.ts b/packages/backend/convex/ausencias.ts index e118ab5..d1ade36 100644 --- a/packages/backend/convex/ausencias.ts +++ b/packages/backend/convex/ausencias.ts @@ -44,7 +44,10 @@ export const listarTodas = query({ // Query: Listar solicitações do funcionário export const listarMinhasSolicitacoes = query({ - args: { funcionarioId: v.id("funcionarios") }, + args: { + funcionarioId: v.id("funcionarios"), + _refresh: v.optional(v.number()) // Parâmetro para forçar atualização no frontend + }, handler: async (ctx, args) => { const solicitacoes = await ctx.db .query("solicitacoesAusencias") diff --git a/packages/backend/convex/ferias.ts b/packages/backend/convex/ferias.ts index 4fc6d6c..6672c56 100644 --- a/packages/backend/convex/ferias.ts +++ b/packages/backend/convex/ferias.ts @@ -139,7 +139,10 @@ export const listarTodas = query({ // Query: Listar solicitações do funcionário - períodos individuais export const listarMinhasSolicitacoes = query({ - args: { funcionarioId: v.id("funcionarios") }, + args: { + funcionarioId: v.id("funcionarios"), + _refresh: v.optional(v.number()) // Parâmetro para forçar atualização no frontend + }, handler: async (ctx, args) => { const todasFerias = await ctx.db .query("ferias")