diff --git a/src/helpers/nostr/lists.ts b/src/helpers/nostr/lists.ts index d2ff28dc6..70c922dde 100644 --- a/src/helpers/nostr/lists.ts +++ b/src/helpers/nostr/lists.ts @@ -1,8 +1,8 @@ import dayjs from "dayjs"; -import { Kind, nip19 } from "nostr-tools"; +import { Kind } from "nostr-tools"; import { AddressPointer } from "nostr-tools/lib/nip19"; -import { DraftNostrEvent, NostrEvent, isATag, isDTag, isETag, isPTag } from "../../types/nostr-event"; +import { DraftNostrEvent, NostrEvent, isATag, isDTag, isETag, isPTag, isRTag } from "../../types/nostr-event"; import { parseCoordinate } from "./events"; export const PEOPLE_LIST_KIND = 30000; @@ -31,6 +31,9 @@ export function getPubkeysFromList(event: NostrEvent) { export function getEventsFromList(event: NostrEvent) { return event.tags.filter(isETag).map((t) => ({ id: t[1], relay: t[2] })); } +export function getReferencesFromList(event: NostrEvent) { + return event.tags.filter(isRTag).map((t) => ({ url: t[1], petname: t[2] })); +} export function getCoordinatesFromList(event: NostrEvent) { return event.tags.filter(isATag).map((t) => ({ coordinate: t[1], relay: t[2] })); } diff --git a/src/views/lists/components/list-card.tsx b/src/views/lists/components/list-card.tsx index 6cbe2eec6..eb5745343 100644 --- a/src/views/lists/components/list-card.tsx +++ b/src/views/lists/components/list-card.tsx @@ -22,6 +22,7 @@ import { getListName, getParsedCordsFromList, getPubkeysFromList, + getReferencesFromList, isSpecialListKind, } from "../../../helpers/nostr/lists"; import { getSharableEventAddress } from "../../../helpers/nip19"; @@ -42,6 +43,7 @@ function ListCardRender({ list, ...props }: Omit & { list const notes = getEventsFromList(list); const coordinates = getParsedCordsFromList(list); const communities = coordinates.filter((cord) => cord.kind === COMMUNITY_DEFINITION_KIND); + const references = getReferencesFromList(list); const link = isSpecialListKind(list.kind) ? createCoordinate(list.kind, list.pubkey) : getSharableEventAddress(list); // if there is a parent intersection observer, register this card @@ -90,6 +92,11 @@ function ListCardRender({ list, ...props }: Omit & { list )} + {references.length > 0 && ( + <> + References ({references.length}) + + )} {communities.length > 0 && ( <> Communities ({communities.length}): diff --git a/src/views/lists/list-details.tsx b/src/views/lists/list-details.tsx index add0f6928..95a8804a9 100644 --- a/src/views/lists/list-details.tsx +++ b/src/views/lists/list-details.tsx @@ -7,9 +7,16 @@ import { ArrowLeftSIcon } from "../../components/icons"; import { useCurrentAccount } from "../../hooks/use-current-account"; import { useDeleteEventContext } from "../../providers/delete-event-provider"; import { parseCoordinate } from "../../helpers/nostr/events"; -import { getEventsFromList, getListName, getParsedCordsFromList, getPubkeysFromList } from "../../helpers/nostr/lists"; +import { + getEventsFromList, + getListName, + getParsedCordsFromList, + getPubkeysFromList, + getReferencesFromList, +} from "../../helpers/nostr/lists"; import useReplaceableEvent from "../../hooks/use-replaceable-event"; import UserCard from "./components/user-card"; +import OpenGraphCard from "../../components/open-graph-card"; import NoteCard from "./components/note-card"; import { TrustProvider } from "../../providers/trust"; import ListMenu from "./components/list-menu"; @@ -53,6 +60,7 @@ export default function ListDetailsView() { const notes = getEventsFromList(list); const coordinates = getParsedCordsFromList(list); const communities = coordinates.filter((cord) => cord.kind === COMMUNITY_DEFINITION_KIND); + const references = getReferencesFromList(list); return ( @@ -103,6 +111,23 @@ export default function ListDetailsView() { )} + {references.length > 0 && ( + <> + References + + + + {references.map(({ url, petname }) => ( + <> + {petname && {petname}} + + + ))} + + + + )} + {communities.length > 0 && ( <> Communities diff --git a/src/views/note/components/reply-form.tsx b/src/views/note/components/reply-form.tsx index b386defe8..67c330f70 100644 --- a/src/views/note/components/reply-form.tsx +++ b/src/views/note/components/reply-form.tsx @@ -23,6 +23,7 @@ import { unique } from "../../../helpers/array"; import MagicTextArea from "../../../components/magic-textarea"; import { useContextEmojis } from "../../../providers/emoji-provider"; import UserDirectoryProvider from "../../../providers/user-directory-provider"; +import { TrustProvider } from "../../../providers/trust"; export type ReplyFormProps = { item: ThreadItem; @@ -81,7 +82,9 @@ export default function ReplyForm({ item, onCancel, onSubmitted }: ReplyFormProp /> {getValues().content.length > 0 && ( - + + + )} diff --git a/src/views/user/about.tsx b/src/views/user/about.tsx index bf55f51c3..529810358 100644 --- a/src/views/user/about.tsx +++ b/src/views/user/about.tsx @@ -302,6 +302,15 @@ export default function UserAboutTab() { > Slidestr Slideshow + );