diff --git a/packages/app/src/Element/Event/LongFormText.tsx b/packages/app/src/Element/Event/LongFormText.tsx index 15c2560f..d6e1a07d 100644 --- a/packages/app/src/Element/Event/LongFormText.tsx +++ b/packages/app/src/Element/Event/LongFormText.tsx @@ -2,6 +2,7 @@ import "./LongFormText.css"; import { CSSProperties, useCallback, useRef, useState } from "react"; import { FormattedMessage, FormattedNumber } from "react-intl"; import { TaggedNostrEvent } from "@snort/system"; +import { useEventReactions } from "@snort/system-react"; import { findTag } from "SnortUtils"; import Text from "Element/Text"; @@ -9,7 +10,6 @@ import { Markdown } from "./Markdown"; import useImgProxy from "Hooks/useImgProxy"; import ProfilePreview from "Element/User/ProfilePreview"; import NoteFooter from "./NoteFooter"; -import { useEventReactions } from "Hooks/useEventReactions"; import NoteTime from "./NoteTime"; interface LongFormTextProps { diff --git a/packages/app/src/Element/Event/NoteFooter.tsx b/packages/app/src/Element/Event/NoteFooter.tsx index 413d0dd3..7f802b67 100644 --- a/packages/app/src/Element/Event/NoteFooter.tsx +++ b/packages/app/src/Element/Event/NoteFooter.tsx @@ -2,13 +2,14 @@ import React, { useEffect, useState } from "react"; import { FormattedMessage, useIntl } from "react-intl"; import { useLongPress } from "use-long-press"; import { TaggedNostrEvent, ParsedZap, countLeadingZeros, NostrLink } from "@snort/system"; +import { normalizeReaction } from "@snort/shared"; import { useUserProfile } from "@snort/system-react"; import { Menu, MenuItem } from "@szhsin/react-menu"; import classNames from "classnames"; import { formatShort } from "Number"; import useEventPublisher from "Hooks/useEventPublisher"; -import { delay, findTag, normalizeReaction } from "SnortUtils"; +import { delay, findTag } from "SnortUtils"; import { NoteCreator } from "Element/Event/NoteCreator"; import SendSats from "Element/SendSats"; import { ZapsSummary } from "Element/Event/Zap"; diff --git a/packages/app/src/Element/Event/NoteInner.tsx b/packages/app/src/Element/Event/NoteInner.tsx index 6f1d0597..192ed531 100644 --- a/packages/app/src/Element/Event/NoteInner.tsx +++ b/packages/app/src/Element/Event/NoteInner.tsx @@ -4,6 +4,7 @@ import { useInView } from "react-intersection-observer"; import { FormattedMessage, useIntl } from "react-intl"; import classNames from "classnames"; import { EventExt, EventKind, HexKey, Lists, NostrLink, NostrPrefix, TaggedNostrEvent } from "@snort/system"; +import { useEventReactions } from "@snort/system-react"; import { findTag, hexToBech32, profileLink } from "SnortUtils"; import useModeration from "Hooks/useModeration"; @@ -23,7 +24,6 @@ import NoteFooter from "./NoteFooter"; import Reactions from "./Reactions"; import HiddenNote from "./HiddenNote"; import { NoteProps } from "./Note"; -import { useEventReactions } from "Hooks/useEventReactions"; import { chainKey } from "Hooks/useThreadContext"; export function NoteInner(props: NoteProps) { diff --git a/packages/system-react/package.json b/packages/system-react/package.json index 707aa9a7..b2137794 100644 --- a/packages/system-react/package.json +++ b/packages/system-react/package.json @@ -1,6 +1,6 @@ { "name": "@snort/system-react", - "version": "1.0.17", + "version": "1.0.18", "description": "React hooks for @snort/system", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/system-react/src/index.ts b/packages/system-react/src/index.ts index 2aed0afb..5054dfa4 100644 --- a/packages/system-react/src/index.ts +++ b/packages/system-react/src/index.ts @@ -4,4 +4,4 @@ export * from "./useRequestBuilder"; export * from "./useSystemState"; export * from "./useUserProfile"; export * from "./useUserSearch"; -export * from "./useEventReactions"; \ No newline at end of file +export * from "./useEventReactions"; diff --git a/packages/system-react/src/useEventReactions.tsx b/packages/system-react/src/useEventReactions.tsx index 0c9daa50..30c3925d 100644 --- a/packages/system-react/src/useEventReactions.tsx +++ b/packages/system-react/src/useEventReactions.tsx @@ -6,33 +6,39 @@ import { SnortContext } from "./context"; /** * Parse reactions to a given event from a set of related events - * @param ev - * @param related - * @returns + * @param ev + * @param related + * @returns */ export function useEventReactions(ev: TaggedNostrEvent, related: ReadonlyArray) { const system = useContext(SnortContext); return useMemo(() => { const link = NostrLink.fromEvent(ev); - const reactionKinds = related.reduce((acc, v) => { - if (link.isReplyToThis(v)) { - acc[v.kind.toString()] ??= []; - acc[v.kind.toString()].push(v); - } - return acc; - }, {} as Record>); + const reactionKinds = related.reduce( + (acc, v) => { + if (link.isReplyToThis(v)) { + acc[v.kind.toString()] ??= []; + acc[v.kind.toString()].push(v); + } + return acc; + }, + {} as Record>, + ); const deletions = reactionKinds[EventKind.Deletion.toString()] ?? []; const reactions = reactionKinds[EventKind.Reaction.toString()] ?? []; const reposts = reactionKinds[EventKind.Repost.toString()] ?? []; - const groupReactions = reactions?.reduce((acc, reaction) => { - const kind = normalizeReaction(reaction.content); - acc[kind] ??= []; - acc[kind].push(reaction); - return acc; - }, {} as Record>); + const groupReactions = reactions?.reduce( + (acc, reaction) => { + const kind = normalizeReaction(reaction.content); + acc[kind] ??= []; + acc[kind].push(reaction); + return acc; + }, + {} as Record>, + ); const zaps = (reactionKinds[EventKind.ZapReceipt] ?? []) .map(a => parseZap(a, system.ProfileLoader.Cache, ev)) @@ -42,14 +48,17 @@ export function useEventReactions(ev: TaggedNostrEvent, related: ReadonlyArray ![EventKind.Deletion, EventKind.Reaction, EventKind.Repost, EventKind.ZapReceipt].includes(Number(k)))) + Object.entries(reactionKinds).filter( + ([k]) => + ![EventKind.Deletion, EventKind.Reaction, EventKind.Repost, EventKind.ZapReceipt].includes(Number(k)), + ), + ), }; }, [ev, related]); }