"use client"; import { Badge } from "ikoncomponents"; import { Calendar, User, Building2, Hash, Clock, Activity } from "lucide-react"; import { Project } from "../../../types/project"; import Workflow from "../workflow"; import { calculateDurationInDays } from "@/app/utils/function/projectDuration"; import { useMemo } from "react"; import { useAppCache } from "@/app/utils/context/AppCacheContext"; import ProjectWorkflow from "../../components/projectWorkflow"; type Props = { project: Project; }; export default function SummaryTab({ project }: Props) { const { userNameMap } = useAppCache(); const duration = calculateDurationInDays( project.contractedStartDate, project.contractedEndDate, ); const teamNames = useMemo( () => (project.projectTeam ?? []).map( (id) => userNameMap.get(id) || "Unknown User", ), [project.projectTeam, userNameMap], ); return (
{/* ================= WORKFLOW ================= */}

Project Details

{project.projectDescription || "No description provided for this project."}

} label="Source" value={project.source || "Manual"} /> } label="Project Manager" value={ userNameMap.get(project.projectManager) || project.projectManager || "—" } />
} label="Status" value={project.projectStatus} /> } label="Start Date" value={project.contractedStartDate} /> } label="End Date" value={project.contractedEndDate} /> } label="Duration" value={duration ? duration : "-"} />

Team Members

{(teamNames || []).map((name: string, index: number) => { const initials = name .split(" ") .map((n) => n[0]) .join("") .slice(0, 2) .toUpperCase(); return (
{initials}
{name}
); })} {(!teamNames || teamNames.length === 0) && (
No team members assigned
)}
); } /* ================= SMALL COMPONENT ================= */ function InfoItem({ icon, label, value, }: { icon: React.ReactNode; label: string; value?: string | number | null; }) { return (
{icon}
{label}
{value || "—"}
); }