44 lines · 1.9 KB
import { createFileRoute, Outlet } from "@tanstack/react-router";
import { SideNav, SideNavLayout, SideNavLink } from "~/ui/Nav";

const NAV = [
  { to: "/$owner/$repo/settings", label: "General", exact: true },
  { to: "/$owner/$repo/settings/collaborators", label: "Collaborators", exact: false },
  { to: "/$owner/$repo/settings/branches", label: "Branch protection", exact: false },
  { to: "/$owner/$repo/settings/webhooks", label: "Webhooks", exact: false },
  { to: "/$owner/$repo/settings/integrations", label: "Integrations", exact: false },
  { to: "/$owner/$repo/settings/secrets", label: "Actions secrets", exact: false },
  { to: "/$owner/$repo/settings/deploy-tokens", label: "Deploy tokens", exact: false },
  { to: "/$owner/$repo/settings/variables", label: "Actions variables", exact: false },
  { to: "/$owner/$repo/settings/environments", label: "Environments", exact: false },
  { to: "/$owner/$repo/settings/runners", label: "Runners", exact: false },
  { to: "/$owner/$repo/settings/containers", label: "Containers", exact: false },
  { to: "/$owner/$repo/settings/lfs", label: "Git LFS", exact: false },
  { to: "/$owner/$repo/settings/pages", label: "Pages", exact: false },
  { to: "/$owner/$repo/settings/sites", label: "Sites", exact: false },
  { to: "/$owner/$repo/settings/planning", label: "Issues & discussions", exact: false },
  { to: "/$owner/$repo/settings/ai", label: "AI merge fixes", exact: false },
] as const;

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

function RepoSettingsLayout() {
  const params = Route.useParams();
  return (
    <SideNavLayout>
      <SideNav>
        {NAV.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>