feat: integrate Convex authentication across ticket management routes

- Added useConvexWithAuth hook to ensure authenticated access for ticket-related pages.
- Updated the perfil and central-chamados routes to include the authentication setup.
- Enhanced user navigation by adding a new "Meus Chamados" tab in the perfil page for better access to ticket management.
This commit is contained in:
2025-11-16 14:19:01 -03:00
parent 118051ad56
commit 24b8eb6a14
4 changed files with 38 additions and 0 deletions

View File

@@ -7,6 +7,7 @@
import TicketTimeline from "$lib/components/chamados/TicketTimeline.svelte"; import TicketTimeline from "$lib/components/chamados/TicketTimeline.svelte";
import { chamadosStore } from "$lib/stores/chamados"; import { chamadosStore } from "$lib/stores/chamados";
import { resolve } from "$app/paths"; import { resolve } from "$app/paths";
import { useConvexWithAuth } from "$lib/hooks/useConvexWithAuth";
type Ticket = Doc<"tickets">; type Ticket = Doc<"tickets">;
type SlaConfig = Doc<"slaConfigs">; type SlaConfig = Doc<"slaConfigs">;
@@ -45,6 +46,11 @@
carregarSlaConfigs(); carregarSlaConfigs();
}); });
$effect(() => {
// Garante que o cliente Convex use o token do usuário logado
useConvexWithAuth();
});
async function carregarSlaConfigs() { async function carregarSlaConfigs() {
try { try {
carregandoSla = true; carregandoSla = true;

View File

@@ -1,6 +1,7 @@
<script lang="ts"> <script lang="ts">
import { useConvexClient, useQuery } from 'convex-svelte'; import { useConvexClient, useQuery } from 'convex-svelte';
import { api } from '@sgse-app/backend/convex/_generated/api'; import { api } from '@sgse-app/backend/convex/_generated/api';
import { resolve } from '$app/paths';
import AprovarFerias from '$lib/components/AprovarFerias.svelte'; import AprovarFerias from '$lib/components/AprovarFerias.svelte';
import WizardSolicitacaoFerias from '$lib/components/ferias/WizardSolicitacaoFerias.svelte'; import WizardSolicitacaoFerias from '$lib/components/ferias/WizardSolicitacaoFerias.svelte';
import WizardSolicitacaoAusencia from '$lib/components/ausencias/WizardSolicitacaoAusencia.svelte'; import WizardSolicitacaoAusencia from '$lib/components/ausencias/WizardSolicitacaoAusencia.svelte';
@@ -603,6 +604,29 @@ const meusTimesGestor = $derived(timesSubordinados);
Minhas Ausências Minhas Ausências
</button> </button>
<a
role="tab"
href={resolve('/perfil/chamados')}
class="tab tab-lg font-semibold transition-all duration-300 hover:bg-base-100"
aria-label="Meus Chamados"
>
<svg
xmlns="http://www.w3.org/2000/svg"
class="mr-2 h-5 w-5"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
stroke-width="2"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M3 7h18M3 12h12M3 17h18"
/>
</svg>
Meus Chamados
</a>
{#if ehGestor} {#if ehGestor}
<button <button
type="button" type="button"

View File

@@ -14,6 +14,7 @@ import { chamadosStore } from "$lib/stores/chamados";
prazoRestante, prazoRestante,
} from "$lib/utils/chamados"; } from "$lib/utils/chamados";
import { resolve } from "$app/paths"; import { resolve } from "$app/paths";
import { useConvexWithAuth } from "$lib/hooks/useConvexWithAuth";
type Ticket = Doc<"tickets">; type Ticket = Doc<"tickets">;
@@ -45,6 +46,10 @@ const ticketsFiltrados = $derived(
onMount(() => { onMount(() => {
carregarChamados(); carregarChamados();
}); });
$effect(() => {
// Configura o token de autenticação no cliente Convex
useConvexWithAuth();
});
async function carregarChamados() { async function carregarChamados() {
try { try {

View File

@@ -10,6 +10,7 @@
getStatusLabel, getStatusLabel,
prazoRestante, prazoRestante,
} from "$lib/utils/chamados"; } from "$lib/utils/chamados";
import { useConvexWithAuth } from "$lib/hooks/useConvexWithAuth";
type Ticket = Doc<"tickets">; type Ticket = Doc<"tickets">;
type Usuario = Doc<"usuarios">; type Usuario = Doc<"usuarios">;
@@ -60,6 +61,8 @@
}); });
onMount(() => { onMount(() => {
// Configura token no cliente Convex
useConvexWithAuth();
if (slaConfigsQuery?.data && slaConfigsQuery.data.length > 0) { if (slaConfigsQuery?.data && slaConfigsQuery.data.length > 0) {
selecionarSla(slaConfigsQuery.data[0]); selecionarSla(slaConfigsQuery.data[0]);
} }