diff --git a/.changeset/stale-meals-report.md b/.changeset/stale-meals-report.md new file mode 100644 index 000000000..bd60a9fc6 --- /dev/null +++ b/.changeset/stale-meals-report.md @@ -0,0 +1,5 @@ +--- +"nostrudel": patch +--- + +Fix threads not loading when navigating directly to them diff --git a/src/classes/thread-loader.ts b/src/classes/thread-loader.ts index e53b5b733..115c249b6 100644 --- a/src/classes/thread-loader.ts +++ b/src/classes/thread-loader.ts @@ -2,7 +2,7 @@ import { getReferences } from "../helpers/nostr/events"; import { NostrEvent } from "../types/nostr-event"; import { NostrRequest } from "./nostr-request"; import { NostrMultiSubscription } from "./nostr-multi-subscription"; -import Subject, { PersistentSubject } from "./subject"; +import { PersistentSubject } from "./subject"; export class ThreadLoader { loading = new PersistentSubject(false); @@ -66,6 +66,12 @@ export class ThreadLoader { } } + setRelays(relays: string[]) { + this.relays = relays; + this.subscription.setRelays(relays); + this.loadEvent(); + } + private updateSubscription() { if (this.rootId.value) { this.subscription.setQuery({ "#e": [this.rootId.value], kinds: [1] }); diff --git a/src/hooks/use-thread-loader.ts b/src/hooks/use-thread-loader.ts index 2e0536a57..b204645f3 100644 --- a/src/hooks/use-thread-loader.ts +++ b/src/hooks/use-thread-loader.ts @@ -1,9 +1,11 @@ import { useEffect, useMemo, useRef } from "react"; import { useUnmount } from "react-use"; + import { ThreadLoader } from "../classes/thread-loader"; import { linkEvents } from "../helpers/thread"; import { useReadRelayUrls } from "./use-client-relays"; import useSubject from "./use-subject"; +import useRelaysChanged from "./use-relays-changed"; type Options = { enabled?: boolean; @@ -25,6 +27,10 @@ export function useThreadLoader(eventId: string, additionalRelays: string[] = [] else loader.close(); }, [enabled]); + useRelaysChanged(relays, () => { + loader.setRelays(relays); + }); + useUnmount(() => { loader.close(); }); diff --git a/src/services/single-event.ts b/src/services/single-event.ts index 5beab3188..57b149fb2 100644 --- a/src/services/single-event.ts +++ b/src/services/single-event.ts @@ -12,7 +12,7 @@ class SingleEventService { const event = this.eventCache.get(id); if (event) return event; - this.pending.set(id, this.pending.get(id)?.concat(relays) ?? safeRelayUrls(relays)); + this.pending.set(id, this.pending.get(id)?.concat(safeRelayUrls(relays)) ?? safeRelayUrls(relays)); const deferred = createDefer(); this.pendingPromises.set(id, deferred); return deferred;