Add "connectedRelays" param

This commit is contained in:
Tristan Edwards 2022-12-25 14:20:32 +01:00
parent da98f15680
commit 067f206165

View File

@ -15,11 +15,13 @@ type OnConnectFunc = (relay: Relay) => void
interface NostrContextType { interface NostrContextType {
isLoading: boolean isLoading: boolean
debug?: boolean debug?: boolean
connectedRelays: Relay[]
onConnect: (_onConnectCallback?: OnConnectFunc) => void onConnect: (_onConnectCallback?: OnConnectFunc) => void
} }
const NostrContext = createContext<NostrContextType>({ const NostrContext = createContext<NostrContextType>({
isLoading: true, isLoading: true,
connectedRelays: [],
onConnect: () => null, onConnect: () => null,
}) })
@ -32,6 +34,8 @@ const log = (
console[type](...args) console[type](...args)
} }
// TODO: add "send"
export function NostrProvider({ export function NostrProvider({
children, children,
relayUrls, relayUrls,
@ -42,6 +46,7 @@ export function NostrProvider({
debug?: boolean debug?: boolean
}) { }) {
const [isLoading, setIsLoading] = useState(true) const [isLoading, setIsLoading] = useState(true)
const [connectedRelays, setConnectedRelays] = useState<Relay[]>([])
let onConnectCallback: null | OnConnectFunc = null let onConnectCallback: null | OnConnectFunc = null
@ -54,6 +59,7 @@ export function NostrProvider({
log(debug, "info", `✅ nostr: Connected to ${relayUrl}`) log(debug, "info", `✅ nostr: Connected to ${relayUrl}`)
setIsLoading(false) setIsLoading(false)
onConnectCallback?.(relay) onConnectCallback?.(relay)
setConnectedRelays((prev) => uniqBy([...prev, relay], "url"))
}) })
// Wait for this to be merged: https://github.com/fiatjaf/nostr-tools/pull/69 // Wait for this to be merged: https://github.com/fiatjaf/nostr-tools/pull/69
@ -67,6 +73,7 @@ export function NostrProvider({
const value: NostrContextType = { const value: NostrContextType = {
debug, debug,
isLoading, isLoading,
connectedRelays,
onConnect: (_onConnectCallback?: OnConnectFunc) => { onConnect: (_onConnectCallback?: OnConnectFunc) => {
if (_onConnectCallback) { if (_onConnectCallback) {
onConnectCallback = _onConnectCallback onConnectCallback = _onConnectCallback
@ -82,7 +89,7 @@ export function useNostr() {
} }
export function useNostrEvents({ filter }: { filter: Filter }) { export function useNostrEvents({ filter }: { filter: Filter }) {
const { isLoading, onConnect, debug } = useNostr() const { isLoading, onConnect, debug, connectedRelays } = useNostr()
const [events, setEvents] = useState<NostrEvent[]>([]) const [events, setEvents] = useState<NostrEvent[]>([])
onConnect((relay: Relay) => { onConnect((relay: Relay) => {
@ -103,5 +110,6 @@ export function useNostrEvents({ filter }: { filter: Filter }) {
isLoading, isLoading,
events: sortedEvents, events: sortedEvents,
onConnect, onConnect,
connectedRelays,
} }
} }