mirror of
https://github.com/t4t5/nostr-react.git
synced 2025-09-17 21:20:29 +02:00
Use base64 to detect filter changes
This commit is contained in:
@@ -65,11 +65,15 @@ export function NostrProvider({
|
|||||||
let onDisconnectCallback: null | OnDisconnectFunc = null
|
let onDisconnectCallback: null | OnDisconnectFunc = null
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
let ignore = false // For React StrictMode
|
||||||
|
|
||||||
relayUrls.forEach(async (relayUrl) => {
|
relayUrls.forEach(async (relayUrl) => {
|
||||||
const relay = relayInit(relayUrl)
|
const relay = relayInit(relayUrl)
|
||||||
relay.connect()
|
relay.connect()
|
||||||
|
|
||||||
relay.on("connect", () => {
|
relay.on("connect", () => {
|
||||||
|
if (ignore) return
|
||||||
|
|
||||||
log(debug, "info", `✅ nostr: Connected to ${relayUrl}`)
|
log(debug, "info", `✅ nostr: Connected to ${relayUrl}`)
|
||||||
setIsLoading(false)
|
setIsLoading(false)
|
||||||
onConnectCallback?.(relay)
|
onConnectCallback?.(relay)
|
||||||
@@ -77,7 +81,7 @@ export function NostrProvider({
|
|||||||
})
|
})
|
||||||
|
|
||||||
relay.on("disconnect", () => {
|
relay.on("disconnect", () => {
|
||||||
log(debug, "warn", `👋 nostr: Connection closed for ${relayUrl}`)
|
log(debug, "warn", `🚪 nostr: Connection closed for ${relayUrl}`)
|
||||||
onDisconnectCallback?.(relay)
|
onDisconnectCallback?.(relay)
|
||||||
setConnectedRelays((prev) => prev.filter((r) => r.url !== relayUrl))
|
setConnectedRelays((prev) => prev.filter((r) => r.url !== relayUrl))
|
||||||
})
|
})
|
||||||
@@ -86,7 +90,11 @@ export function NostrProvider({
|
|||||||
log(debug, "error", `❌ nostr: Error connecting to ${relayUrl}!`)
|
log(debug, "error", `❌ nostr: Error connecting to ${relayUrl}!`)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}, [onConnectCallback, relayUrls])
|
|
||||||
|
return () => {
|
||||||
|
ignore = true
|
||||||
|
}
|
||||||
|
}, [])
|
||||||
|
|
||||||
const value: NostrContextType = {
|
const value: NostrContextType = {
|
||||||
debug,
|
debug,
|
||||||
@@ -118,15 +126,22 @@ export function useNostrEvents({ filter }: { filter: Filter }) {
|
|||||||
|
|
||||||
let onEventCallback: null | OnEventFunc = null
|
let onEventCallback: null | OnEventFunc = null
|
||||||
|
|
||||||
|
// Lets us set filterBase64 as a useEffect dependency
|
||||||
|
const filterBase64 =
|
||||||
|
typeof window !== "undefined" ? window.btoa(JSON.stringify(filter)) : null
|
||||||
|
|
||||||
let unsubscribe = () => {
|
let unsubscribe = () => {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const subscribe = (relay: Relay) => {
|
const subscribe = (relay: Relay) => {
|
||||||
log(debug, "info", "⬆️ nostr: Sending event filter:", filter)
|
log(debug, "info", "⬆️ nostr: Subscribing to filter:", filter)
|
||||||
const sub = relay.sub([filter])
|
const sub = relay.sub([filter])
|
||||||
|
|
||||||
unsubscribe = sub.unsub
|
unsubscribe = () => {
|
||||||
|
log(debug, "info", "✌️ nostr: Unsubscribing from filter:", filter)
|
||||||
|
return sub.unsub()
|
||||||
|
}
|
||||||
|
|
||||||
sub.on("event", (event: NostrEvent) => {
|
sub.on("event", (event: NostrEvent) => {
|
||||||
log(debug, "info", "⬇️ nostr: Received event:", event)
|
log(debug, "info", "⬇️ nostr: Received event:", event)
|
||||||
@@ -141,11 +156,7 @@ export function useNostrEvents({ filter }: { filter: Filter }) {
|
|||||||
connectedRelays.forEach((relay) => {
|
connectedRelays.forEach((relay) => {
|
||||||
subscribe(relay)
|
subscribe(relay)
|
||||||
})
|
})
|
||||||
}, [connectedRelays.length])
|
}, [connectedRelays, filterBase64])
|
||||||
|
|
||||||
onConnect((relay: Relay) => {
|
|
||||||
subscribe(relay)
|
|
||||||
})
|
|
||||||
|
|
||||||
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)
|
||||||
|
Reference in New Issue
Block a user