diff --git a/web/src/app/routeTree.gen.ts b/web/src/app/routeTree.gen.ts index b978d6651..dad9b8f5c 100644 --- a/web/src/app/routeTree.gen.ts +++ b/web/src/app/routeTree.gen.ts @@ -7,6 +7,7 @@ import { Route as rootRouteImport } from "./routes/root"; import { Route as reposRouteImport } from "./routes/repos"; import { Route as indexRouteImport } from "./routes/index"; +import { Route as reposDotrepoIdRouteImport } from "./routes/repos.$repoId"; const reposRoute = reposRouteImport.update({ id: "/repos", @@ -18,31 +19,40 @@ const indexRoute = indexRouteImport.update({ path: "/", getParentRoute: () => rootRouteImport, } as any); +const reposDotrepoIdRoute = reposDotrepoIdRouteImport.update({ + id: "/repos/$repoId", + path: "/repos/$repoId", + getParentRoute: () => rootRouteImport, +} as any); export interface FileRoutesByFullPath { "/": typeof indexRoute; "/repos": typeof reposRoute; + "/repos/$repoId": typeof reposDotrepoIdRoute; } export interface FileRoutesByTo { "/": typeof indexRoute; "/repos": typeof reposRoute; + "/repos/$repoId": typeof reposDotrepoIdRoute; } export interface FileRoutesById { __root__: typeof rootRouteImport; "/": typeof indexRoute; "/repos": typeof reposRoute; + "/repos/$repoId": typeof reposDotrepoIdRoute; } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath; - fullPaths: "/" | "/repos"; + fullPaths: "/" | "/repos" | "/repos/$repoId"; fileRoutesByTo: FileRoutesByTo; - to: "/" | "/repos"; - id: "__root__" | "/" | "/repos"; + to: "/" | "/repos" | "/repos/$repoId"; + id: "__root__" | "/" | "/repos" | "/repos/$repoId"; fileRoutesById: FileRoutesById; } export interface RootRouteChildren { indexRoute: typeof indexRoute; reposRoute: typeof reposRoute; + reposDotrepoIdRoute: typeof reposDotrepoIdRoute; } declare module "@tanstack/react-router" { @@ -61,12 +71,20 @@ declare module "@tanstack/react-router" { preLoaderRoute: typeof indexRouteImport; parentRoute: typeof rootRouteImport; }; + "/repos/$repoId": { + id: "/repos/$repoId"; + path: "/repos/$repoId"; + fullPath: "/repos/$repoId"; + preLoaderRoute: typeof reposDotrepoIdRouteImport; + parentRoute: typeof rootRouteImport; + }; } } const rootRouteChildren: RootRouteChildren = { indexRoute: indexRoute, reposRoute: reposRoute, + reposDotrepoIdRoute: reposDotrepoIdRoute, }; export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) diff --git a/web/src/app/routes.ts b/web/src/app/routes.ts index 25c385bb1..e34f6152b 100644 --- a/web/src/app/routes.ts +++ b/web/src/app/routes.ts @@ -3,4 +3,5 @@ import { index, route, rootRoute } from "@tanstack/virtual-file-routes"; export const routes = rootRoute("root.tsx", [ index("index.tsx"), route("/repos", "repos.tsx"), + route("/repos/$repoId", "repos.$repoId.tsx"), ]); diff --git a/web/src/app/routes/repos.$repoId.tsx b/web/src/app/routes/repos.$repoId.tsx new file mode 100644 index 000000000..ccabe8250 --- /dev/null +++ b/web/src/app/routes/repos.$repoId.tsx @@ -0,0 +1,6 @@ +import { createFileRoute } from "@tanstack/react-router"; +import { RepoDetailPage } from "@/features/repos/ui/RepoDetailPage"; + +export const Route = createFileRoute("/repos/$repoId")({ + component: RepoDetailPage, +}); diff --git a/web/src/features/repos/ui/ConnectButton.tsx b/web/src/features/repos/ui/ConnectButton.tsx index d4d7c6209..f77032934 100644 --- a/web/src/features/repos/ui/ConnectButton.tsx +++ b/web/src/features/repos/ui/ConnectButton.tsx @@ -10,7 +10,7 @@ export function ConnectButton({ className }: { className?: string }) { ); diff --git a/web/src/features/repos/ui/OrgSidebar.tsx b/web/src/features/repos/ui/OrgSidebar.tsx index 18b0a578c..9755ff387 100644 --- a/web/src/features/repos/ui/OrgSidebar.tsx +++ b/web/src/features/repos/ui/OrgSidebar.tsx @@ -3,31 +3,10 @@ import { useMemo } from "react"; import type { Repo } from "../use-repos"; import { ConnectButton } from "./ConnectButton"; +import { PubkeyAvatar } from "./PubkeyAvatar"; const MAX_AVATARS = 20; -/** Simple hash of a hex pubkey to a hue value (0-360). */ -function pubkeyToHue(hex: string): number { - let hash = 0; - for (let i = 0; i < hex.length; i++) { - hash = (hash * 31 + hex.charCodeAt(i)) | 0; - } - return Math.abs(hash) % 360; -} - -function PubkeyAvatar({ pubkey }: { pubkey: string }) { - const hue = pubkeyToHue(pubkey); - return ( -
{url}
+
+ + This repository may have been removed or doesn't exist on this + relay. +
++ {repo.description} +
+ )} ++ Updated {relativeTime(repo.createdAt)} +
++ Open this relay in the Sprout desktop app to push code and + collaborate. +
+- {hasSearch - ? "Try adjusting your search term." - : "Repositories published to this relay will appear here. Push a git repo using the Sprout desktop app to get started."} + Try adjusting your search term.
- {!hasSearch &&+ Repositories pushed to this relay will show up here. Open this relay in + the Sprout desktop app to start pushing code. +
+