feat: enhance dispensa management with modal confirmation and time input improvements

- Introduced a modal for confirming the removal of dispensas, improving user interaction and preventing accidental deletions.
- Updated time input fields to use a more user-friendly format, allowing for direct time selection.
- Refactored state management for dispensa creation, ensuring better handling of time and date inputs.
- Enhanced UI elements for better feedback and clarity during the dispensa creation process.
This commit is contained in:
2025-11-20 13:58:12 -03:00
parent 8ea5c0316b
commit e029cd1d6b
3 changed files with 190 additions and 100 deletions

View File

@@ -19,6 +19,11 @@
let mostrandoModalDetalhes = $state(false);
let mostrandoModalExcluir = $state(false);
// Monitorar mudanças em funcionarioSelecionado
$effect(() => {
console.log('🔄 [DEBUG] funcionarioSelecionado mudou:', funcionarioSelecionado, typeof funcionarioSelecionado);
});
// Formulário de edição
let horaNova = $state(8);
let minutoNova = $state(0);
@@ -102,10 +107,21 @@
const homologacoesParams = $derived({
funcionarioId: funcionarioSelecionado || undefined,
});
const registrosQueryParams = $derived({
funcionarioId: funcionarioSelecionado || undefined,
dataInicio: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString().split('T')[0]!,
dataFim: new Date().toISOString().split('T')[0]!,
// Parâmetros para query de registros - só executa quando há funcionário selecionado
const registrosQueryParams = $derived.by(() => {
// Verificar se funcionarioSelecionado não é string vazia
if (!funcionarioSelecionado || funcionarioSelecionado === '') {
console.log('⏭️ [DEBUG] registrosQueryParams: skip (sem funcionário selecionado)');
return 'skip';
}
const params = {
funcionarioId: funcionarioSelecionado as Id<'funcionarios'>,
dataInicio: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString().split('T')[0]!,
dataFim: new Date().toISOString().split('T')[0]!,
};
console.log('📤 [DEBUG] registrosQueryParams:', params);
return params;
});
const homologacoesQuery = useQuery(api.pontos.listarHomologacoes, homologacoesParams);
@@ -114,7 +130,26 @@
const subordinados = $derived(subordinadosQuery?.data || []);
const motivos = $derived(motivosQuery?.data);
const homologacoes = $derived(homologacoesQuery?.data || []);
const registros = $derived(registrosQuery?.data || []);
// Registros já filtrados pela query no backend
const registros = $derived.by(() => {
if (!funcionarioSelecionado || funcionarioSelecionado === '') {
return [];
}
const dados = registrosQuery?.data;
console.log('🔍 [DEBUG] funcionarioSelecionado:', funcionarioSelecionado);
console.log('🔍 [DEBUG] registrosQuery?.data:', dados);
console.log('🔍 [DEBUG] registrosQuery?.status:', registrosQuery?.status);
if (!dados || !Array.isArray(dados)) {
console.log('⚠️ [DEBUG] Dados não são array ou estão vazios');
return [];
}
// A query do backend já filtra pelo funcionário, mas adicionamos verificação extra
// Converter ambos para string para garantir comparação correta
const filtrados = dados.filter((r) => String(r.funcionarioId) === String(funcionarioSelecionado));
console.log('✅ [DEBUG] Registros filtrados:', filtrados.length, filtrados);
return filtrados;
});
// Verificar se é gestor (tem subordinados)
const isGestor = $derived(subordinados.length > 0);
@@ -335,14 +370,14 @@
<div class="card bg-base-100 shadow-xl mb-6">
<div class="card-body">
<h2 class="card-title mb-4">Selecionar Funcionário</h2>
<select
class="select select-bordered w-full"
bind:value={funcionarioSelecionado}
disabled={modoEdicao}
>
<select
class="select select-bordered w-full"
bind:value={funcionarioSelecionado}
disabled={modoEdicao}
>
<option value="">Selecione um funcionário</option>
{#each funcionarios as funcionario}
<option value={funcionario._id}>
<option value={funcionario._id as string}>
{funcionario.nome} {funcionario.matricula ? `(${funcionario.matricula})` : ''}
</option>
{/each}