From 0fee0cfd3510ef1362d46834f59d97af033d9429 Mon Sep 17 00:00:00 2001 From: deyvisonwanderley Date: Tue, 4 Nov 2025 04:02:07 -0300 Subject: [PATCH] feat: integrate interactive absence calendar in atestados-licencas page - Added the CalendarioAfastamentos component to display an interactive calendar for managing absences. - Removed the previous static calendar placeholder and replaced it with a dynamic query to fetch absence events. - Enhanced user experience by allowing users to visualize absence events directly in the calendar format. --- .../components/CalendarioAfastamentos.svelte | 517 ++++++++++++ .../lib/components/ti/AlertConfigModal.svelte | 760 +++++++++--------- .../atestados-licencas/+page.svelte | 30 +- 3 files changed, 905 insertions(+), 402 deletions(-) create mode 100644 apps/web/src/lib/components/CalendarioAfastamentos.svelte diff --git a/apps/web/src/lib/components/CalendarioAfastamentos.svelte b/apps/web/src/lib/components/CalendarioAfastamentos.svelte new file mode 100644 index 0000000..fc72de1 --- /dev/null +++ b/apps/web/src/lib/components/CalendarioAfastamentos.svelte @@ -0,0 +1,517 @@ + + +
+
+ +
+

Calendário de Afastamentos

+ + +
+ Filtrar: +
+ + + + + + +
+
+
+ + +
+
+
+ Atestado Médico +
+
+
+ Declaração +
+
+
+ Licença Maternidade +
+
+
+ Licença Paternidade +
+
+
+ Férias +
+
+ + +
+
+
+ + + {#if showModal && eventoSelecionado} + + +
(showModal = false)} + role="dialog" + aria-modal="true" + > + +
e.stopPropagation()} + > + +
+
+
+

+ {eventoSelecionado.funcionarioNome} +

+

+ {getTipoNome(eventoSelecionado.tipo)} +

+
+ +
+
+ + +
+
+ + + +
+

Data Início

+

{formatarData(eventoSelecionado.start)}

+
+
+ +
+ + + +
+

Data Fim

+

{formatarData(eventoSelecionado.end)}

+
+
+ +
+ + + +
+

Duração

+

+ {(() => { + const inicio = new Date(eventoSelecionado.start); + const fim = new Date(eventoSelecionado.end); + const diffTime = Math.abs(fim.getTime() - inicio.getTime()); + const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)) + 1; + return `${diffDays} ${diffDays === 1 ? "dia" : "dias"}`; + })()} +

+
+
+
+ + +
+ +
+
+
+ {/if} +
+
+ + diff --git a/apps/web/src/lib/components/ti/AlertConfigModal.svelte b/apps/web/src/lib/components/ti/AlertConfigModal.svelte index 1ae2a77..f4ae50c 100644 --- a/apps/web/src/lib/components/ti/AlertConfigModal.svelte +++ b/apps/web/src/lib/components/ti/AlertConfigModal.svelte @@ -1,377 +1,383 @@ - - - - - - - - - + + + + + + + + + diff --git a/apps/web/src/routes/(dashboard)/recursos-humanos/atestados-licencas/+page.svelte b/apps/web/src/routes/(dashboard)/recursos-humanos/atestados-licencas/+page.svelte index e23f206..31c1a52 100644 --- a/apps/web/src/routes/(dashboard)/recursos-humanos/atestados-licencas/+page.svelte +++ b/apps/web/src/routes/(dashboard)/recursos-humanos/atestados-licencas/+page.svelte @@ -6,6 +6,7 @@ import FuncionarioSelect from "$lib/components/FuncionarioSelect.svelte"; import FileUpload from "$lib/components/FileUpload.svelte"; import ErrorModal from "$lib/components/ErrorModal.svelte"; + import CalendarioAfastamentos from "$lib/components/CalendarioAfastamentos.svelte"; import type { Id } from "@sgse-app/backend/convex/_generated/dataModel"; const client = useConvexClient(); @@ -767,31 +768,10 @@ - -
-
-

Calendário de Afastamentos

-
- - - - O calendário interativo completo será implementado em breve. Por - enquanto, visualize os eventos na tabela abaixo. -
-
-
+ + {#if eventosQuery?.data} + + {/if} {#if graficosQuery?.data}