From 7174ed2502d048497c92740d5ab2a05199c6c725 Mon Sep 17 00:00:00 2001 From: Kieran Date: Tue, 14 Nov 2023 12:55:46 +0000 Subject: [PATCH] refactor: simplify useEventReactions hook --- packages/app/src/Element/Event/LongFormText.tsx | 4 ++-- packages/app/src/Element/Event/NoteInner.tsx | 2 +- packages/app/src/Feed/ZapsFeed.ts | 3 +-- packages/app/src/Pages/Notifications.tsx | 2 +- packages/system-react/package.json | 4 ++-- packages/system-react/src/useEventReactions.tsx | 15 +++++---------- packages/system/package.json | 2 +- packages/system/src/zaps.ts | 10 +--------- 8 files changed, 14 insertions(+), 28 deletions(-) diff --git a/packages/app/src/Element/Event/LongFormText.tsx b/packages/app/src/Element/Event/LongFormText.tsx index ad460b69..daef1f36 100644 --- a/packages/app/src/Element/Event/LongFormText.tsx +++ b/packages/app/src/Element/Event/LongFormText.tsx @@ -1,7 +1,7 @@ import "./LongFormText.css"; import { CSSProperties, useCallback, useRef, useState } from "react"; import { FormattedMessage, FormattedNumber } from "react-intl"; -import { TaggedNostrEvent } from "@snort/system"; +import { NostrLink, TaggedNostrEvent } from "@snort/system"; import { useEventReactions } from "@snort/system-react"; import { findTag } from "SnortUtils"; @@ -26,7 +26,7 @@ export function LongFormText(props: LongFormTextProps) { const { proxy } = useImgProxy(); const [reading, setReading] = useState(false); const ref = useRef(null); - const { reactions, reposts, zaps } = useEventReactions(props.ev, props.related); + const { reactions, reposts, zaps } = useEventReactions(NostrLink.fromEvent(props.ev), props.related); function previewText() { return ( diff --git a/packages/app/src/Element/Event/NoteInner.tsx b/packages/app/src/Element/Event/NoteInner.tsx index 5a719ef3..36251127 100644 --- a/packages/app/src/Element/Event/NoteInner.tsx +++ b/packages/app/src/Element/Event/NoteInner.tsx @@ -36,7 +36,7 @@ export function NoteInner(props: NoteProps) { const { isEventMuted } = useModeration(); const { ref, inView } = useInView({ triggerOnce: true }); - const { reactions, reposts, deletions, zaps } = useEventReactions(ev, related); + const { reactions, reposts, deletions, zaps } = useEventReactions(NostrLink.fromEvent(ev), related); const login = useLogin(); const { pinned, bookmarked } = login; const { publisher, system } = useEventPublisher(); diff --git a/packages/app/src/Feed/ZapsFeed.ts b/packages/app/src/Feed/ZapsFeed.ts index 87e57881..95728f34 100644 --- a/packages/app/src/Feed/ZapsFeed.ts +++ b/packages/app/src/Feed/ZapsFeed.ts @@ -1,7 +1,6 @@ import { useMemo } from "react"; import { EventKind, RequestBuilder, parseZap, NostrLink, NoteCollection } from "@snort/system"; import { useRequestBuilder } from "@snort/system-react"; -import { UserCache } from "Cache"; export default function useZapsFeed(link?: NostrLink) { const sub = useMemo(() => { @@ -15,7 +14,7 @@ export default function useZapsFeed(link?: NostrLink) { const zaps = useMemo(() => { if (zapsFeed.data) { - const profileZaps = zapsFeed.data.map(a => parseZap(a, UserCache)).filter(z => z.valid); + const profileZaps = zapsFeed.data.map(a => parseZap(a)).filter(z => z.valid); profileZaps.sort((a, b) => b.amount - a.amount); return profileZaps; } diff --git a/packages/app/src/Pages/Notifications.tsx b/packages/app/src/Pages/Notifications.tsx index 8cbe4659..220e8ef1 100644 --- a/packages/app/src/Pages/Notifications.tsx +++ b/packages/app/src/Pages/Notifications.tsx @@ -295,7 +295,7 @@ function NotificationGroup({ evs, onClick }: { evs: Array; onC const navigate = useNavigate(); const zaps = useMemo(() => { - return evs.filter(a => a.kind === EventKind.ZapReceipt).map(a => parseZap(a, UserCache)); + return evs.filter(a => a.kind === EventKind.ZapReceipt).map(a => parseZap(a)); }, [evs]); const pubkeys = dedupe( evs.map(a => { diff --git a/packages/system-react/package.json b/packages/system-react/package.json index 0b9916d5..01ae9d4b 100644 --- a/packages/system-react/package.json +++ b/packages/system-react/package.json @@ -1,6 +1,6 @@ { "name": "@snort/system-react", - "version": "1.1.1", + "version": "1.1.2", "description": "React hooks for @snort/system", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -16,7 +16,7 @@ ], "dependencies": { "@snort/shared": "^1.0.9", - "@snort/system": "^1.1.1", + "@snort/system": "^1.1.2", "react": "^18.2.0" }, "devDependencies": { diff --git a/packages/system-react/src/useEventReactions.tsx b/packages/system-react/src/useEventReactions.tsx index 7b1207f6..95dc8c2c 100644 --- a/packages/system-react/src/useEventReactions.tsx +++ b/packages/system-react/src/useEventReactions.tsx @@ -1,20 +1,15 @@ -import { useContext, useMemo } from "react"; +import { useMemo } from "react"; import { normalizeReaction, Reaction } from "@snort/shared"; import { EventKind, NostrLink, parseZap, TaggedNostrEvent } from "@snort/system"; -import { SnortContext } from "./context"; - /** * Parse reactions to a given event from a set of related events - * @param ev + * @param link Reactions to linked event * @param related * @returns */ -export function useEventReactions(ev: TaggedNostrEvent, related: ReadonlyArray) { - const system = useContext(SnortContext); - +export function useEventReactions(link: NostrLink, related: ReadonlyArray) { return useMemo(() => { - const link = NostrLink.fromEvent(ev); const reactionKinds = related.reduce( (acc, v) => { if (link.isReplyToThis(v)) { @@ -41,7 +36,7 @@ export function useEventReactions(ev: TaggedNostrEvent, related: ReadonlyArray parseZap(a, system.ProfileLoader.Cache, ev)) + .map(a => parseZap(a)) .filter(a => a.valid) .sort((a, b) => b.amount - a.amount); @@ -61,5 +56,5 @@ export function useEventReactions(ev: TaggedNostrEvent, related: ReadonlyArray, refNote?: NostrEvent): ParsedZap { +export function parseZap(zapReceipt: NostrEvent): ParsedZap { const existing = ParsedZapCache.get(zapReceipt.id); if (existing) { return existing; @@ -39,7 +37,6 @@ export function parseZap(zapReceipt: NostrEvent, userCache: FeedCache a[0] === "zap") ?? false; const anonZap = zapRequest.tags.find(a => a[0] === "anon"); const pollOpt = zapRequest.tags.find(a => a[0] === "poll_option")?.[1]; const ret: ParsedZap = { @@ -63,11 +60,6 @@ export function parseZap(zapReceipt: NostrEvent, userCache: FeedCache