← Files NGS Analysis WorkbenchARCHIVED FILE

src/report/AnalysisReport.tsx

1.67 KB · Sep 30, 2026 · 23:20 UTC

↓ Download file

import type { AnalysisReportData, ReportArtifact } from "./types";
import { ReportArtifacts } from "./ReportArtifacts";
import { ReportDetails } from "./ReportDetails";
import { ReportHeader } from "./ReportHeader";
import { ReportNarrative } from "./ReportNarrative";
import styles from "./AnalysisReport.module.css";

interface AnalysisReportProps {
  report: AnalysisReportData;
  runId: string;
  registryRunId: string;
  onOpenArtifact?: (artifact: ReportArtifact) => void | Promise<void>;
}

const REVIEW_KINDS = new Set(["html_report", "localhost_app", "notebook"]);

export function AnalysisReport({
  report,
  runId,
  registryRunId,
  onOpenArtifact,
}: AnalysisReportProps) {
  const reviewArtifacts = report.entries.filter(
    (entry) => entry.status === "created" && REVIEW_KINDS.has(entry.kind),
  );
  const outputArtifacts = report.entries.filter(
    (entry) => entry.status === "created" && !REVIEW_KINDS.has(entry.kind),
  );
  return (
    <article className={styles.results} aria-labelledby="analysis-report-heading">
      <ReportHeader
        featuredArtifact={reviewArtifacts.find((entry) => entry.openUrl)}
        onOpenArtifact={onOpenArtifact}
        report={report}
        runId={runId}
      />

      <div className={styles.contentGrid}>
        <div className={styles.mainColumn}>
          <ReportNarrative report={report} registryRunId={registryRunId} />
          <ReportArtifacts
            onOpenArtifact={onOpenArtifact}
            outputArtifacts={outputArtifacts}
            reviewArtifacts={reviewArtifacts}
            runDirectory={report.runDirectory}
          />
        </div>

        <ReportDetails report={report} />
      </div>
    </article>
  );
}

SHA-256: 1fbbb90f270223848cd2240204ad097775ad96fb2871793223b247ffce57c88d