diff --git a/.changeset/fuzzy-pumpkins-allow.md b/.changeset/fuzzy-pumpkins-allow.md
new file mode 100644
index 000000000..b8dd7ff6f
--- /dev/null
+++ b/.changeset/fuzzy-pumpkins-allow.md
@@ -0,0 +1,5 @@
+---
+"nostrudel": minor
+---
+
+Make all note links nevent
diff --git a/src/components/note-link.tsx b/src/components/note-link.tsx
index 45cdf6024..828930571 100644
--- a/src/components/note-link.tsx
+++ b/src/components/note-link.tsx
@@ -1,18 +1,31 @@
import { Link, LinkProps } from "@chakra-ui/react";
import { Link as RouterLink } from "react-router-dom";
-import { Bech32Prefix, normalizeToBech32 } from "../helpers/nip19";
import { truncatedId } from "../helpers/nostr-event";
+import { nip19 } from "nostr-tools";
+import { getEventRelays } from "../services/event-relays";
+import relayScoreboardService from "../services/relay-scoreboard";
+import { useMemo } from "react";
+
+export function getSharableEncodedNoteId(eventId: string) {
+ const relays = getEventRelays(eventId).value;
+ const ranked = relayScoreboardService.getRankedRelays(relays);
+ const onlyTwo = ranked.slice(0, 2);
+
+ if (onlyTwo.length > 0) {
+ return nip19.neventEncode({ id: eventId, relays: onlyTwo });
+ } else return nip19.noteEncode(eventId);
+}
export type NoteLinkProps = LinkProps & {
noteId: string;
};
-export const NoteLink = ({ noteId, ...props }: NoteLinkProps) => {
- const note1 = normalizeToBech32(noteId, Bech32Prefix.Note) ?? noteId;
+export const NoteLink = ({ children, noteId, color = "blue.500", ...props }: NoteLinkProps) => {
+ const encoded = useMemo(() => getSharableEncodedNoteId(noteId), [noteId]);
return (
-
- {truncatedId(note1)}
+
+ {children || truncatedId(nip19.noteEncode(noteId))}
);
};
diff --git a/src/components/note/embeded-note.tsx b/src/components/note/embeded-note.tsx
index ec3e8b669..15c8e6a7f 100644
--- a/src/components/note/embeded-note.tsx
+++ b/src/components/note/embeded-note.tsx
@@ -12,6 +12,7 @@ import useSubject from "../../hooks/use-subject";
import appSettings from "../../services/app-settings";
import EventVerificationIcon from "../event-verification-icon";
import { TrustProvider } from "./trust";
+import { NoteLink } from "../note-link";
export default function EmbeddedNote({ note }: { note: NostrEvent }) {
const { showSignatureVerification } = useSubject(appSettings);
@@ -29,9 +30,9 @@ export default function EmbeddedNote({ note }: { note: NostrEvent }) {
{showSignatureVerification && }
-
+
{moment(convertTimestampToDate(note.created_at)).fromNow()}
-
+
diff --git a/src/components/note/index.tsx b/src/components/note/index.tsx
index 1fbb91886..2c91a6969 100644
--- a/src/components/note/index.tsx
+++ b/src/components/note/index.tsx
@@ -1,5 +1,4 @@
import React, { useMemo } from "react";
-import { Link as RouterLink } from "react-router-dom";
import moment from "moment";
import {
Box,
@@ -16,7 +15,6 @@ import {
} from "@chakra-ui/react";
import { NostrEvent } from "../../types/nostr-event";
import { UserAvatarLink } from "../user-avatar-link";
-import { Bech32Prefix, normalizeToBech32 } from "../../helpers/nip19";
import { NoteMenu } from "./note-menu";
import { NoteRelays } from "./note-relays";
@@ -36,6 +34,7 @@ import { QuoteRepostButton } from "./buttons/quote-repost-button";
import { ExternalLinkIcon } from "../icons";
import NoteContentWithWarning from "./note-content-with-warning";
import { TrustProvider } from "./trust";
+import { NoteLink } from "../note-link";
export type NoteProps = {
event: NostrEvent;
@@ -63,9 +62,9 @@ export const Note = React.memo(({ event, maxHeight, variant = "outline" }: NoteP
{showSignatureVerification && }
-
+
{moment(convertTimestampToDate(event.created_at)).fromNow()}
-
+
diff --git a/src/components/note/note-menu.tsx b/src/components/note/note-menu.tsx
index b4ae901da..1820da1ae 100644
--- a/src/components/note/note-menu.tsx
+++ b/src/components/note/note-menu.tsx
@@ -13,7 +13,6 @@ import {
useToast,
} from "@chakra-ui/react";
import { useCopyToClipboard } from "react-use";
-import { nip19 } from "nostr-tools";
import { Bech32Prefix, normalizeToBech32 } from "../../helpers/nip19";
import { NostrEvent } from "../../types/nostr-event";
@@ -21,8 +20,6 @@ import { MenuIconButton, MenuIconButtonProps } from "../menu-icon-button";
import { ClipboardIcon, CodeIcon, LikeIcon, RepostIcon, TrashIcon } from "../icons";
import NoteReactionsModal from "./note-zaps-modal";
-import { getEventRelays } from "../../services/event-relays";
-import relayScoreboardService from "../../services/relay-scoreboard";
import NoteDebugModal from "../debug-modals/note-debug-modal";
import { useCurrentAccount } from "../../hooks/use-current-account";
import { useCallback, useState } from "react";
@@ -31,16 +28,7 @@ import { buildDeleteEvent } from "../../helpers/nostr-event";
import signingService from "../../services/signing";
import { nostrPostAction } from "../../classes/nostr-post-action";
import clientRelaysService from "../../services/client-relays";
-
-function getShareLink(eventId: string) {
- const relays = getEventRelays(eventId).value;
- const ranked = relayScoreboardService.getRankedRelays(relays);
- const onlyTwo = ranked.slice(0, 2);
-
- if (onlyTwo.length > 0) {
- return nip19.neventEncode({ id: eventId, relays: onlyTwo });
- } else return nip19.noteEncode(eventId);
-}
+import { getSharableEncodedNoteId } from "../note-link";
export const NoteMenu = ({ event, ...props }: { event: NostrEvent } & Omit) => {
const account = useCurrentAccount();
@@ -80,7 +68,7 @@ export const NoteMenu = ({ event, ...props }: { event: NostrEvent } & Omit}>
Zaps/Reactions
-