clean up timeline hook

This commit is contained in:
hzrd149 2023-11-30 08:22:05 -06:00
parent a5f56e07ee
commit 464a07d2d7
23 changed files with 80 additions and 87 deletions

@ -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);