import { useEffect, type ReactNode } from 'react';
import { X, ExternalLink, Users, BookOpen, Calendar, Tag, FileText } from 'lucide-react';
import type { Project } from '../data';
import { useLang } from '../context/LanguageContext';
interface ProjectModalProps {
project: Project | null;
onClose: () => void;
}
function InfoRow({ icon, label, value }: { icon: ReactNode; label: string; value: string }) {
return (
);
}
export default function ProjectModal({ project, onClose }: ProjectModalProps) {
const { t } = useLang();
useEffect(() => {
if (project) {
document.documentElement.style.overflow = 'hidden';
document.body.style.overflow = 'hidden';
}
return () => {
document.documentElement.style.overflow = '';
document.body.style.overflow = '';
};
}, [project]);
if (!project) return null;
return (
e.stopPropagation()}
>
{/* Image header */}
{/* Close button — dark bg so icon always visible on any image */}
{/* Category badge */}
{project.category && project.category.length > 0 && (
{project.category.map((cat, i) => (
{cat}
))}
)}
{/* Content */}
{project.title}
{project.category && project.category.length > 0 && (
{project.year} • {project.category.join(', ')}
)}
{project.description}
{/* Info grid */}
Mahasiswa
{project.studentName}
{project.nim && (
)}
{/* Members list */}
{project.members && project.members.length > 0 && (
Anggota Tim
{project.members.map((m, i) => (
{m.nama}{m.nim ? ` (${m.nim})` : ''}
))}
)}
{project.catatan && (
Catatan Tambahan
{project.catatan}
)}
{/* Project link */}
{project.link && (
{t.project.visitLink}
)}
);
}