import { createFileRoute, Link } from "@tanstack/react-router";
import { z } from "zod";
import { getSecretAlerts, resolveSecretAlert } from "~/fns/security";
import { useAction } from "~/hooks/use-action";
import { buttonClass } from "~/ui/Button";
import { InlineSelect } from "~/ui/Field";
import { ErrorBanner } from "~/ui/Callout";
import { Badge } from "~/ui/Badge";
import { EmptyState } from "~/ui/EmptyState";
import { Panel } from "~/ui/Panel";
import { RelativeTime } from "~/ui/RelativeTime";
import { cn } from "~/utils/cn";
import { Callout } from "~/ui/Callout";
export const Route = createFileRoute("/$owner/$repo/security/secret-scanning/")({
validateSearch: z.object({
state: z.enum(["open", "resolved"]).optional(),
page: z.number().int().min(1).optional(),
}),
loaderDeps: ({ search }) => ({ state: search.state ?? "open", page: search.page ?? 1 }),
loader: ({ params, deps }) =>
getSecretAlerts({ data: { owner: params.owner, repo: params.repo, state: deps.state, page: deps.page } }),
component: SecretScanningPage,
});
const RESOLUTIONS = [
{ value: "revoked", label: "Revoked" },
{ value: "false_positive", label: "False positive" },
{ value: "used_in_tests", label: "Used in tests" },
{ value: "wont_fix", label: "Won't fix" },
] as const;
function resolutionOf(value: string) {
return RESOLUTIONS.find((option) => option.value === value)?.value ?? null;
}
function SecretScanningPage() {
const data = Route.useLoaderData();
const params = Route.useParams();
const search = Route.useSearch();