'use client' import React, { useEffect, useState } from 'react'; import Link from 'next/link'; import { ChevronRight } from 'lucide-react'; import { FacultyService, TeamMember } from '../../lib/facultyData'; interface TeamListingProps { title?: string; onMemberClick?: (member: TeamMember) => void; } const TeamListing: React.FC = ({ title = "Our Faculty", onMemberClick }) => { const [teamMembers, setTeamMembers] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const loadFacultyData = async () => { try { setLoading(true); const faculty = await FacultyService.getAllFaculty(); setTeamMembers(faculty); setError(null); } catch (err) { console.error('Failed to load faculty data:', err); setError('Failed to load faculty data. Please try again later.'); } finally { setLoading(false); } }; loadFacultyData(); }, []); // Filter members by category const facultyMembers = teamMembers.filter(member => member.category === 'FACULTY'); const supportTeam = teamMembers.filter(member => member.category === 'SUPPORT_TEAM'); const traineesAndFellows = teamMembers.filter(member => member.category === 'TRAINEE_FELLOW'); const handleMemberClick = (member: TeamMember) => { if (onMemberClick) { onMemberClick(member); } else { window.location.href = `/faculty/${member.id}`; } }; if (loading) { return (

Loading faculty data...

); } if (error) { return (

{error}

); } const TeamMemberCard: React.FC<{ member: TeamMember }> = ({ member }) => { const [imageError, setImageError] = useState(false); const [imageLoading, setImageLoading] = useState(true); const isTrainee = member.category === 'TRAINEE_FELLOW'; // Check if image URL is valid and not a default placeholder const hasValidImage = member.image && member.image.trim() !== '' && !member.image.includes('default-avatar') && !member.image.includes('placeholder.') && !member.image.includes('robot') && // Only filter if URL ENDS with /profile-image (backend default endpoint) !(member.image.endsWith('/profile-image') || member.image.includes('/profile-image?') || member.image === 'https://via.placeholder.com/400'); const shouldShowImage = !isTrainee && hasValidImage; const handleImageError = (e: React.SyntheticEvent) => { console.error('Image failed to load:', member.image); console.error('Member:', member.name, 'Professor ID:', member.professorId); setImageError(true); setImageLoading(false); }; const handleImageLoad = () => { console.log('Image loaded successfully:', member.image); setImageLoading(false); }; return (
!isTrainee && handleMemberClick(member)} > {/* Only show image section for non-trainees */} {!isTrainee && (
{shouldShowImage && !imageError ? ( <> {imageLoading && (
)} {member.name} ) : (
)}
)}

{member.name}

{member.position}

{!isTrainee && ( <> {member.department && (

{member.department}

)} {member.specialty && (

{member.specialty}

)} )}
); }; return (
{/* Breadcrumb Section */}

{title}

Meet our dedicated team of medical professionals, researchers, and support staff committed to advancing healthcare, education, and patient outcomes at Christian Medical College, Vellore

{/* Faculty Section */} {facultyMembers.length > 0 && (

Faculty Members

Our experienced faculty members leading medical education and research

{facultyMembers.map((member) => ( ))}
)} {/* Support Team Section */} {supportTeam.length > 0 && (

Support Team

Clinical Support Staff - Essential team members providing specialized support services

Administrative & Technical Support - Dedicated professionals ensuring smooth operations

{supportTeam.map((member) => ( ))}
)} {/* Trainees & Fellows Section */} {traineesAndFellows.length > 0 && (

Trainees & Fellows

Medical trainees, residents, and fellows advancing their skills and contributing to patient care

{traineesAndFellows.map((member) => ( ))}
)} {/* Show message if no faculty data */} {teamMembers.length === 0 && !loading && (

No Faculty Data Available

Faculty information is currently being updated. Please check back later or contact administration.

)} {/* Show message if all categories are empty but we have data */} {teamMembers.length > 0 && facultyMembers.length === 0 && supportTeam.length === 0 && traineesAndFellows.length === 0 && (

No Categorized Faculty Available

Faculty members need to be assigned to categories. Please contact administration.

)}
); }; export default TeamListing;