import React, { useState } from "react"; import tw from "tailwind-styled-components"; import { TaskData } from "../../lib/types"; import RunData from "./RunData"; import SelectedTask from "./SelectedTask"; import MockCheckbox from "./MockCheckbox"; import RunButton from "./RunButton"; interface TaskInfoProps { selectedTask: TaskData | null; isTaskInfoExpanded: boolean; setIsTaskInfoExpanded: React.Dispatch>; setSelectedTask: React.Dispatch>; } const TaskInfo: React.FC = ({ selectedTask, isTaskInfoExpanded, setIsTaskInfoExpanded, setSelectedTask, }) => { const [isMock, setIsMock] = useState(false); const [isLoading, setIsLoading] = useState(false); const [allResponseData, setAllResponseData] = useState([]); const [responseData, setResponseData] = useState(); const [cutoff, setCutoff] = useState(null); const runBenchmark = async () => { setIsLoading(true); try { let url = `http://localhost:8000/run?mock=${isMock}`; cutoff && !isMock && (url += `&cutoff=${cutoff}`); const response = await fetch(url); const data = await response.json(); if (data["returncode"] > 0) { throw new Error(data["stderr"]); } else { const jsonObject = JSON.parse(data["stdout"]); setAllResponseData([...allResponseData, jsonObject]); setResponseData(jsonObject); } } catch (error) { console.error("There was an error fetching the data", error); } setIsLoading(false); }; return ( {isTaskInfoExpanded ? ( { setIsTaskInfoExpanded(!isTaskInfoExpanded); setSelectedTask(null); }} > → ) : ( or click a node on the left )} {selectedTask && ( )} {!isMock && (

Custom cutoff

setCutoff(e.target.value ? parseInt(e.target.value) : null) } />
)}
Previous Run
{!responseData &&

No runs yet

} {responseData && }
All Runs
{allResponseData.length === 0 &&

No runs yet

} {allResponseData.length > 1 && allResponseData .slice(0, -1) .map((responseData, index) => ( ))}
); }; export default TaskInfo; const TaskDetails = tw.div<{ isExpanded: boolean }>` ${(p) => (p.isExpanded ? "w-1/2" : "w-1/4")} ml-5 transition-all duration-500 ease-in-out p-4 border border-gray-400 h-full overflow-x-hidden `; const Header = tw.h5` text-xl font-semibold mt-4 `; const ToggleButton = tw.button` font-bold text-2xl `; const BenchmarkWrapper = tw.div` flex flex-col items-center justify-center `; const CutoffInput = tw.input` border rounded w-1/2 h-8 text-sm focus:outline-none focus:border-blue-400 pl-2 `; const Detail = tw.p` mt-2 `; const CheckboxWrapper = tw.label` flex items-center space-x-2 mt-2 `;