diff --git a/src/app/components/ProfileDetail.svelte b/src/app/components/ProfileDetail.svelte index 9600e038..1feafb21 100644 --- a/src/app/components/ProfileDetail.svelte +++ b/src/app/components/ProfileDetail.svelte @@ -17,6 +17,7 @@ import ProfileAbout from "@app/components/ProfileAbout.svelte" import ProfileBadges from "@app/components/ProfileBadges.svelte" import ProfileMenu from "@app/components/ProfileMenu.svelte" + import ProfilePinnedNote from "@app/components/ProfilePinnedNote.svelte" import ProfileStatus from "@app/components/ProfileStatus.svelte" import {messagingRelayLists, profiles, relayManagement, user} from "@app/core" import {deriveUserIsSpaceAdmin} from "@app/management" @@ -138,6 +139,7 @@ + diff --git a/src/app/components/ProfilePageNotes.svelte b/src/app/components/ProfilePageNotes.svelte index 2b129e61..15664d0d 100644 --- a/src/app/components/ProfilePageNotes.svelte +++ b/src/app/components/ProfilePageNotes.svelte @@ -1,18 +1,18 @@ + +{#if event} +
+

+ + Pinned note +

+ + + +
+{/if} diff --git a/src/app/core.ts b/src/app/core.ts index ff13babc..7325013f 100644 --- a/src/app/core.ts +++ b/src/app/core.ts @@ -16,6 +16,7 @@ import { MessagingRelayLists, MuteLists, Network, + PinLists, Profiles, Reactions, RelayLists, @@ -143,6 +144,7 @@ export const logger = usePlugin(Logger) export const messagingRelayLists = usePlugin(MessagingRelayLists) export const muteLists = usePlugin(MuteLists) export const network = usePlugin(Network) +export const pinLists = usePlugin(PinLists) export const profiles = usePlugin(Profiles) export const reactions = usePlugin(Reactions) export const relayLists = usePlugin(RelayLists) diff --git a/src/app/pins.ts b/src/app/pins.ts new file mode 100644 index 00000000..aa26d997 --- /dev/null +++ b/src/app/pins.ts @@ -0,0 +1,36 @@ +import {derived} from "svelte/store" +import type {Readable} from "svelte/store" +import {getIdFilters, outbox} from "@welshman/util" +import type {TrustedEvent} from "@welshman/util" +import {network, pinLists, router} from "@app/core" +import {deriveEvents} from "@app/repository" + +export const derivePinnedEvents = (pubkey: string): Readable => + derived( + pinLists.get().one(pubkey), + ($pinList, set: (events: TrustedEvent[]) => void) => { + const ids = $pinList?.ids() || [] + + if (ids.length > 0) { + const controller = new AbortController() + const filters = getIdFilters(ids) + + router + .get() + .resolver.relays([outbox(pubkey)]) + .then($relays => + network.get().load({relays: $relays, filters, signal: controller.signal}), + ) + + const unsubscribe = deriveEvents(filters).subscribe(set) + + return () => { + controller.abort() + unsubscribe() + } + } + + set([]) + }, + [] as TrustedEvent[], + )