dashboard: reimaginacao
Signed-off-by: Rodrigo B. de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
1 parent
c03c6d1b5a
commit
0a67f95eaf
1 file changed
+22
-9
@@ -5,15 +5,22 @@ import { CalendarIcon, UserIcon, PresentationChartBarIcon } from '@heroicons/rea
|
|||||||
export const CalendarioAtendimentos: React.FC = () => {
|
export const CalendarioAtendimentos: React.FC = () => {
|
||||||
const { data: eventos = [], isLoading, error } = useCalendarioAtendimentos();
|
const { data: eventos = [], isLoading, error } = useCalendarioAtendimentos();
|
||||||
|
|
||||||
// Simulação de calendário mensal
|
// Estado para mês e ano selecionados
|
||||||
const diasMes = Array.from({ length: 30 }, (_, i) => i + 1);
|
|
||||||
const mes = '06';
|
|
||||||
const ano = '2024';
|
|
||||||
|
|
||||||
const hoje = new Date();
|
const hoje = new Date();
|
||||||
const hojeStr = `${ano}-${mes}-${hoje.getDate().toString().padStart(2, '0')}`;
|
const [mesSelecionado, setMesSelecionado] = React.useState(hoje.getMonth() + 1);
|
||||||
|
const [anoSelecionado, setAnoSelecionado] = React.useState(hoje.getFullYear());
|
||||||
|
const diasMes = Array.from({ length: new Date(anoSelecionado, mesSelecionado, 0).getDate() }, (_, i) => i + 1);
|
||||||
|
const mesStr = mesSelecionado.toString().padStart(2, '0');
|
||||||
|
const anoStr = anoSelecionado.toString();
|
||||||
|
|
||||||
// Separar eventos futuros/próximos e passados
|
// Atualiza data selecionada ao trocar mês/ano
|
||||||
|
const [dataSelecionada, setDataSelecionada] = React.useState(`${anoStr}-${mesStr}-${hoje.getDate().toString().padStart(2, '0')}`);
|
||||||
|
React.useEffect(() => {
|
||||||
|
setDataSelecionada(`${anoStr}-${mesStr}-${hoje.getDate().toString().padStart(2, '0')}`);
|
||||||
|
}, [mesSelecionado, anoSelecionado]);
|
||||||
|
|
||||||
|
// Separar eventos futuros/próximos e passados considerando ano/mês
|
||||||
|
const hojeStr = `${anoStr}-${mesStr}-${hoje.getDate().toString().padStart(2, '0')}`;
|
||||||
const eventosProximos = eventos
|
const eventosProximos = eventos
|
||||||
.filter(ev => ev.data >= hojeStr)
|
.filter(ev => ev.data >= hojeStr)
|
||||||
.sort((a, b) => a.data.localeCompare(b.data))
|
.sort((a, b) => a.data.localeCompare(b.data))
|
||||||
@@ -23,7 +30,6 @@ export const CalendarioAtendimentos: React.FC = () => {
|
|||||||
.sort((a, b) => b.data.localeCompare(a.data))
|
.sort((a, b) => b.data.localeCompare(a.data))
|
||||||
.slice(0, 10);
|
.slice(0, 10);
|
||||||
|
|
||||||
const [dataSelecionada, setDataSelecionada] = React.useState(hojeStr);
|
|
||||||
const eventosDoDia = eventos.filter(e => e.data === dataSelecionada);
|
const eventosDoDia = eventos.filter(e => e.data === dataSelecionada);
|
||||||
|
|
||||||
if (isLoading) return <div>Carregando calendário...</div>;
|
if (isLoading) return <div>Carregando calendário...</div>;
|
||||||
@@ -34,9 +40,16 @@ export const CalendarioAtendimentos: React.FC = () => {
|
|||||||
<h2 className="text-lg font-bold text-gray-800 dark:text-gray-100 mb-2 flex items-center gap-2">
|
<h2 className="text-lg font-bold text-gray-800 dark:text-gray-100 mb-2 flex items-center gap-2">
|
||||||
<CalendarIcon className="h-6 w-6 text-blue-600" /> Calendário de Atendimentos e Audiências
|
<CalendarIcon className="h-6 w-6 text-blue-600" /> Calendário de Atendimentos e Audiências
|
||||||
</h2>
|
</h2>
|
||||||
|
<div className="flex items-center gap-4 mb-2">
|
||||||
|
<button type="button" className="px-2 py-1 rounded bg-gray-100 dark:bg-gray-800" onClick={() => setMesSelecionado(m => m === 1 ? 12 : m - 1)}><</button>
|
||||||
|
<span className="font-semibold text-lg">{mesStr}/{anoStr}</span>
|
||||||
|
<button type="button" className="px-2 py-1 rounded bg-gray-100 dark:bg-gray-800" onClick={() => setMesSelecionado(m => m === 12 ? 1 : m + 1)}>></button>
|
||||||
|
<button type="button" className="px-2 py-1 rounded bg-gray-100 dark:bg-gray-800" onClick={() => setAnoSelecionado(a => a - 1)}>< Ano</button>
|
||||||
|
<button type="button" className="px-2 py-1 rounded bg-gray-100 dark:bg-gray-800" onClick={() => setAnoSelecionado(a => a + 1)}>Ano ></button>
|
||||||
|
</div>
|
||||||
<div className="grid grid-cols-7 gap-2 mb-4">
|
<div className="grid grid-cols-7 gap-2 mb-4">
|
||||||
{diasMes.map((dia) => {
|
{diasMes.map((dia) => {
|
||||||
const dataStr = `${ano}-${mes}-${dia.toString().padStart(2, '0')}`;
|
const dataStr = `${anoStr}-${mesStr}-${dia.toString().padStart(2, '0')}`;
|
||||||
const eventosDia = eventos.filter(e => e.data === dataStr);
|
const eventosDia = eventos.filter(e => e.data === dataStr);
|
||||||
const selecionado = dataStr === dataSelecionada;
|
const selecionado = dataStr === dataSelecionada;
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in new issue
Block a user