"use client"; import { useState, useEffect } from "react"; import { Divider } from "@nextui-org/react"; import { title, subtitle } from "@/components/primitives"; import { Card, CardBody, Chip } from "@nextui-org/react"; import { Folder, Clipboard, FlaskConical } from "lucide-react"; import { CaseTypeCountType, CasePriorityCountType } from "@/types/case"; import { ProgressSeriesType } from "@/types/run"; import { HomeMessages } from "./page"; import { aggregateBasicInfo, aggregateTestPriority, aggregateTestType, aggregateProgress, } from "./aggregate"; import TestTypesChart from "./TestTypesDonutChart"; import TestPriorityChart from "./TestPriorityDonutChart"; import TestProgressBarChart from "./TestProgressColumnChart"; import Config from "@/config/config"; const apiServer = Config.apiServer; async function fetchProject(url) { try { const response = await fetch(url, { method: "GET", headers: { "Content-Type": "application/json", }, }); if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } const data = await response.json(); return data; } catch (error: any) { console.error("Error fetching data:", error.message); } } type Props = { projectId: string; messages: HomeMessages; }; export function Home({ projectId, messages }: Props) { const [project, setProject] = useState({ name: "", detail: "", Folders: [{ Cases: [] }], Runs: [{ RunCases: [] }], }); const [folderNum, setFolderNum] = useState(0); const [caseNum, setCaseNum] = useState(0); const [runNum, setRunNum] = useState(0); const [typesCounts, setTypesCounts] = useState(); const [priorityCounts, setPriorityCounts] = useState(); const [progressCategories, setProgressCategories] = useState(); const [progressSeries, setProgressSeries] = useState(); const url = `${apiServer}/home/${projectId}`; useEffect(() => { async function fetchDataEffect() { try { const data = await fetchProject(url); setProject(data); } catch (error: any) { console.error("Error in effect:", error.message); } } fetchDataEffect(); }, [url]); useEffect(() => { async function aggregate() { const { folderNum, runNum, caseNum } = aggregateBasicInfo(project); setFolderNum(folderNum); setRunNum(runNum); setCaseNum(caseNum); const typeRet = aggregateTestType(project); setTypesCounts([...typeRet]); const priorityRet = aggregateTestPriority(project); setPriorityCounts([...priorityRet]); const { series, categories } = aggregateProgress(project, messages); setProgressSeries([...series]); setProgressCategories([...categories]); } aggregate(); }, [project]); return (

{project.name}

} className="px-3" > {folderNum} {messages.folders} } className="px-3 ms-2" > {caseNum} {messages.testCases} } className="px-3 ms-2" > {runNum} {messages.testRuns}
{project.detail && ( {project.detail} )}

{messages.progress}

{messages.testClassification}

{messages.byType}

{messages.byPriority}

); }