in
{/* Repository */}
- {repoAddress && repoPointer && (
-
-
- {repoName}
-
- )}
+ {repoAddress &&
}
{/* Commit ID */}
{shortCommitId && (
diff --git a/src/components/nostr/kinds/PullRequestDetailRenderer.tsx b/src/components/nostr/kinds/PullRequestDetailRenderer.tsx
index ddcac8e..5322573 100644
--- a/src/components/nostr/kinds/PullRequestDetailRenderer.tsx
+++ b/src/components/nostr/kinds/PullRequestDetailRenderer.tsx
@@ -1,10 +1,8 @@
import { useMemo } from "react";
-import { GitBranch, FolderGit2, Tag, Copy, CopyCheck } from "lucide-react";
+import { GitBranch, Tag, Copy, CopyCheck } from "lucide-react";
import { UserName } from "../UserName";
import { MarkdownContent } from "../MarkdownContent";
import { useCopy } from "@/hooks/useCopy";
-import { useGrimoire } from "@/core/state";
-import { useNostrEvent } from "@/hooks/useNostrEvent";
import type { NostrEvent } from "@/types/nostr";
import {
getPullRequestSubject,
@@ -15,18 +13,14 @@ import {
getPullRequestMergeBase,
getPullRequestRepositoryAddress,
} from "@/lib/nip34-helpers";
-import {
- getRepositoryName,
- getRepositoryIdentifier,
-} from "@/lib/nip34-helpers";
import { Label } from "@/components/ui/label";
+import { RepositoryLink } from "../RepositoryLink";
/**
* Detail renderer for Kind 1618 - Pull Request
* Displays full PR content with markdown rendering
*/
export function PullRequestDetailRenderer({ event }: { event: NostrEvent }) {
- const { addWindow } = useGrimoire();
const { copy, copied } = useCopy();
const subject = useMemo(() => getPullRequestSubject(event), [event]);
@@ -40,31 +34,6 @@ export function PullRequestDetailRenderer({ event }: { event: NostrEvent }) {
[event],
);
- // Parse repository address
- const repoPointer = useMemo(() => {
- if (!repoAddress) return null;
- try {
- const [kindStr, pubkey, identifier] = repoAddress.split(":");
- return {
- kind: parseInt(kindStr),
- pubkey,
- identifier,
- };
- } catch {
- return null;
- }
- }, [repoAddress]);
-
- // Fetch repository event
- const repoEvent = useNostrEvent(repoPointer || undefined);
-
- // Get repository display name
- const repoName = repoEvent
- ? getRepositoryName(repoEvent) ||
- getRepositoryIdentifier(repoEvent) ||
- "Repository"
- : repoPointer?.identifier || "Unknown Repository";
-
// Format created date
const createdDate = new Date(event.created_at * 1000).toLocaleDateString(
"en-US",
@@ -75,11 +44,6 @@ export function PullRequestDetailRenderer({ event }: { event: NostrEvent }) {
},
);
- const handleRepoClick = () => {
- if (!repoPointer || !repoEvent) return;
- addWindow("open", { pointer: repoPointer });
- };
-
return (
{/* PR Header */}
@@ -93,18 +57,11 @@ export function PullRequestDetailRenderer({ event }: { event: NostrEvent }) {
{repoAddress && (
Repository:
-
+
)}
diff --git a/src/components/nostr/kinds/PullRequestRenderer.tsx b/src/components/nostr/kinds/PullRequestRenderer.tsx
index 458e313..97ab93e 100644
--- a/src/components/nostr/kinds/PullRequestRenderer.tsx
+++ b/src/components/nostr/kinds/PullRequestRenderer.tsx
@@ -3,72 +3,26 @@ import {
type BaseEventProps,
ClickableEventTitle,
} from "./BaseEventRenderer";
-import { FolderGit2, GitBranch } from "lucide-react";
-import { useGrimoire } from "@/core/state";
-import { useNostrEvent } from "@/hooks/useNostrEvent";
+import { GitBranch } from "lucide-react";
import {
getPullRequestSubject,
getPullRequestLabels,
getPullRequestBranchName,
getPullRequestRepositoryAddress,
} from "@/lib/nip34-helpers";
-import {
- getRepositoryName,
- getRepositoryIdentifier,
-} from "@/lib/nip34-helpers";
import { Label } from "@/components/ui/label";
+import { RepositoryLink } from "../RepositoryLink";
/**
* Renderer for Kind 1618 - Pull Request
* Displays as a compact PR card in feed view
*/
export function PullRequestRenderer({ event }: BaseEventProps) {
- const { addWindow } = useGrimoire();
const subject = getPullRequestSubject(event);
const labels = getPullRequestLabels(event);
const branchName = getPullRequestBranchName(event);
const repoAddress = getPullRequestRepositoryAddress(event);
- // Parse repository address to get the pointer
- const repoPointer = repoAddress
- ? (() => {
- try {
- // Address format: "kind:pubkey:identifier"
- const [kindStr, pubkey, identifier] = repoAddress.split(":");
- return {
- kind: parseInt(kindStr),
- pubkey,
- identifier,
- };
- } catch {
- return null;
- }
- })()
- : null;
-
- // Fetch the repository event to get its name
- const repoEvent = useNostrEvent(
- repoPointer
- ? {
- kind: repoPointer.kind,
- pubkey: repoPointer.pubkey,
- identifier: repoPointer.identifier,
- }
- : undefined,
- );
-
- // Get repository display name
- const repoName = repoEvent
- ? getRepositoryName(repoEvent) ||
- getRepositoryIdentifier(repoEvent) ||
- "Repository"
- : repoAddress?.split(":")[2] || "Unknown Repository";
-
- const handleRepoClick = () => {
- if (!repoPointer) return;
- addWindow("open", { pointer: repoPointer });
- };
-
return (
@@ -82,14 +36,11 @@ export function PullRequestRenderer({ event }: BaseEventProps) {
{/* Repository */}
- {repoAddress && repoPointer && (
-
-
- {repoName}
-
+ {repoAddress && (
+
)}
{/* Branch Name */}
{branchName && (
diff --git a/src/components/nostr/kinds/RepositoryStateRenderer.tsx b/src/components/nostr/kinds/RepositoryStateRenderer.tsx
index c239b10..9aef180 100644
--- a/src/components/nostr/kinds/RepositoryStateRenderer.tsx
+++ b/src/components/nostr/kinds/RepositoryStateRenderer.tsx
@@ -3,24 +3,21 @@ import {
type BaseEventProps,
ClickableEventTitle,
} from "./BaseEventRenderer";
-import { GitCommit, FolderGit2 } from "lucide-react";
-import { useGrimoire } from "@/core/state";
-import { useNostrEvent } from "@/hooks/useNostrEvent";
+import { GitCommit } from "lucide-react";
import {
getRepositoryIdentifier,
getRepositoryStateHeadCommit,
parseHeadBranch,
getRepositoryStateHead,
- getRepositoryName,
} from "@/lib/nip34-helpers";
import { Label } from "@/components/ui/Label";
+import { RepositoryLink } from "../RepositoryLink";
/**
* Renderer for Kind 30618 - Repository State
* Displays as a compact git push notification in feed view
*/
export function RepositoryStateRenderer({ event }: BaseEventProps) {
- const { addWindow } = useGrimoire();
const repoId = getRepositoryIdentifier(event);
const headRef = getRepositoryStateHead(event);
const branch = parseHeadBranch(headRef);
@@ -35,48 +32,32 @@ export function RepositoryStateRenderer({ event }: BaseEventProps) {
}
: null;
- // Fetch the repository event to get its name
- const repoEvent = useNostrEvent(repoPointer || undefined);
-
- // Get repository display name
- const repoName = repoEvent
- ? getRepositoryName(repoEvent) || repoId || "Repository"
- : repoId || "repository";
-
const shortHash = commitHash?.substring(0, 8) || "unknown";
const branchName = branch || "unknown";
- const handleRepoClick = () => {
- if (repoPointer) {
- addWindow("open", { pointer: repoPointer });
- }
- };
-
return (
{/* Push notification */}
-
-
-
- pushed{" "}
-
- {shortHash}
-
- {" "}
- to in{" "}
- {repoPointer ? (
-
-
- {repoName}
-
- ) : (
- {repoName}
- )}
-
+
+
+
+ pushed{" "}
+
+ {shortHash}
+ {" "}
+ to
+ {" "}
+ in{" "}
+ {repoPointer ? (
+
+ ) : (
+ {repoId || "repository"}
+ )}