Ajustes gerais #57

Merged
deyvisonwanderley merged 49 commits from ajustes_gerais into master 2025-12-09 18:13:50 +00:00
29 changed files with 4138 additions and 94 deletions
Showing only changes of commit f48d28067c - Show all commits

View File

@@ -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)}
/> />

View File

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

View File

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