File size: 1,080 Bytes
041816c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import { useState } from "react";
import Uploader from "./Uploader";
import ResultsTable from "./ResultsTable";
import type { DiagnoseResult } from "../lib/radar";
import { diagnoseRemote } from "../lib/radar";

export default function AppShell() {
  const [result, setResult] = useState<DiagnoseResult | null>(null);
  const [busy, setBusy] = useState(false);
  const [error, setError] = useState<string | null>(null);
  const [lastFiles, setLastFiles] = useState<File[]>([]);

  async function run(files: File[]) {
    setBusy(true);
    setError(null);
    setLastFiles(files);
    try {
      setResult(await diagnoseRemote(files));
    } catch (e) {
      setError(e instanceof Error ? e.message : "GPU busy or unreachable — Retry");
    } finally {
      setBusy(false);
    }
  }

  return (
    <div className="space-y-6">
      <Uploader busy={busy} onSubmit={run} />
      <ResultsTable
        result={result}
        busy={busy}
        error={error}
        onRetry={() => {
          if (lastFiles.length > 0) run(lastFiles);
        }}
      />
    </div>
  );
}