Make sure filter isn't cached

This commit is contained in:
Tristan Edwards 2023-01-01 13:01:54 +01:00
parent 6fd4c777aa
commit 50f67a0333

View File

@ -124,7 +124,13 @@ export function useNostr() {
return useContext(NostrContext) return useContext(NostrContext)
} }
export function useNostrEvents({ filter }: { filter: Filter }) { export function useNostrEvents({
filter,
enabled = true,
}: {
filter: Filter
enabled?: boolean
}) {
const { isLoading, onConnect, debug, connectedRelays } = useNostr() const { isLoading, onConnect, debug, connectedRelays } = useNostr()
const [events, setEvents] = useState<NostrEvent[]>([]) const [events, setEvents] = useState<NostrEvent[]>([])
const [unsubscribe, setUnsubscribe] = useState<() => void | void>(() => { const [unsubscribe, setUnsubscribe] = useState<() => void | void>(() => {
@ -133,7 +139,7 @@ export function useNostrEvents({ filter }: { filter: Filter }) {
let onEventCallback: null | OnEventFunc = null let onEventCallback: null | OnEventFunc = null
// Lets us set filterBase64 as a useEffect dependency // Lets us detect changes in the nested filter object for the useEffect hook
const filterBase64 = const filterBase64 =
typeof window !== "undefined" ? window.btoa(JSON.stringify(filter)) : null typeof window !== "undefined" ? window.btoa(JSON.stringify(filter)) : null
@ -147,7 +153,7 @@ export function useNostrEvents({ filter }: { filter: Filter }) {
return sub.unsub() return sub.unsub()
} }
const subscribe = useCallback((relay: Relay) => { const subscribe = useCallback((relay: Relay, filter: Filter) => {
log( log(
debug, debug,
"info", "info",
@ -174,9 +180,11 @@ export function useNostrEvents({ filter }: { filter: Filter }) {
}, []) }, [])
useEffect(() => { useEffect(() => {
if (!enabled) return
const relaySubs = connectedRelays.map((relay) => { const relaySubs = connectedRelays.map((relay) => {
return { return {
sub: subscribe(relay), sub: subscribe(relay, filter),
relay, relay,
} }
}) })
@ -186,7 +194,7 @@ export function useNostrEvents({ filter }: { filter: Filter }) {
_unsubscribe(sub, relay) _unsubscribe(sub, relay)
}) })
} }
}, [connectedRelays, filterBase64]) }, [connectedRelays, filterBase64, enabled])
const uniqEvents = events.length > 0 ? uniqBy(events, "id") : [] const uniqEvents = events.length > 0 ? uniqBy(events, "id") : []
const sortedEvents = uniqEvents.sort((a, b) => b.created_at - a.created_at) const sortedEvents = uniqEvents.sort((a, b) => b.created_at - a.created_at)