diff --git a/app/doctor/consultas/page.tsx b/app/doctor/consultas/page.tsx
index 4cd5ebf..9332a8b 100644
--- a/app/doctor/consultas/page.tsx
+++ b/app/doctor/consultas/page.tsx
@@ -4,7 +4,6 @@
import type React from "react";
import { useState, useEffect, useMemo } from "react";
-import DoctorLayout from "@/components/doctor-layout";
import { useAuthLayout } from "@/hooks/useAuthLayout";
import { appointmentsService } from "@/services/appointmentsApi.mjs";
import { patientsService } from "@/services/patientsApi.mjs";
@@ -19,6 +18,7 @@ import { Clock, Calendar as CalendarIcon, User, X, RefreshCw, Loader2, MapPin, P
import { format, isFuture, parseISO, isValid, isToday, isTomorrow } from "date-fns";
import { ptBR } from "date-fns/locale";
import { toast } from "sonner";
+import Sidebar from "@/components/Sidebar";
// Interfaces (sem alteração)
interface EnrichedAppointment {
@@ -129,11 +129,11 @@ export default function DoctorAppointmentsPage() {
};
if (isAuthLoading) {
- return
Carregando...
;
+ return
Carregando...
;
}
return (
-
+
Agenda Médica
@@ -224,6 +224,6 @@ export default function DoctorAppointmentsPage() {
-
+
);
}
\ No newline at end of file
diff --git a/app/doctor/dashboard/page.tsx b/app/doctor/dashboard/page.tsx
index cf9bad5..060d8e4 100644
--- a/app/doctor/dashboard/page.tsx
+++ b/app/doctor/dashboard/page.tsx
@@ -1,6 +1,5 @@
"use client";
-import DoctorLayout from "@/components/doctor-layout";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { Button } from "@/components/ui/button";
import { Calendar, Clock, User, Trash2 } from "lucide-react";
@@ -14,6 +13,7 @@ import { AvailabilityService } from "@/services/availabilityApi.mjs";
import { exceptionsService } from "@/services/exceptionApi.mjs";
import { doctorsService } from "@/services/doctorsApi.mjs";
import { usersService } from "@/services/usersApi.mjs";
+import Sidebar from "@/components/Sidebar";
type Availability = {
id: string;
@@ -231,7 +231,7 @@ export default function PatientDashboard() {
}, [availability]);
return (
-
+
Dashboard
@@ -409,6 +409,6 @@ export default function PatientDashboard() {
-
+
);
}
diff --git a/app/doctor/disponibilidade/excecoes/page.tsx b/app/doctor/disponibilidade/excecoes/page.tsx
index 3e7b316..932cb3f 100644
--- a/app/doctor/disponibilidade/excecoes/page.tsx
+++ b/app/doctor/disponibilidade/excecoes/page.tsx
@@ -3,14 +3,12 @@
import type React from "react";
import Link from "next/link";
import { useState, useEffect } from "react";
-import DoctorLayout from "@/components/doctor-layout";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
-import { Clock, Calendar as CalendarIcon, MapPin, Phone, User, X, RefreshCw } from "lucide-react";
-import { Badge } from "@/components/ui/badge";
+import { Calendar as CalendarIcon, RefreshCw } from "lucide-react";
import { useRouter } from "next/navigation";
import { toast } from "@/hooks/use-toast";
import { exceptionsService } from "@/services/exceptionApi.mjs";
@@ -19,6 +17,7 @@ import { exceptionsService } from "@/services/exceptionApi.mjs";
import { Calendar } from "@/components/ui/calendar";
import { format } from "date-fns"; // Usaremos o date-fns para formatação e comparação de datas
import { doctorsService } from "@/services/doctorsApi.mjs";
+import Sidebar from "@/components/Sidebar";
type Doctor = {
id: string;
@@ -147,7 +146,7 @@ export default function ExceptionPage() {
const displayDate = selectedCalendarDate ? new Date(selectedCalendarDate).toLocaleDateString("pt-BR", { weekday: "long", day: "2-digit", month: "long" }) : "Selecione uma data";
return (
-
+
Adicione exceções
@@ -254,6 +253,6 @@ export default function ExceptionPage() {
-
+
);
}
diff --git a/app/doctor/disponibilidade/page.tsx b/app/doctor/disponibilidade/page.tsx
index 36f0e98..ff0ce77 100644
--- a/app/doctor/disponibilidade/page.tsx
+++ b/app/doctor/disponibilidade/page.tsx
@@ -7,7 +7,6 @@ import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
-import DoctorLayout from "@/components/doctor-layout";
import { AvailabilityService } from "@/services/availabilityApi.mjs";
import { usersService } from "@/services/usersApi.mjs";
@@ -17,9 +16,10 @@ import { toast } from "@/hooks/use-toast";
import { useRouter } from "next/navigation";
import { Card, CardHeader, CardTitle, CardDescription, CardContent } from "@/components/ui/card";
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu";
-import { Eye, Edit, Calendar, Trash2 } from "lucide-react";
+import { Edit, Trash2 } from "lucide-react";
import { AvailabilityEditModal } from "@/components/ui/availability-edit-modal";
import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@/components/ui/alert-dialog";
+import Sidebar from "@/components/Sidebar";
// ... (Interfaces de tipo omitidas para brevidade, pois não foram alteradas)
@@ -323,7 +323,7 @@ export default function AvailabilityPage() {
};
return (
-
+
@@ -506,6 +506,6 @@ export default function AvailabilityPage() {
onSubmit={handleEdit}
/>
-
+
);
}
\ No newline at end of file
diff --git a/app/doctor/medicos/[id]/editar/page.tsx b/app/doctor/medicos/[id]/editar/page.tsx
index 0049db2..7bc5595 100644
--- a/app/doctor/medicos/[id]/editar/page.tsx
+++ b/app/doctor/medicos/[id]/editar/page.tsx
@@ -12,7 +12,7 @@ import { Textarea } from "@/components/ui/textarea";
import { Checkbox } from "@/components/ui/checkbox";
import { ArrowLeft, Save } from "lucide-react";
import Link from "next/link";
-import DoctorLayout from "@/components/doctor-layout";
+import Sidebar from "@/components/Sidebar";
// Mock data - in a real app, this would come from an API
const mockDoctors = [
@@ -124,7 +124,7 @@ export default function EditarMedicoPage() {
};
return (
-
+
@@ -512,6 +512,6 @@ export default function EditarMedicoPage() {
-
+
);
}
diff --git a/app/doctor/medicos/[id]/laudos/[laudoId]/editar/page.tsx b/app/doctor/medicos/[id]/laudos/[laudoId]/editar/page.tsx
index 02f1e6c..52525fd 100644
--- a/app/doctor/medicos/[id]/laudos/[laudoId]/editar/page.tsx
+++ b/app/doctor/medicos/[id]/laudos/[laudoId]/editar/page.tsx
@@ -2,7 +2,6 @@
import { useParams, useRouter } from "next/navigation";
import { useState, useEffect } from "react";
-import DoctorLayout from "@/components/doctor-layout";
import { Button } from "@/components/ui/button";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Input } from "@/components/ui/input";
@@ -17,6 +16,7 @@ import { format } from "date-fns";
import TiptapEditor from "@/components/ui/tiptap-editor";
import { Skeleton } from "@/components/ui/skeleton";
import { reportsApi } from "@/services/reportsApi.mjs";
+import Sidebar from "@/components/Sidebar";
export default function EditarLaudoPage() {
const router = useRouter();
@@ -108,7 +108,7 @@ export default function EditarLaudoPage() {
if (loading) {
return (
-
+
@@ -130,12 +130,12 @@ export default function EditarLaudoPage() {
-
+
)
}
return (
-
+
@@ -232,6 +232,6 @@ export default function EditarLaudoPage() {
-
+
);
}
\ No newline at end of file
diff --git a/app/doctor/medicos/[id]/laudos/novo/page.tsx b/app/doctor/medicos/[id]/laudos/novo/page.tsx
index 215d3a6..9c9b8a9 100644
--- a/app/doctor/medicos/[id]/laudos/novo/page.tsx
+++ b/app/doctor/medicos/[id]/laudos/novo/page.tsx
@@ -17,7 +17,7 @@ import { format } from "date-fns";
import TiptapEditor from "@/components/ui/tiptap-editor";
import { reportsApi } from "@/services/reportsApi.mjs";
-import DoctorLayout from "@/components/doctor-layout";
+import Sidebar from "@/components/Sidebar";
@@ -97,7 +97,7 @@ export default function NovoLaudoPage() {
};
return (
-
+
@@ -189,6 +189,6 @@ export default function NovoLaudoPage() {
-
+
);
}
\ No newline at end of file
diff --git a/app/doctor/medicos/[id]/laudos/page.tsx b/app/doctor/medicos/[id]/laudos/page.tsx
index 981b250..848bb40 100644
--- a/app/doctor/medicos/[id]/laudos/page.tsx
+++ b/app/doctor/medicos/[id]/laudos/page.tsx
@@ -8,7 +8,7 @@ import Link from 'next/link';
import { useParams } from 'next/navigation';
import { api } from '@/services/api.mjs';
import { reportsApi } from '@/services/reportsApi.mjs';
-import DoctorLayout from '@/components/doctor-layout';
+import Sidebar from '@/components/Sidebar';
export default function LaudosPage() {
const [patient, setPatient] = useState(null);
@@ -49,7 +49,7 @@ export default function LaudosPage() {
const paginate = (pageNumber) => setCurrentPage(pageNumber);
return (
-
+
+ const [isModalOpen, setIsModalOpen] = useState(false);
+ const [email, setEmail] = useState("");
+ const [isLoading, setIsLoading] = useState(false);
+ const [message, setMessage] = useState<{ type: "success" | "error"; text: string } | null>(null);
- {/* O contêiner principal que agora terá a sombra e o estilo de card */}
-
-
-
Acesse sua conta
-
Bem-vindo(a) de volta ao MedConnect!
+
+ const handleOpenModal = () => {
+ // Tenta pegar o email do input do formulário de login
+ const emailInput = document.querySelector('input[type="email"]') as HTMLInputElement;
+ if (emailInput?.value) {
+ setEmail(emailInput.value);
+ }
+ setIsModalOpen(true);
+ };
+
+
+ const handleResetPassword = async () => {
+ if (!email.trim()) {
+ setMessage({ type: "error", text: "Por favor, insira um e-mail válido." });
+ return;
+ }
+
+
+ setIsLoading(true);
+ setMessage(null);
+
+
+ try {
+ // Chama o método que já faz o fetch corretamente
+ const data = await usersService.resetPassword(email);
+
+
+ console.log("Resposta resetPassword:", data);
+
+
+ setMessage({
+ type: "success",
+ text: "E-mail de recuperação enviado! Verifique sua caixa de entrada.",
+ });
+
+
+ setTimeout(() => {
+ setIsModalOpen(false);
+ setMessage(null);
+ setEmail("");
+ }, 2000);
+ } catch (error) {
+ console.error("Erro no reset de senha:", error);
+ setMessage({
+ type: "error",
+ text:
+ error instanceof Error
+ ? error.message
+ : "Erro ao enviar e-mail. Tente novamente.",
+ });
+ } finally {
+ setIsLoading(false);
+ }
+};
+
+
+
+
+ const closeModal = () => {
+ setIsModalOpen(false);
+ setMessage(null);
+ setEmail("");
+ };
+
+
+ return (
+ <>
+
+
+ {/* PAINEL ESQUERDO: O Formulário */}
+
+
+ {/* Link para Voltar */}
+
+
+
+ Voltar à página inicial
+
-
- {/* Children para o LoginForm */}
-
-
-
+
+ {/* O contêiner principal que agora terá a sombra e o estilo de card */}
+
+
+
Acesse sua conta
+
Bem-vindo(a) de volta ao MedConnect!
+
+
+
+
+ {/* Children para o LoginForm */}
+
+
+
+
+
+
+
+ Não tem uma conta de paciente?
+
+
+ Crie uma agora
-
-
-
- Não tem uma conta de paciente?
-
-
- Crie uma agora
-
-
-
- {/* PAINEL DIREITO: A Imagem e Branding */}
-
- {/* Usamos o componente para otimização e performance */}
-
- {/* Camada de sobreposição para escurecer a imagem e destacar o texto */}
-
+
+ {/* PAINEL DIREITO: A Imagem e Branding */}
+
+ {/* Usamos o componente para otimização e performance */}
+
+ {/* Camada de sobreposição para escurecer a imagem e destacar o texto */}
+
{/* BLOCO DE NOME ADICIONADO */}
-
+
MedConnect
-
+
- Tecnologia e Cuidado a Serviço da Sua Saúde.
+ Tecnologia e Cuidado a Serviço da Sua Saúde.
- Acesse seu portal para uma experiência de saúde integrada, segura e eficiente.
+ Acesse seu portal para uma experiência de saúde integrada, segura e eficiente.
+
+
+
-
+
+ {/* Modal de Recuperação de Senha */}
+ {isModalOpen && (
+
-
+
);
}
\ No newline at end of file
diff --git a/app/manager/pacientes/[id]/editar/page.tsx b/app/manager/pacientes/[id]/editar/page.tsx
index 254be97..51858d7 100644
--- a/app/manager/pacientes/[id]/editar/page.tsx
+++ b/app/manager/pacientes/[id]/editar/page.tsx
@@ -13,9 +13,8 @@ import { Checkbox } from "@/components/ui/checkbox";
import { ArrowLeft, Save, Trash2, Paperclip, Upload } from "lucide-react";
import Link from "next/link";
import { useToast } from "@/hooks/use-toast";
-import SecretaryLayout from "@/components/secretary-layout";
import { patientsService } from "@/services/patientsApi.mjs";
-import { json } from "stream/consumers";
+import Sidebar from "@/components/Sidebar";
export default function EditarPacientePage() {
const router = useRouter();
@@ -247,7 +246,7 @@ export default function EditarPacientePage() {
};
return (
-
+
@@ -677,6 +676,6 @@ export default function EditarPacientePage() {
-
+
);
}
diff --git a/app/manager/pacientes/page.tsx b/app/manager/pacientes/page.tsx
index 5fb159b..e10990d 100644
--- a/app/manager/pacientes/page.tsx
+++ b/app/manager/pacientes/page.tsx
@@ -6,10 +6,10 @@ import Link from "next/link";
import { Button } from "@/components/ui/button";
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
-import { Plus, Edit, Trash2, Eye, Calendar, Filter, Loader2 } from "lucide-react";
+import { Edit, Trash2, Eye, Calendar, Filter, Loader2 } from "lucide-react";
import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@/components/ui/alert-dialog";
import { patientsService } from "@/services/patientsApi.mjs";
-import ManagerLayout from "@/components/manager-layout";
+import Sidebar from "@/components/Sidebar";
// Defina o tamanho da página.
const PAGE_SIZE = 5;
@@ -145,7 +145,7 @@ export default function PacientesPage() {
};
return (
-
+
{/* Header (Responsividade OK) */}
@@ -449,6 +449,6 @@ export default function PacientesPage() {
-
+
);
}
\ No newline at end of file
diff --git a/app/manager/usuario/[id]/editar/page.tsx b/app/manager/usuario/[id]/editar/page.tsx
index 50cb953..030891d 100644
--- a/app/manager/usuario/[id]/editar/page.tsx
+++ b/app/manager/usuario/[id]/editar/page.tsx
@@ -8,7 +8,7 @@ import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
import { Save, Loader2, ArrowLeft } from "lucide-react"
-import ManagerLayout from "@/components/manager-layout"
+import Sidebar from "@/components/Sidebar"
// Mock user service for demonstration. Replace with your actual API service.
const usersService = {
@@ -155,17 +155,17 @@ export default function EditarUsuarioPage() {
if (loading) {
return (
-
+
Carregando dados do usuário...
-
+
);
}
return (
-
+
@@ -274,6 +274,6 @@ export default function EditarUsuarioPage() {
-
+
);
}
\ No newline at end of file
diff --git a/app/manager/usuario/novo/page.tsx b/app/manager/usuario/novo/page.tsx
index 4a128bd..e4176c0 100644
--- a/app/manager/usuario/novo/page.tsx
+++ b/app/manager/usuario/novo/page.tsx
@@ -10,11 +10,11 @@ import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { Save, Loader2 } from "lucide-react";
-import ManagerLayout from "@/components/manager-layout";
import { usersService } from "@/services/usersApi.mjs";
import { doctorsService } from "@/services/doctorsApi.mjs";
import { login } from "services/api.mjs";
import { isValidCPF } from "@/lib/utils"; // 1. IMPORTAÇÃO DA FUNÇÃO DE VALIDAÇÃO
+import Sidebar from "@/components/Sidebar";
interface UserFormData {
email: string;
@@ -135,7 +135,7 @@ export default function NovoUsuarioPage() {
const isMedico = formData.papel === "medico";
return (
-
+
@@ -236,6 +236,6 @@ export default function NovoUsuarioPage() {
-
+
);
}
\ No newline at end of file
diff --git a/app/manager/usuario/page.tsx b/app/manager/usuario/page.tsx
index 805fb0c..634bf3d 100644
--- a/app/manager/usuario/page.tsx
+++ b/app/manager/usuario/page.tsx
@@ -2,28 +2,14 @@
"use client";
import React, { useEffect, useState, useCallback } from "react";
-import ManagerLayout from "@/components/manager-layout";
import Link from "next/link";
import { Button } from "@/components/ui/button";
-import {
- Select,
- SelectContent,
- SelectItem,
- SelectTrigger,
- SelectValue,
-} from "@/components/ui/select";
+import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { Plus, Eye, Filter, Loader2 } from "lucide-react";
-import {
- AlertDialog,
- AlertDialogCancel,
- AlertDialogContent,
- AlertDialogDescription,
- AlertDialogFooter,
- AlertDialogHeader,
- AlertDialogTitle,
-} from "@/components/ui/alert-dialog";
+import { AlertDialog, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@/components/ui/alert-dialog";
import { api, login } from "services/api.mjs";
import { usersService } from "services/usersApi.mjs";
+import Sidebar from "@/components/Sidebar";
interface FlatUser {
id: string;
@@ -192,7 +178,7 @@ export default function UsersPage() {
return (
-
+