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:
@@ -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)}
|
||||
/>
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user