36 lines · 1.4 KB
import { createFileRoute, Outlet } from "@tanstack/react-router";
import { useRepo } from "~/hooks/use-repo";
import { SideNav, SideNavLayout, SideNavLink } from "~/ui/Nav";

const NAV = [
  { to: "/$owner/$repo/security", label: "Overview", exact: true, needsWrite: false },
  { to: "/$owner/$repo/security/advisories", label: "Advisories", exact: false, needsWrite: false },
  { to: "/$owner/$repo/security/secret-scanning", label: "Secret scanning", exact: false, needsWrite: true },
  { to: "/$owner/$repo/security/code-scanning", label: "Code scanning", exact: false, needsWrite: true },
  { to: "/$owner/$repo/security/dependencies", label: "Dependencies", exact: false, needsWrite: false },
] as const;

export const Route = createFileRoute("/$owner/$repo/security")({
  component: SecurityLayout,
});

function SecurityLayout() {
  const params = Route.useParams();
  const { permission } = useRepo();
  const canWrite = permission === "write" || permission === "admin";
  return (
    <SideNavLayout>
      <SideNav title="Security">
        {NAV.filter((item) => canWrite || !item.needsWrite).map((item) => (
          <SideNavLink key={item.to} to={item.to} params={params} activeOptions={{ exact: item.exact }}>
            {item.label}
          </SideNavLink>
        ))}
      </SideNav>
      <div className="min-w-0 space-y-6">
        <Outlet />
      </div>
    </SideNavLayout>
  );
}