diff --git a/src/hooks/use-timeline-loader.ts b/src/hooks/use-timeline-loader.ts index f7f2b8954..3666a504d 100644 --- a/src/hooks/use-timeline-loader.ts +++ b/src/hooks/use-timeline-loader.ts @@ -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(); }); diff --git a/src/hooks/use-user-lists.ts b/src/hooks/use-user-lists.ts index 4dffd79f6..982e26af8 100644 --- a/src/hooks/use-user-lists.ts +++ b/src/hooks/use-user-lists.ts @@ -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); diff --git a/src/providers/notification-timeline.tsx b/src/providers/notification-timeline.tsx index 12485375a..76c072b5d 100644 --- a/src/providers/notification-timeline.tsx +++ b/src/providers/notification-timeline.tsx @@ -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]); diff --git a/src/providers/people-list-provider.tsx b/src/providers/people-list-provider.tsx index ad253cd46..28c759edd 100644 --- a/src/providers/people-list-provider.tsx +++ b/src/providers/people-list-provider.tsx @@ -66,7 +66,8 @@ export default function PeopleListProvider({ children, initList }: PeopleListPro const filter = useMemo(() => { 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( diff --git a/src/views/badges/browse.tsx b/src/views/badges/browse.tsx index 216fa0286..ac5115368 100644 --- a/src/views/badges/browse.tsx +++ b/src/views/badges/browse.tsx @@ -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); diff --git a/src/views/communities/index.tsx b/src/views/communities/index.tsx index 8fd3d34ac..6fc45a9a5 100644 --- a/src/views/communities/index.tsx +++ b/src/views/communities/index.tsx @@ -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(); diff --git a/src/views/community/find-by-name.tsx b/src/views/community/find-by-name.tsx index 5628010f9..e6392318f 100644 --- a/src/views/community/find-by-name.tsx +++ b/src/views/community/find-by-name.tsx @@ -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); diff --git a/src/views/emoji-packs/browse.tsx b/src/views/emoji-packs/browse.tsx index 3d74c46d3..3959f92c0 100644 --- a/src/views/emoji-packs/browse.tsx +++ b/src/views/emoji-packs/browse.tsx @@ -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); diff --git a/src/views/emoji-packs/index.tsx b/src/views/emoji-packs/index.tsx index 41f9eb074..eb92410a3 100644 --- a/src/views/emoji-packs/index.tsx +++ b/src/views/emoji-packs/index.tsx @@ -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)); diff --git a/src/views/goals/browse.tsx b/src/views/goals/browse.tsx index fc12550dc..ea02ab3da 100644 --- a/src/views/goals/browse.tsx +++ b/src/views/goals/browse.tsx @@ -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); diff --git a/src/views/goals/index.tsx b/src/views/goals/index.tsx index 5ab14c822..1d768767b 100644 --- a/src/views/goals/index.tsx +++ b/src/views/goals/index.tsx @@ -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); diff --git a/src/views/home/index.tsx b/src/views/home/index.tsx index 69ffc0cf2..c9b4c90f8 100644 --- a/src/views/home/index.tsx +++ b/src/views/home/index.tsx @@ -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(() => { - 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, }); diff --git a/src/views/lists/browse.tsx b/src/views/lists/browse.tsx index 1af124f62..594cd9bf7 100644 --- a/src/views/lists/browse.tsx +++ b/src/views/lists/browse.tsx @@ -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); diff --git a/src/views/map/index.tsx b/src/views/map/index.tsx index a991b13da..43cf51d87 100644 --- a/src/views/map/index.tsx +++ b/src/views/map/index.tsx @@ -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(() => { diff --git a/src/views/relays/relay/relay-notes.tsx b/src/views/relays/relay/relay-notes.tsx index 95d4ac18e..c89344f00 100644 --- a/src/views/relays/relay/relay-notes.tsx +++ b/src/views/relays/relay/relay-notes.tsx @@ -21,10 +21,6 @@ export default function RelayNotes({ relay }: { relay: string }) { const { filter } = usePeopleListContext(); const kinds = [Kind.Text]; - const query = useMemo(() => { - 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 = ( diff --git a/src/views/relays/relay/relay-reviews.tsx b/src/views/relays/relay/relay-reviews.tsx index c71e52d68..96c085370 100644 --- a/src/views/relays/relay/relay-reviews.tsx +++ b/src/views/relays/relay/relay-reviews.tsx @@ -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); diff --git a/src/views/relays/reviews.tsx b/src/views/relays/reviews.tsx index 86bd91deb..4f17ba1d0 100644 --- a/src/views/relays/reviews.tsx +++ b/src/views/relays/reviews.tsx @@ -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); diff --git a/src/views/search/article-results.tsx b/src/views/search/article-results.tsx index 094591a63..e579f0599 100644 --- a/src/views/search/article-results.tsx +++ b/src/views/search/article-results.tsx @@ -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); diff --git a/src/views/search/community-results.tsx b/src/views/search/community-results.tsx index 448ef726c..2a0b84f4a 100644 --- a/src/views/search/community-results.tsx +++ b/src/views/search/community-results.tsx @@ -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); diff --git a/src/views/search/note-results.tsx b/src/views/search/note-results.tsx index 84cb09662..545790ce8 100644 --- a/src/views/search/note-results.tsx +++ b/src/views/search/note-results.tsx @@ -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); diff --git a/src/views/search/profile-results.tsx b/src/views/search/profile-results.tsx index 145acaa2d..44c8768e3 100644 --- a/src/views/search/profile-results.tsx +++ b/src/views/search/profile-results.tsx @@ -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) ?? []; diff --git a/src/views/streams/index.tsx b/src/views/streams/index.tsx index 6eb03ec8a..58b3ff935 100644 --- a/src/views/streams/index.tsx +++ b/src/views/streams/index.tsx @@ -34,15 +34,15 @@ function StreamsPage() { ); const { filter, listId } = usePeopleListContext(); - const query = useMemo(() => { - if (!listId || !filter) return { kinds: [STREAM_KIND] }; + const query = useMemo(() => { + 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()); diff --git a/src/views/torrents/index.tsx b/src/views/torrents/index.tsx index 44ff4f425..b2e7c6fc5 100644 --- a/src/views/torrents/index.tsx +++ b/src/views/torrents/index.tsx @@ -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);