system-react module entrypoint, reaction loading memos
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
bbdfb43834
commit
7a409c1455
@ -3,7 +3,7 @@ import { countLeadingZeros, NostrLink, TaggedNostrEvent } from "@snort/system";
|
|||||||
import { useEventReactions, useReactions, useUserProfile } from "@snort/system-react";
|
import { useEventReactions, useReactions, useUserProfile } from "@snort/system-react";
|
||||||
import { Menu, MenuItem } from "@szhsin/react-menu";
|
import { Menu, MenuItem } from "@szhsin/react-menu";
|
||||||
import classNames from "classnames";
|
import classNames from "classnames";
|
||||||
import React, { forwardRef, useEffect, useState } from "react";
|
import React, { forwardRef, useEffect, useMemo, useState } from "react";
|
||||||
import { FormattedMessage, useIntl } from "react-intl";
|
import { FormattedMessage, useIntl } from "react-intl";
|
||||||
import { useLongPress } from "use-long-press";
|
import { useLongPress } from "use-long-press";
|
||||||
|
|
||||||
@ -43,9 +43,10 @@ export interface NoteFooterProps {
|
|||||||
|
|
||||||
export default function NoteFooter(props: NoteFooterProps) {
|
export default function NoteFooter(props: NoteFooterProps) {
|
||||||
const { ev } = props;
|
const { ev } = props;
|
||||||
const link = NostrLink.fromEvent(ev);
|
const link = useMemo(() => NostrLink.fromEvent(ev), [ev.id]);
|
||||||
|
const ids = useMemo(() => [link], [link]);
|
||||||
|
|
||||||
const related = useReactions(link.id + "related", [link], undefined, false);
|
const related = useReactions(link.id + "related", ids, undefined, false);
|
||||||
const { reactions, zaps, reposts } = useEventReactions(link, related.data ?? []);
|
const { reactions, zaps, reposts } = useEventReactions(link, related.data ?? []);
|
||||||
const { positive } = reactions;
|
const { positive } = reactions;
|
||||||
|
|
||||||
|
@ -24,6 +24,15 @@ export default function NoteReaction(props: NoteReactionProps) {
|
|||||||
const profile = useUserProfile(inView ? ev.pubkey : "");
|
const profile = useUserProfile(inView ? ev.pubkey : "");
|
||||||
const root = useMemo(() => extractRoot(), [ev, props.root, inView]);
|
const root = useMemo(() => extractRoot(), [ev, props.root, inView]);
|
||||||
|
|
||||||
|
const opt = useMemo(
|
||||||
|
() => ({
|
||||||
|
showHeader: ev?.kind === EventKind.Repost || ev?.kind === EventKind.TextNote,
|
||||||
|
showFooter: false,
|
||||||
|
truncate: true,
|
||||||
|
}),
|
||||||
|
[ev],
|
||||||
|
);
|
||||||
|
|
||||||
const refEvent = useMemo(() => {
|
const refEvent = useMemo(() => {
|
||||||
if (ev) {
|
if (ev) {
|
||||||
const eTags = ev.tags.filter(a => a[0] === "e");
|
const eTags = ev.tags.filter(a => a[0] === "e");
|
||||||
@ -69,11 +78,6 @@ export default function NoteReaction(props: NoteReactionProps) {
|
|||||||
}
|
}
|
||||||
const isOpMuted = root && isMuted(root.pubkey);
|
const isOpMuted = root && isMuted(root.pubkey);
|
||||||
const shouldNotBeRendered = isOpMuted || root?.kind !== EventKind.TextNote;
|
const shouldNotBeRendered = isOpMuted || root?.kind !== EventKind.TextNote;
|
||||||
const opt = {
|
|
||||||
showHeader: ev?.kind === EventKind.Repost || ev?.kind === EventKind.TextNote,
|
|
||||||
showFooter: false,
|
|
||||||
truncate: true,
|
|
||||||
};
|
|
||||||
|
|
||||||
return shouldNotBeRendered ? null : (
|
return shouldNotBeRendered ? null : (
|
||||||
<div className="card reaction">
|
<div className="card reaction">
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { unixNow } from "@snort/shared";
|
import { unixNow } from "@snort/shared";
|
||||||
import { EventKind, NostrLink, NoteCollection, RequestBuilder } from "@snort/system";
|
import { EventKind, NoteCollection, RequestBuilder } from "@snort/system";
|
||||||
import { useReactions, useRequestBuilder } from "@snort/system-react";
|
import { useRequestBuilder } from "@snort/system-react";
|
||||||
import { useCallback, useMemo } from "react";
|
import { useCallback, useMemo } from "react";
|
||||||
|
|
||||||
import useLogin from "@/Hooks/useLogin";
|
import useLogin from "@/Hooks/useLogin";
|
||||||
@ -131,11 +131,9 @@ export default function useTimelineFeed(subject: TimelineSubject, options: Timel
|
|||||||
}, [pref.autoShowLatest, createBuilder]);
|
}, [pref.autoShowLatest, createBuilder]);
|
||||||
|
|
||||||
const latest = useRequestBuilder(NoteCollection, subRealtime);
|
const latest = useRequestBuilder(NoteCollection, subRealtime);
|
||||||
const reactions = useReactions(`${sub?.id}-reactions`, main.data?.map(a => NostrLink.fromEvent(a)) ?? []);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
main: main.data,
|
main: main.data,
|
||||||
related: reactions.data,
|
|
||||||
latest: latest.data,
|
latest: latest.data,
|
||||||
loading: main.loading(),
|
loading: main.loading(),
|
||||||
loadMore: () => {
|
loadMore: () => {
|
||||||
|
@ -10,12 +10,12 @@ import Avatar from "@/Components/User/Avatar";
|
|||||||
import { ProfileLink } from "@/Components/User/ProfileLink";
|
import { ProfileLink } from "@/Components/User/ProfileLink";
|
||||||
import useEventPublisher from "@/Hooks/useEventPublisher";
|
import useEventPublisher from "@/Hooks/useEventPublisher";
|
||||||
import { HasNotificationsMarker } from "@/Pages/Layout/HasNotificationsMarker";
|
import { HasNotificationsMarker } from "@/Pages/Layout/HasNotificationsMarker";
|
||||||
|
import { WalletBalance } from "@/Pages/Layout/WalletBalance";
|
||||||
import { subscribeToNotifications } from "@/Utils/Notifications";
|
import { subscribeToNotifications } from "@/Utils/Notifications";
|
||||||
import { getCurrentSubscription } from "@/Utils/Subscription";
|
import { getCurrentSubscription } from "@/Utils/Subscription";
|
||||||
|
|
||||||
import useLogin from "../../Hooks/useLogin";
|
import useLogin from "../../Hooks/useLogin";
|
||||||
import { LogoHeader } from "./LogoHeader";
|
import { LogoHeader } from "./LogoHeader";
|
||||||
import { WalletBalance } from "@/Pages/Layout/WalletBalance";
|
|
||||||
|
|
||||||
const MENU_ITEMS = [
|
const MENU_ITEMS = [
|
||||||
{
|
{
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import { useEffect, useMemo, useState } from "react";
|
import { useEffect, useMemo, useState } from "react";
|
||||||
import { Sats, useWallet } from "@/Wallet";
|
|
||||||
import { useRates } from "@/Hooks/useRates";
|
|
||||||
import { FormattedMessage, FormattedNumber } from "react-intl";
|
import { FormattedMessage, FormattedNumber } from "react-intl";
|
||||||
import Icon from "@/Components/Icons/Icon";
|
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
|
|
||||||
|
import Icon from "@/Components/Icons/Icon";
|
||||||
|
import { useRates } from "@/Hooks/useRates";
|
||||||
|
import { Sats, useWallet } from "@/Wallet";
|
||||||
|
|
||||||
export const WalletBalance = () => {
|
export const WalletBalance = () => {
|
||||||
const [balance, setBalance] = useState<Sats | null>(null);
|
const [balance, setBalance] = useState<Sats | null>(null);
|
||||||
const wallet = useWallet();
|
const wallet = useWallet();
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
"version": "1.1.8",
|
"version": "1.1.8",
|
||||||
"description": "React hooks for @snort/system",
|
"description": "React hooks for @snort/system",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
|
"module": "src/index.ts",
|
||||||
"types": "dist/index.d.ts",
|
"types": "dist/index.d.ts",
|
||||||
"repository": "https://git.v0l.io/Kieran/snort",
|
"repository": "https://git.v0l.io/Kieran/snort",
|
||||||
"author": "Kieran",
|
"author": "Kieran",
|
||||||
|
Loading…
Reference in New Issue
Block a user