From 0c244e0dae8cbec747cd8b5c46cc6ede2e522d6c Mon Sep 17 00:00:00 2001 From: gzuuus Date: Sat, 16 Sep 2023 13:21:26 +0200 Subject: [PATCH 1/5] Nostree basic implementation --- src/helpers/nostr/lists.ts | 5 ++++- src/views/lists/components/list-card.tsx | 14 +++++++++++++- src/views/lists/list-details.tsx | 19 ++++++++++++++++++- src/views/user/about.tsx | 9 +++++++++ 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/helpers/nostr/lists.ts b/src/helpers/nostr/lists.ts index 286eba0d4..a7e22638e 100644 --- a/src/helpers/nostr/lists.ts +++ b/src/helpers/nostr/lists.ts @@ -1,6 +1,6 @@ import dayjs from "dayjs"; import { Kind } from "nostr-tools"; -import { DraftNostrEvent, NostrEvent, isATag, isDTag, isETag, isPTag } from "../../types/nostr-event"; +import { DraftNostrEvent, NostrEvent, isATag, isDTag, isETag, isPTag, isRTag } from "../../types/nostr-event"; export const PEOPLE_LIST_KIND = 30000; export const NOTE_LIST_KIND = 30001; @@ -24,6 +24,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 a6ff24b73..48a848ea6 100644 --- a/src/views/lists/components/list-card.tsx +++ b/src/views/lists/components/list-card.tsx @@ -16,7 +16,13 @@ import { import { UserAvatarLink } from "../../../components/user-avatar-link"; import { UserLink } from "../../../components/user-link"; -import { getEventsFromList, getListName, getPubkeysFromList, isSpecialListKind } from "../../../helpers/nostr/lists"; +import { + getEventsFromList, + getListName, + getPubkeysFromList, + getReferencesFromList, + isSpecialListKind, +} from "../../../helpers/nostr/lists"; import { getSharableEventAddress } from "../../../helpers/nip19"; import { NostrEvent } from "../../../types/nostr-event"; import useReplaceableEvent from "../../../hooks/use-replaceable-event"; @@ -32,6 +38,7 @@ import Timestamp from "../../../components/timestamp"; function ListCardRender({ event, ...props }: Omit & { event: NostrEvent }) { const people = getPubkeysFromList(event); const notes = getEventsFromList(event); + const references = getReferencesFromList(event); const link = isSpecialListKind(event.kind) ? createCoordinate(event.kind, event.pubkey) : getSharableEventAddress(event); @@ -82,6 +89,11 @@ function ListCardRender({ event, ...props }: Omit & { eve )} + {references.length > 0 && ( + <> + References ({references.length}): + + )} diff --git a/src/views/lists/list-details.tsx b/src/views/lists/list-details.tsx index 48a1c6da7..19bb199a9 100644 --- a/src/views/lists/list-details.tsx +++ b/src/views/lists/list-details.tsx @@ -7,7 +7,7 @@ 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, getPubkeysFromList } from "../../helpers/nostr/lists"; +import { getEventsFromList, getListName, getPubkeysFromList, getReferencesFromList } from "../../helpers/nostr/lists"; import useReplaceableEvent from "../../hooks/use-replaceable-event"; import { EventRelays } from "../../components/note/note-relays"; import UserCard from "./components/user-card"; @@ -49,6 +49,7 @@ export default function ListDetailsView() { const isAuthor = account?.pubkey === event.pubkey; const people = getPubkeysFromList(event); const notes = getEventsFromList(event); + const references = getReferencesFromList(event); return ( @@ -100,6 +101,22 @@ export default function ListDetailsView() { )} + + {references.length > 0 && ( + <> + References + + + + {references.map(({ url, petname }) => ( + + + + ))} + + + + )} ); } 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 + ); From 9baffbc52036d323c9aaca286b4c1e9a9583a20a Mon Sep 17 00:00:00 2001 From: hzrd149 Date: Sat, 16 Sep 2023 11:52:44 -0500 Subject: [PATCH 2/5] trust preview in reply form --- src/views/note/components/reply-form.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 && ( - + + + )} From 6f8eb6087e54369f2d22ef3f4c3afb3b8beb8a73 Mon Sep 17 00:00:00 2001 From: hzrd149 <8001706+hzrd149@users.noreply.github.com> Date: Mon, 18 Sep 2023 08:14:22 -0500 Subject: [PATCH 3/5] Update src/views/lists/list-details.tsx --- src/views/lists/list-details.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/views/lists/list-details.tsx b/src/views/lists/list-details.tsx index 19bb199a9..ee28db0be 100644 --- a/src/views/lists/list-details.tsx +++ b/src/views/lists/list-details.tsx @@ -11,6 +11,7 @@ import { getEventsFromList, getListName, getPubkeysFromList, getReferencesFromLi import useReplaceableEvent from "../../hooks/use-replaceable-event"; import { EventRelays } from "../../components/note/note-relays"; 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"; From 82f2743a9f5a8259fcbc6ea7ce39b27310c05b11 Mon Sep 17 00:00:00 2001 From: hzrd149 <8001706+hzrd149@users.noreply.github.com> Date: Mon, 18 Sep 2023 08:14:29 -0500 Subject: [PATCH 4/5] Update src/views/lists/list-details.tsx --- src/views/lists/list-details.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/views/lists/list-details.tsx b/src/views/lists/list-details.tsx index ee28db0be..7bc39bd07 100644 --- a/src/views/lists/list-details.tsx +++ b/src/views/lists/list-details.tsx @@ -110,9 +110,10 @@ export default function ListDetailsView() { {references.map(({ url, petname }) => ( - - - + <> + {petname && {petname}} + + ))} From e3ba666f32fede9cc83be4dc5392db11f121f945 Mon Sep 17 00:00:00 2001 From: hzrd149 <8001706+hzrd149@users.noreply.github.com> Date: Mon, 18 Sep 2023 08:14:41 -0500 Subject: [PATCH 5/5] Update src/views/lists/components/list-card.tsx --- src/views/lists/components/list-card.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/lists/components/list-card.tsx b/src/views/lists/components/list-card.tsx index 48a848ea6..b8bfc8f40 100644 --- a/src/views/lists/components/list-card.tsx +++ b/src/views/lists/components/list-card.tsx @@ -91,7 +91,7 @@ function ListCardRender({ event, ...props }: Omit & { eve )} {references.length > 0 && ( <> - References ({references.length}): + References ({references.length}) )}