mirror of
https://github.com/hzrd149/nostrudel.git
synced 2025-03-29 19:23:40 +01:00
clean up timeline hook
This commit is contained in:
parent
a5f56e07ee
commit
464a07d2d7
src
hooks
providers
views
badges
communities
community
emoji-packs
goals
home
lists
map
relays
search
streams
torrents
@ -8,6 +8,7 @@ import { NostrEvent } from "../types/nostr-event";
|
||||
import { createSimpleQueryMap } from "../helpers/nostr/filter";
|
||||
|
||||
type Options = {
|
||||
/** @deprecated */
|
||||
enabled?: boolean;
|
||||
eventFilter?: EventFilter;
|
||||
cursor?: number;
|
||||
@ -23,8 +24,12 @@ export default function useTimelineLoader(
|
||||
const timeline = useMemo(() => timelineCacheService.createTimeline(key), [key]);
|
||||
|
||||
useEffect(() => {
|
||||
if (query) timeline.setQueryMap(createSimpleQueryMap(relays, query));
|
||||
if (query) {
|
||||
timeline.setQueryMap(createSimpleQueryMap(relays, query));
|
||||
timeline.open();
|
||||
} else timeline.close();
|
||||
}, [timeline, JSON.stringify(query), relays.join("|")]);
|
||||
|
||||
useEffect(() => {
|
||||
timeline.setEventFilter(opts?.eventFilter);
|
||||
}, [timeline, opts?.eventFilter]);
|
||||
@ -37,13 +42,6 @@ export default function useTimelineLoader(
|
||||
timeline.events.customSort = opts?.customSort;
|
||||
}, [timeline, opts?.customSort]);
|
||||
|
||||
const enabled = opts?.enabled ?? !!query;
|
||||
useEffect(() => {
|
||||
if (enabled) {
|
||||
timeline.open();
|
||||
} else timeline.close();
|
||||
}, [timeline, enabled]);
|
||||
|
||||
useUnmount(() => {
|
||||
timeline.close();
|
||||
});
|
||||
|
@ -14,11 +14,13 @@ export default function useUserLists(pubkey?: string, additionalRelays: string[]
|
||||
const timeline = useTimelineLoader(
|
||||
`${pubkey}-lists`,
|
||||
readRelays,
|
||||
{
|
||||
authors: pubkey ? [pubkey] : [],
|
||||
kinds: [PEOPLE_LIST_KIND, NOTE_LIST_KIND],
|
||||
},
|
||||
{ enabled: !!pubkey, eventFilter },
|
||||
pubkey
|
||||
? {
|
||||
authors: pubkey ? [pubkey] : [],
|
||||
kinds: [PEOPLE_LIST_KIND, NOTE_LIST_KIND],
|
||||
}
|
||||
: undefined,
|
||||
{ eventFilter },
|
||||
);
|
||||
|
||||
const lists = useSubject(timeline.timeline);
|
||||
|
@ -38,11 +38,13 @@ export default function NotificationTimelineProvider({ children }: PropsWithChil
|
||||
const timeline = useTimelineLoader(
|
||||
`${account?.pubkey ?? "anon"}-notification`,
|
||||
readRelays,
|
||||
{
|
||||
"#p": [account?.pubkey ?? "0000"],
|
||||
kinds: [Kind.Text, Kind.Repost, Kind.Reaction, Kind.Zap, TORRENT_COMMENT_KIND],
|
||||
},
|
||||
{ enabled: !!account?.pubkey, eventFilter },
|
||||
account?.pubkey
|
||||
? {
|
||||
"#p": [account.pubkey],
|
||||
kinds: [Kind.Text, Kind.Repost, Kind.Reaction, Kind.Zap, TORRENT_COMMENT_KIND],
|
||||
}
|
||||
: undefined,
|
||||
{ eventFilter },
|
||||
);
|
||||
|
||||
const context = useMemo(() => ({ timeline }), [timeline]);
|
||||
|
@ -66,7 +66,8 @@ export default function PeopleListProvider({ children, initList }: PeopleListPro
|
||||
|
||||
const filter = useMemo<NostrQuery | undefined>(() => {
|
||||
if (selected === "global") return {};
|
||||
return people && { authors: people.map((p) => p.pubkey) };
|
||||
if (!people) return undefined;
|
||||
return { authors: people.map((p) => p.pubkey) };
|
||||
}, [people, selected]);
|
||||
|
||||
const context = useMemo(
|
||||
|
@ -19,8 +19,7 @@ function BadgesBrowsePage() {
|
||||
const timeline = useTimelineLoader(
|
||||
`${listId}-badges`,
|
||||
readRelays,
|
||||
{ ...filter, kinds: [Kind.BadgeDefinition] },
|
||||
{ enabled: !!filter },
|
||||
filter ? { ...filter, kinds: [Kind.BadgeDefinition] } : undefined,
|
||||
);
|
||||
|
||||
const lists = useSubject(timeline.timeline);
|
||||
|
@ -110,11 +110,12 @@ function CommunitiesHomePage() {
|
||||
const timeline = useTimelineLoader(
|
||||
`all-communities-timeline`,
|
||||
readRelays,
|
||||
{
|
||||
kinds: [Kind.Text, Kind.Repost, COMMUNITY_APPROVAL_KIND],
|
||||
"#a": communityCoordinates.map((p) => createCoordinate(p.kind, p.pubkey, p.identifier)),
|
||||
},
|
||||
{ enabled: communityCoordinates.length > 0 },
|
||||
communityCoordinates.length > 0
|
||||
? {
|
||||
kinds: [Kind.Text, Kind.Repost, COMMUNITY_APPROVAL_KIND],
|
||||
"#a": communityCoordinates.map((p) => createCoordinate(p.kind, p.pubkey, p.identifier)),
|
||||
}
|
||||
: undefined,
|
||||
);
|
||||
|
||||
const showUnapproved = useDisclosure();
|
||||
|
@ -30,8 +30,7 @@ export default function CommunityFindByNameView() {
|
||||
const timeline = useTimelineLoader(
|
||||
`${community}-find-communities`,
|
||||
readRelays,
|
||||
{ kinds: [COMMUNITY_DEFINITION_KIND], "#d": [community] },
|
||||
{ enabled: !!community },
|
||||
community ? { kinds: [COMMUNITY_DEFINITION_KIND], "#d": [community] } : undefined,
|
||||
);
|
||||
|
||||
const communities = useSubject(timeline.timeline);
|
||||
|
@ -29,8 +29,8 @@ function EmojiPacksBrowsePage() {
|
||||
const timeline = useTimelineLoader(
|
||||
`${listId}-browse-emoji-packs`,
|
||||
readRelays,
|
||||
{ ...filter, kinds: [EMOJI_PACK_KIND] },
|
||||
{ enabled: !!filter, eventFilter },
|
||||
filter ? { ...filter, kinds: [EMOJI_PACK_KIND] } : undefined,
|
||||
{ eventFilter },
|
||||
);
|
||||
|
||||
const packs = useSubject(timeline.timeline);
|
||||
|
@ -22,11 +22,12 @@ function UserEmojiPackMangerPage() {
|
||||
const timeline = useTimelineLoader(
|
||||
`${account.pubkey}-emoji-packs`,
|
||||
readRelays,
|
||||
{
|
||||
authors: [account.pubkey],
|
||||
kinds: [EMOJI_PACK_KIND],
|
||||
},
|
||||
{ enabled: !!account.pubkey },
|
||||
account.pubkey
|
||||
? {
|
||||
authors: [account.pubkey],
|
||||
kinds: [EMOJI_PACK_KIND],
|
||||
}
|
||||
: undefined,
|
||||
);
|
||||
|
||||
const favorites = useReplaceableEvents(favoritePacks && getPackCordsFromFavorites(favoritePacks));
|
||||
|
@ -32,8 +32,8 @@ function GoalsBrowsePage() {
|
||||
const timeline = useTimelineLoader(
|
||||
`${listId}-browse-goals`,
|
||||
readRelays,
|
||||
{ ...filter, kinds: [GOAL_KIND] },
|
||||
{ enabled: !!filter, eventFilter },
|
||||
filter ? { ...filter, kinds: [GOAL_KIND] } : undefined,
|
||||
{ eventFilter },
|
||||
);
|
||||
|
||||
const goals = useSubject(timeline.timeline);
|
||||
|
@ -18,11 +18,12 @@ function UserGoalsManagerPage() {
|
||||
const timeline = useTimelineLoader(
|
||||
`${account.pubkey}-goals`,
|
||||
readRelays,
|
||||
{
|
||||
authors: [account.pubkey],
|
||||
kinds: [GOAL_KIND],
|
||||
},
|
||||
{ enabled: !!account.pubkey },
|
||||
account.pubkey
|
||||
? {
|
||||
authors: [account.pubkey],
|
||||
kinds: [GOAL_KIND],
|
||||
}
|
||||
: undefined,
|
||||
);
|
||||
|
||||
const goals = useSubject(timeline.timeline);
|
||||
|
@ -11,7 +11,6 @@ import PeopleListSelection from "../../components/people-list-selection/people-l
|
||||
import RelaySelectionButton from "../../components/relay-selection/relay-selection-button";
|
||||
import PeopleListProvider, { usePeopleListContext } from "../../providers/people-list-provider";
|
||||
import RelaySelectionProvider, { useRelaySelectionContext } from "../../providers/relay-selection-provider";
|
||||
import { NostrRequestFilter } from "../../types/nostr-query";
|
||||
import useClientSideMuteFilter from "../../hooks/use-client-side-mute-filter";
|
||||
import NoteFilterTypeButtons from "../../components/note-filter-type-buttons";
|
||||
|
||||
@ -41,13 +40,8 @@ function HomePage() {
|
||||
const { listId, filter } = usePeopleListContext();
|
||||
|
||||
const kinds = [Kind.Text, Kind.Repost, Kind.Article, Kind.RecommendRelay, Kind.BadgeAward];
|
||||
const query = useMemo<NostrRequestFilter>(() => {
|
||||
if (filter === undefined) return { kinds };
|
||||
return { ...filter, kinds };
|
||||
}, [filter]);
|
||||
|
||||
const timeline = useTimelineLoader(`${listId}-home-feed`, relays, query, {
|
||||
enabled: !!filter,
|
||||
const timeline = useTimelineLoader(`${listId}-home-feed`, relays, filter ? { ...filter, kinds } : undefined, {
|
||||
eventFilter,
|
||||
});
|
||||
|
||||
|
@ -45,8 +45,8 @@ function BrowseListPage() {
|
||||
const timeline = useTimelineLoader(
|
||||
`${listId}-lists`,
|
||||
readRelays,
|
||||
{ ...filter, kinds: [PEOPLE_LIST_KIND, NOTE_LIST_KIND] },
|
||||
{ enabled: !!filter, eventFilter },
|
||||
filter ? { ...filter, kinds: [PEOPLE_LIST_KIND, NOTE_LIST_KIND] } : undefined,
|
||||
{ eventFilter },
|
||||
);
|
||||
|
||||
const lists = useSubject(timeline.timeline);
|
||||
|
@ -122,8 +122,7 @@ export default function MapView() {
|
||||
const timeline = useTimelineLoader(
|
||||
"geo-events",
|
||||
readRelays,
|
||||
{ "#g": cells, kinds: [Kind.Text] },
|
||||
{ enabled: cells.length > 0 },
|
||||
cells.length > 0 ? { "#g": cells, kinds: [Kind.Text] } : undefined,
|
||||
);
|
||||
|
||||
const setCellsFromMap = useCallback(() => {
|
||||
|
@ -21,10 +21,6 @@ export default function RelayNotes({ relay }: { relay: string }) {
|
||||
|
||||
const { filter } = usePeopleListContext();
|
||||
const kinds = [Kind.Text];
|
||||
const query = useMemo<NostrRequestFilter>(() => {
|
||||
if (filter === undefined) return { kinds };
|
||||
return { ...filter, kinds };
|
||||
}, [filter]);
|
||||
|
||||
const timelineEventFilter = useTimelinePageEventFilter();
|
||||
const muteFilter = useClientSideMuteFilter();
|
||||
@ -37,7 +33,9 @@ export default function RelayNotes({ relay }: { relay: string }) {
|
||||
},
|
||||
[timelineEventFilter, showReplies.isOpen, showReposts.isOpen, muteFilter],
|
||||
);
|
||||
const timeline = useTimelineLoader(`${relay}-notes`, [relay], query, { eventFilter, enabled: !!filter });
|
||||
const timeline = useTimelineLoader(`${relay}-notes`, [relay], filter ? { ...filter, kinds } : undefined, {
|
||||
eventFilter,
|
||||
});
|
||||
|
||||
const header = (
|
||||
<Flex gap="2" wrap="wrap" px={["2", 0]}>
|
||||
|
@ -16,13 +16,14 @@ export default function RelayReviews({ relay }: { relay: string }) {
|
||||
const timeline = useTimelineLoader(
|
||||
`${relay}-reviews`,
|
||||
readRelays,
|
||||
{
|
||||
...filter,
|
||||
kinds: [1985],
|
||||
"#r": [relay],
|
||||
"#l": [RELAY_REVIEW_LABEL],
|
||||
},
|
||||
{ enabled: !!filter },
|
||||
filter
|
||||
? {
|
||||
...filter,
|
||||
kinds: [1985],
|
||||
"#r": [relay],
|
||||
"#l": [RELAY_REVIEW_LABEL],
|
||||
}
|
||||
: undefined,
|
||||
);
|
||||
|
||||
const events = useSubject(timeline.timeline);
|
||||
|
@ -20,12 +20,13 @@ function RelayReviewsPage() {
|
||||
const timeline = useTimelineLoader(
|
||||
"relay-reviews",
|
||||
readRelays,
|
||||
{
|
||||
...filter,
|
||||
kinds: [1985],
|
||||
"#l": ["review/relay"],
|
||||
},
|
||||
{ enabled: !!filter },
|
||||
filter
|
||||
? {
|
||||
...filter,
|
||||
kinds: [1985],
|
||||
"#l": ["review/relay"],
|
||||
}
|
||||
: undefined,
|
||||
);
|
||||
|
||||
const reviews = useSubject(timeline.timeline);
|
||||
|
@ -14,8 +14,7 @@ export default function ArticleSearchResults({ search }: { search: string }) {
|
||||
const timeline = useTimelineLoader(
|
||||
`${listId ?? "global"}-${search}-article-search`,
|
||||
searchRelays,
|
||||
{ search: search || "", kinds: [Kind.Article], ...filter },
|
||||
{ enabled: !!search },
|
||||
search ? { search: search, kinds: [Kind.Article], ...filter } : undefined,
|
||||
);
|
||||
|
||||
const callback = useTimelineCurserIntersectionCallback(timeline);
|
||||
|
@ -28,8 +28,7 @@ export default function CommunitySearchResults({ search }: { search: string }) {
|
||||
const timeline = useTimelineLoader(
|
||||
`${listId ?? "global"}-${search}-community-search`,
|
||||
searchRelays,
|
||||
{ search: search || "", kinds: [COMMUNITY_DEFINITION_KIND], ...filter },
|
||||
{ enabled: !!search },
|
||||
search ? { search: search, kinds: [COMMUNITY_DEFINITION_KIND], ...filter } : undefined,
|
||||
);
|
||||
|
||||
const communities = useSubject(timeline.timeline);
|
||||
|
@ -14,8 +14,7 @@ export default function NoteSearchResults({ search }: { search: string }) {
|
||||
const timeline = useTimelineLoader(
|
||||
`${listId ?? "global"}-${search}-note-search`,
|
||||
searchRelays,
|
||||
{ search: search || "", kinds: [Kind.Text], ...filter },
|
||||
{ enabled: !!search },
|
||||
search ? { search: search, kinds: [Kind.Text], ...filter } : undefined,
|
||||
);
|
||||
|
||||
const callback = useTimelineCurserIntersectionCallback(timeline);
|
||||
|
@ -57,8 +57,7 @@ export default function ProfileSearchResults({ search }: { search: string }) {
|
||||
const timeline = useTimelineLoader(
|
||||
`${listId ?? "global"}-${search}-profile-search`,
|
||||
searchRelays,
|
||||
{ search: search || "", kinds: [Kind.Metadata], ...filter },
|
||||
{ enabled: !!search },
|
||||
search ? { search: search, kinds: [Kind.Metadata], ...filter } : undefined,
|
||||
);
|
||||
|
||||
const profiles = useSubject(timeline?.timeline) ?? [];
|
||||
|
@ -34,15 +34,15 @@ function StreamsPage() {
|
||||
);
|
||||
|
||||
const { filter, listId } = usePeopleListContext();
|
||||
const query = useMemo<NostrRequestFilter>(() => {
|
||||
if (!listId || !filter) return { kinds: [STREAM_KIND] };
|
||||
const query = useMemo<NostrRequestFilter | undefined>(() => {
|
||||
if (!listId || !filter) return undefined;
|
||||
return [
|
||||
{ authors: filter.authors, kinds: [STREAM_KIND] },
|
||||
{ "#p": filter.authors, kinds: [STREAM_KIND] },
|
||||
];
|
||||
}, [filter, listId]);
|
||||
|
||||
const timeline = useTimelineLoader(`${listId}-streams`, relays, query, { enabled: !!filter, eventFilter });
|
||||
const timeline = useTimelineLoader(`${listId}-streams`, relays, query, { eventFilter });
|
||||
|
||||
useRelaysChanged(relays, () => timeline.reset());
|
||||
|
||||
|
@ -82,13 +82,13 @@ function TorrentsPage() {
|
||||
},
|
||||
[muteFilter, tags.join(",")],
|
||||
);
|
||||
const query = useMemo(
|
||||
() => (tags.length > 0 ? { ...filter, kinds: [TORRENT_KIND], "#t": tags } : { ...filter, kinds: [TORRENT_KIND] }),
|
||||
[tags.join(","), filter],
|
||||
);
|
||||
const query = useMemo(() => {
|
||||
if (!filter) return undefined;
|
||||
if (tags.length > 0) return { ...filter, kinds: [TORRENT_KIND], "#t": tags };
|
||||
else return { ...filter, kinds: [TORRENT_KIND] };
|
||||
}, [tags.join(","), filter]);
|
||||
const timeline = useTimelineLoader(`${listId || "global"}-torrents`, relays, query, {
|
||||
eventFilter,
|
||||
enabled: !!filter,
|
||||
});
|
||||
|
||||
const torrents = useSubject(timeline.timeline);
|
||||
|
Loading…
x
Reference in New Issue
Block a user