1
0

agent-diagnosis.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. "use client";
  2. import { Button } from "./ui/button";
  3. import { useDiagnosisRunner } from "@/hooks/use-diagnosis";
  4. import { CheckKey, DiagnosisResult, DiagnosisResultType } from "./diagnosis-result";
  5. import { checks } from "@/components/diagnosis-result";
  6. import { useEffect, useRef, useState } from "react";
  7. import { Agent } from "@/types/agent";
  8. interface AgentVrmDiagnosisProps {
  9. agent: Agent
  10. index: number;
  11. setDiagnosisIsPassed: (isPassed: boolean) => void;
  12. }
  13. export function AgentVrmDiagnosis({
  14. agent,
  15. index,
  16. setDiagnosisIsPassed,
  17. }: AgentVrmDiagnosisProps) {
  18. const hasChecked = useRef(false);
  19. const { results, checking, handleDiagnosis } = useDiagnosisRunner(agent, index);
  20. // Check agent status on mount
  21. useEffect(() => {
  22. if (!hasChecked.current) {
  23. handleDiagnosis();
  24. hasChecked.current = true;
  25. }
  26. }, []);
  27. // Set diagnosis is passed flag
  28. useEffect(() => {
  29. const isPassed = (
  30. Object.keys(results) as (keyof DiagnosisResultType)[]
  31. )
  32. .filter((key): key is CheckKey => key !== "overall")
  33. .every((key) => results[key].status === "pass");
  34. setDiagnosisIsPassed(isPassed);
  35. }, [results]);
  36. return (
  37. <div className="w-full p-6 border border-gray-200 rounded-3xl bg-white shadow-xl flex flex-col justify-between">
  38. <div className="flex flex-col md:flex-row justify-between items-center mb-6">
  39. <h2 className="text-2xl font-orbitron text-gray-800 mb-2 md:mb-0">
  40. Talent Show Score:{" "}
  41. <span className="font-bold">
  42. {results["overall"] || agent.talentShowScore || "N/A"}
  43. </span>
  44. </h2>
  45. <Button
  46. onClick={() => handleDiagnosis(false)}
  47. disabled={checking}
  48. className="bg-gradient-to-r from-purple-500 to-indigo-600 hover:from-purple-600 hover:to-indigo-700 text-white font-orbitron px-6 py-2 rounded-xl shadow"
  49. >
  50. {checking ? "Loading..." : "Evaluate Agent"}
  51. </Button>
  52. </div>
  53. <div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
  54. {checks.map(({ label, key }) => (
  55. <DiagnosisResult key={key} label={label} status={results[key]} />
  56. ))}
  57. </div>
  58. </div>
  59. );
  60. }