diff --git a/src/components/dashboard/CalendarioAtendimentos.tsx b/src/components/dashboard/CalendarioAtendimentos.tsx index d10c4f0..3bfb17f 100644 --- a/src/components/dashboard/CalendarioAtendimentos.tsx +++ b/src/components/dashboard/CalendarioAtendimentos.tsx @@ -1,70 +1,52 @@ -import React, { useEffect, useState } from 'react'; - -interface Evento { - id: string; - data: string; - tipo: string; - descricao: string; -} +import React from 'react'; +import { useCalendarioAtendimentos } from '../../hooks/useCalendarioAtendimentos'; +import { CalendarIcon, UserIcon, PresentationChartBarIcon } from '@heroicons/react/24/outline'; export const CalendarioAtendimentos: React.FC = () => { - const [eventos, setEventos] = useState([]); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - - useEffect(() => { - async function fetchEventos() { - try { - setLoading(true); - setError(null); - const res = await fetch('/api/eventos', { - headers: { - - 'Content-Type': 'application/json', - }, - }); - if (!res.ok) throw new Error('Erro ao buscar eventos'); - const data = await res.json(); - setEventos(data); - } catch (err: any) { - setError(err.message); - } finally { - setLoading(false); - } - } - fetchEventos(); - }, []); + const { data: eventos = [], isLoading, error } = useCalendarioAtendimentos(); // Simulação de calendário mensal const diasMes = Array.from({ length: 30 }, (_, i) => i + 1); const mes = '06'; const ano = '2024'; - if (loading) return
Carregando calendário...
; - if (error) return
{error}
; + if (isLoading) return
Carregando calendário...
; + if (error) return
Erro ao buscar eventos
; return ( -
+
+

+ Calendário de Atendimentos e Audiências +

{diasMes.map((dia) => { const dataStr = `${ano}-${mes}-${dia.toString().padStart(2, '0')}`; const eventosDia = eventos.filter(e => e.data === dataStr); return ( -
- {dia} +
+ {dia} {eventosDia.map((ev) => ( - {ev.tipo} + + {ev.tipo === 'Audiência' ? : } {ev.tipo} + ))}
); })}
-

Próximos eventos

-
    - {eventos.map((ev) => ( -
  • {ev.data}: {ev.tipo} - {ev.descricao}
  • - ))} +

    Próximos eventos

    +
      + {eventos + .sort((a, b) => a.data.localeCompare(b.data)) + .map((ev) => ( +
    • + {ev.tipo === 'Audiência' ? : } + {ev.data} + {ev.tipo} + {ev.descricao} +
    • + ))}
diff --git a/src/hooks/useCalendarioAtendimentos.ts b/src/hooks/useCalendarioAtendimentos.ts new file mode 100644 index 0000000..d524552 --- /dev/null +++ b/src/hooks/useCalendarioAtendimentos.ts @@ -0,0 +1,35 @@ +import { useQuery } from 'react-query'; +import api from '../services/api'; + +export interface EventoCalendario { + id: string; + data: string; + tipo: string; + descricao: string; +} + +// Hook para buscar atendimentos e audiências do calendário +export function useCalendarioAtendimentos() { + return useQuery('calendarioAtendimentos', async () => { + // Buscar atendimentos + const atendimentosRes = await api.get('/atendimentos'); + const atendimentos = atendimentosRes.data.map((a: any) => ({ + id: a.id, + data: a.dataAtendimento?.slice(0, 10), + tipo: 'Atendimento', + descricao: a.titulo || 'Atendimento', + })); + + // Buscar audiências + const audienciasRes = await api.get('/audiencias'); + const audiencias = audienciasRes.data.map((a: any) => ({ + id: a.id, + data: a.data?.slice(0, 10), + tipo: 'Audiência', + descricao: a.tipo || 'Audiência', + })); + + // Junta todos eventos + return [...atendimentos, ...audiencias]; + }); +}