Merge pull request #38 from m1guelmcf/fix/doctor-dashboard-loop

fix: loop infinito no dashboard medico causado por dependencia instavel
This commit is contained in:
DaniloSts 2025-12-03 21:45:45 -03:00 committed by GitHub
commit cdac2dc69d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -21,7 +21,7 @@ import {
} from "@/components/ui/alert-dialog"; } from "@/components/ui/alert-dialog";
import Link from "next/link"; import Link from "next/link";
import { useEffect, useState } from "react"; import { useEffect, useState, useMemo } from "react"; // Adicionado useMemo
import { toast } from "@/hooks/use-toast"; import { toast } from "@/hooks/use-toast";
import { useAuthLayout } from "@/hooks/useAuthLayout"; import { useAuthLayout } from "@/hooks/useAuthLayout";
@ -38,7 +38,6 @@ import Sidebar from "@/components/Sidebar";
import WeeklyScheduleCard from "@/components/ui/WeeklyScheduleCard"; import WeeklyScheduleCard from "@/components/ui/WeeklyScheduleCard";
// --- TIPOS ADICIONADOS PARA CORREÇÃO ---
type Appointment = { type Appointment = {
id: string; id: string;
doctor_id: string; doctor_id: string;
@ -50,7 +49,6 @@ type Appointment = {
type EnrichedAppointment = Appointment & { type EnrichedAppointment = Appointment & {
patientName: string; patientName: string;
}; };
// --- FIM DOS TIPOS ADICIONADOS ---
type Availability = { type Availability = {
id: string; id: string;
@ -142,14 +140,17 @@ interface Exception {
created_by: string; created_by: string;
} }
// Minimal type for Patient, adjust if more fields are needed
type Patient = { type Patient = {
id: string; id: string;
full_name: string; full_name: string;
}; };
export default function PatientDashboard() { export default function DoctorDashboard() {
const { user } = useAuthLayout({ requiredRole: ['medico'] }); // --- CORREÇÃO CRÍTICA DO LOOP ---
// Usamos useMemo para garantir que o array de roles seja uma referência estável
// e não dispare o useEffect do useAuthLayout infinitamente.
const requiredRoles = useMemo(() => ['medico'], []);
const { user } = useAuthLayout({ requiredRole: requiredRoles });
const [loggedDoctor, setLoggedDoctor] = useState<Doctor | null>(null); const [loggedDoctor, setLoggedDoctor] = useState<Doctor | null>(null);
const [userData, setUserData] = useState<UserData>(); const [userData, setUserData] = useState<UserData>();
@ -218,7 +219,7 @@ export default function PatientDashboard() {
}; };
fetchData(); fetchData();
}, [user]); }, [user?.id]);
function findDoctorById(id: string, doctors: Doctor[]) { function findDoctorById(id: string, doctors: Doctor[]) {
return doctors.find((doctor) => doctor.user_id === id); return doctors.find((doctor) => doctor.user_id === id);
@ -325,7 +326,7 @@ export default function PatientDashboard() {
<CardDescription>Acesse rapidamente as principais funcionalidades</CardDescription> <CardDescription>Acesse rapidamente as principais funcionalidades</CardDescription>
</CardHeader> </CardHeader>
<CardContent className="space-y-4"> <CardContent className="space-y-4">
<Link href="/doctor/medicos/consultas"> <Link href="/doctor/consultas">
<Button className="w-full justify-start"> <Button className="w-full justify-start">
<Calendar className="mr-2 h-4 w-4" /> <Calendar className="mr-2 h-4 w-4" />
Ver Minhas Consultas Ver Minhas Consultas