feat: add refresh functionality to absence and vacation requests queries; update backend to support refresh parameter for improved data handling

This commit is contained in:
2025-12-02 16:28:35 -03:00
parent c5dfddad46
commit f48d28067c
3 changed files with 39 additions and 30 deletions

View File

@@ -83,10 +83,12 @@
// Estados para Minhas Férias
let mostrarWizard = $state(false);
let filtroStatusFerias = $state<string>('todos');
let refreshKeyFerias = $state(0);
// Estados para Minhas Ausências
let mostrarWizardAusencia = $state(false);
let filtroStatusAusencias = $state<string>('todos');
let refreshKeyAusencias = $state(0);
// Estados para Aprovar Ausências (Gestores)
let solicitacaoAusenciaAprovar = $state<Id<'solicitacoesAusencias'> | 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 @@
<div class="flex-1 overflow-y-auto p-6">
<WizardSolicitacaoAusencia
funcionarioId={funcionarioIdDisponivel}
onSucesso={async () => {
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)}
/>

View File

@@ -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")

View File

@@ -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")