RepoNav.tsx
| 1 | import type { RepositoryRow } from "../../db/index.ts"; |
| 2 | import type { SessionUser } from "../../middleware/session.ts"; |
| 3 | |
| 4 | interface 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 | |
| 19 | export 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 |