RepoNav.tsx
Raw
1import type { RepositoryRow } from "../../db/index.ts";
2import type { SessionUser } from "../../middleware/session.ts";
3
4interface RepoNavProps {
5 repo: RepositoryRow;
6 active:
7 | "code"
8 | "branches"
9 | "tags"
10 | "commits"
11 | "issues"
12 | "patches"
13 | "releases"
14 | "ci"
15 | "settings";
16 user?: SessionUser | null;
17}
18
19export function RepoNav({ repo, active, user }: RepoNavProps) {
20 const tabs = [
21 { key: "code", label: "Code", href: `/${repo.name}` },
22 { key: "branches", label: "Branches", href: `/${repo.name}/branches` },
23 { key: "tags", label: "Tags", href: `/${repo.name}/tags` },
24 {
25 key: "commits",
26 label: "Commits",
27 href: `/${repo.name}/commits/${repo.default_branch}`,
28 },
29 { key: "issues", label: "Issues", href: `/${repo.name}/issues` },
30 { key: "patches", label: "Patches", href: `/${repo.name}/patches` },
31 { key: "releases", label: "Releases", href: `/${repo.name}/releases` },
32 { key: "ci", label: "Pipelines", href: `/${repo.name}/ci` },
33 ] as const;
34 return (
35 <div class="repo-nav-bar">
36 <nav class="repo-tabs">
37 {tabs.map((t) => (
38 <a
39 href={t.href}
40 class={`repo-tab${active === t.key ? " active" : ""}`}
41 >
42 {t.label}
43 </a>
44 ))}
45 {user?.isAdmin && (
46 <a
47 href={`/${repo.name}/settings`}
48 class={`repo-tab${active === "settings" ? " active" : ""}`}
49 >
50 Settings
51 </a>
52 )}
53 </nav>
54 </div>
55 );
56}
57