diff --git a/src/components/nostr/kinds/RepositoryStateDetailRenderer.tsx b/src/components/nostr/kinds/RepositoryStateDetailRenderer.tsx index a3e17dc..6393f2d 100644 --- a/src/components/nostr/kinds/RepositoryStateDetailRenderer.tsx +++ b/src/components/nostr/kinds/RepositoryStateDetailRenderer.tsx @@ -1,6 +1,8 @@ import { useMemo } from "react"; -import { GitBranch, GitCommit, Tag, Copy, CopyCheck } from "lucide-react"; +import { GitBranch, GitCommit, Tag, Copy, CopyCheck, FolderGit2 } from "lucide-react"; import { useCopy } from "@/hooks/useCopy"; +import { useGrimoire } from "@/core/state"; +import { useNostrEvent } from "@/hooks/useNostrEvent"; import type { NostrEvent } from "@/types/nostr"; import { getRepositoryIdentifier, @@ -9,6 +11,7 @@ import { getRepositoryStateHeadCommit, getRepositoryStateBranches, getRepositoryStateTags, + getRepositoryName, } from "@/lib/nip34-helpers"; /** @@ -16,6 +19,7 @@ import { * Displays full repository state with all refs, branches, and tags */ export function RepositoryStateDetailRenderer({ event }: { event: NostrEvent }) { + const { addWindow } = useGrimoire(); const repoId = useMemo(() => getRepositoryIdentifier(event), [event]); const headRef = useMemo(() => getRepositoryStateHead(event), [event]); const branch = useMemo(() => parseHeadBranch(headRef), [event, headRef]); @@ -23,14 +27,49 @@ export function RepositoryStateDetailRenderer({ event }: { event: NostrEvent }) const branches = useMemo(() => getRepositoryStateBranches(event), [event]); const tags = useMemo(() => getRepositoryStateTags(event), [event]); - const displayName = repoId || "Repository"; + // Create repository pointer (kind 30617) + const repoPointer = useMemo( + () => + repoId + ? { + kind: 30617, + pubkey: event.pubkey, + identifier: repoId, + } + : null, + [repoId, event.pubkey], + ); + + // Fetch the repository event to get its name + const repoEvent = useNostrEvent(repoPointer || undefined); + + // Get repository display name + const displayName = repoEvent + ? getRepositoryName(repoEvent) || repoId || "Repository" + : repoId || "Repository"; + + const handleRepoClick = () => { + if (repoPointer) { + addWindow("open", { pointer: repoPointer }); + } + }; return (
- {shortHash}
- {" "}
+
+ {shortHash}
+
+