58 lines · 2.0 KB
import { Link } from "@tanstack/react-router";
import { SeverityBadge } from "./SeverityBadge";
import { Badge } from "~/ui/Badge";

type Alert = {
  number: number;
  tool: string;
  ruleId: string;
  ruleName: string | null;
  severity: string;
  securitySeverity: string | null;
  message: string;
  path: string | null;
  startLine: number | null;
  commitSha: string;
  state: string;
};

export function CodeAlertList({ owner, repo, alerts }: { owner: string; repo: string; alerts: Alert[] }) {
  return (
    <ul className="divide-y divide-kumo-hairline">
      {alerts.map((alert) => (
        <li key={alert.number} className="flex items-start gap-3 px-4 py-3">
          <span className="pt-0.5 font-mono text-xs text-kumo-subtle">#{alert.number}</span>
          <div className="min-w-0 flex-1">
            <Link
              to="/$owner/$repo/security/code-scanning/$number"
              params={{ owner, repo, number: String(alert.number) }}
              className="block truncate text-sm font-medium text-kumo-strong hover:text-accent-400"
            >
              {alert.ruleName ?? alert.ruleId}
            </Link>
            <p className="truncate text-xs text-kumo-subtle">{alert.message}</p>
            <div className="text-xs text-kumo-subtle">
              {alert.tool} · <span className="font-mono">{alert.ruleId}</span>
              {alert.path && (
                <>
                  {" · "}
                  <Link
                    to="/$owner/$repo/blob/$"