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
|
// Estados para Minhas Férias
|
||||||
let mostrarWizard = $state(false);
|
let mostrarWizard = $state(false);
|
||||||
let filtroStatusFerias = $state<string>('todos');
|
let filtroStatusFerias = $state<string>('todos');
|
||||||
|
let refreshKeyFerias = $state(0);
|
||||||
|
|
||||||
// Estados para Minhas Ausências
|
// Estados para Minhas Ausências
|
||||||
let mostrarWizardAusencia = $state(false);
|
let mostrarWizardAusencia = $state(false);
|
||||||
let filtroStatusAusencias = $state<string>('todos');
|
let filtroStatusAusencias = $state<string>('todos');
|
||||||
|
let refreshKeyAusencias = $state(0);
|
||||||
|
|
||||||
// Estados para Aprovar Ausências (Gestores)
|
// Estados para Aprovar Ausências (Gestores)
|
||||||
let solicitacaoAusenciaAprovar = $state<Id<'solicitacoesAusencias'> | null>(null);
|
let solicitacaoAusenciaAprovar = $state<Id<'solicitacoesAusencias'> | null>(null);
|
||||||
@@ -181,15 +183,19 @@
|
|||||||
|
|
||||||
const minhasSolicitacoesQuery = $derived.by(() => {
|
const minhasSolicitacoesQuery = $derived.by(() => {
|
||||||
if (!funcionarioIdParaQueries) return { data: [] };
|
if (!funcionarioIdParaQueries) return { data: [] };
|
||||||
|
// Usar refreshKey para forçar atualização quando necessário
|
||||||
return useQuery(api.ferias.listarMinhasSolicitacoes, {
|
return useQuery(api.ferias.listarMinhasSolicitacoes, {
|
||||||
funcionarioId: funcionarioIdParaQueries
|
funcionarioId: funcionarioIdParaQueries,
|
||||||
|
_refresh: refreshKeyFerias
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const minhasAusenciasQuery = $derived.by(() => {
|
const minhasAusenciasQuery = $derived.by(() => {
|
||||||
if (!funcionarioIdParaQueries) return { data: [] };
|
if (!funcionarioIdParaQueries) return { data: [] };
|
||||||
|
// Usar refreshKey para forçar atualização quando necessário
|
||||||
return useQuery(api.ausencias.listarMinhasSolicitacoes, {
|
return useQuery(api.ausencias.listarMinhasSolicitacoes, {
|
||||||
funcionarioId: funcionarioIdParaQueries
|
funcionarioId: funcionarioIdParaQueries,
|
||||||
|
_refresh: refreshKeyAusencias
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -220,26 +226,28 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
if (Array.isArray(minhasSolicitacoesQuery?.data) && funcionarioIdParaQueries) {
|
if (minhasSolicitacoesQuery !== undefined) {
|
||||||
minhasSolicitacoesEstaveis = minhasSolicitacoesQuery.data;
|
if (Array.isArray(minhasSolicitacoesQuery.data) && funcionarioIdParaQueries) {
|
||||||
} else if (
|
minhasSolicitacoesEstaveis = minhasSolicitacoesQuery.data;
|
||||||
minhasSolicitacoesQuery !== undefined &&
|
} else if (minhasSolicitacoesQuery.data === null && !funcionarioIdParaQueries) {
|
||||||
minhasSolicitacoesQuery?.data === null &&
|
minhasSolicitacoesEstaveis = [];
|
||||||
!funcionarioIdParaQueries
|
} else if (minhasSolicitacoesQuery.data === null && funcionarioIdParaQueries) {
|
||||||
) {
|
// Se a query retornou null mas temos funcionarioId, pode ser que não há dados ainda
|
||||||
minhasSolicitacoesEstaveis = [];
|
// Mantemos o estado atual, não limpamos
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
if (Array.isArray(minhasAusenciasQuery?.data) && funcionarioIdParaQueries) {
|
if (minhasAusenciasQuery !== undefined) {
|
||||||
minhasAusenciasEstaveis = minhasAusenciasQuery.data;
|
if (Array.isArray(minhasAusenciasQuery.data) && funcionarioIdParaQueries) {
|
||||||
} else if (
|
minhasAusenciasEstaveis = minhasAusenciasQuery.data;
|
||||||
minhasAusenciasQuery !== undefined &&
|
} else if (minhasAusenciasQuery.data === null && !funcionarioIdParaQueries) {
|
||||||
minhasAusenciasQuery?.data === null &&
|
minhasAusenciasEstaveis = [];
|
||||||
!funcionarioIdParaQueries
|
} else if (minhasAusenciasQuery.data === null && funcionarioIdParaQueries) {
|
||||||
) {
|
// Se a query retornou null mas temos funcionarioId, pode ser que não há dados ainda
|
||||||
minhasAusenciasEstaveis = [];
|
// Mantemos o estado atual, não limpamos
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -2821,6 +2829,8 @@
|
|||||||
funcionarioId={funcionarioIdDisponivel}
|
funcionarioId={funcionarioIdDisponivel}
|
||||||
onSucesso={() => {
|
onSucesso={() => {
|
||||||
mostrarWizard = false;
|
mostrarWizard = false;
|
||||||
|
// Forçar atualização das queries
|
||||||
|
refreshKeyFerias++;
|
||||||
}}
|
}}
|
||||||
onCancelar={() => (mostrarWizard = false)}
|
onCancelar={() => (mostrarWizard = false)}
|
||||||
/>
|
/>
|
||||||
@@ -2878,17 +2888,10 @@
|
|||||||
<div class="flex-1 overflow-y-auto p-6">
|
<div class="flex-1 overflow-y-auto p-6">
|
||||||
<WizardSolicitacaoAusencia
|
<WizardSolicitacaoAusencia
|
||||||
funcionarioId={funcionarioIdDisponivel}
|
funcionarioId={funcionarioIdDisponivel}
|
||||||
onSucesso={async () => {
|
onSucesso={() => {
|
||||||
mostrarWizardAusencia = false;
|
mostrarWizardAusencia = false;
|
||||||
// As queries do Convex são reativas e devem atualizar automaticamente
|
// Forçar atualização das queries
|
||||||
// Mas garantimos que o componente será re-renderizado
|
refreshKeyAusencias++;
|
||||||
// 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;
|
|
||||||
}}
|
}}
|
||||||
onCancelar={() => (mostrarWizardAusencia = false)}
|
onCancelar={() => (mostrarWizardAusencia = false)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -44,7 +44,10 @@ export const listarTodas = query({
|
|||||||
|
|
||||||
// Query: Listar solicitações do funcionário
|
// Query: Listar solicitações do funcionário
|
||||||
export const listarMinhasSolicitacoes = query({
|
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) => {
|
handler: async (ctx, args) => {
|
||||||
const solicitacoes = await ctx.db
|
const solicitacoes = await ctx.db
|
||||||
.query("solicitacoesAusencias")
|
.query("solicitacoesAusencias")
|
||||||
|
|||||||
@@ -139,7 +139,10 @@ export const listarTodas = query({
|
|||||||
|
|
||||||
// Query: Listar solicitações do funcionário - períodos individuais
|
// Query: Listar solicitações do funcionário - períodos individuais
|
||||||
export const listarMinhasSolicitacoes = query({
|
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) => {
|
handler: async (ctx, args) => {
|
||||||
const todasFerias = await ctx.db
|
const todasFerias = await ctx.db
|
||||||
.query("ferias")
|
.query("ferias")
|
||||||
|
|||||||
Reference in New Issue
Block a user