Skip to content

Commit

Permalink
fix: wagmi's useEnsAddress() not working
Browse files Browse the repository at this point in the history
  • Loading branch information
0xChin committed Oct 5, 2023
1 parent d96998e commit 2f2b558
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 25 deletions.
4 changes: 1 addition & 3 deletions components/providers/root-provider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ export default function RootProvider({ children }: RootProviderProps) {
<XMTPProvider dbVersion={2}>
<ThemeProvider>
<QueryClientProvider client={queryClient}>
<Privy>
<HandleWalletEvents>{children}</HandleWalletEvents>
</Privy>
<Privy>{children}</Privy>
</QueryClientProvider>
</ThemeProvider>
</XMTPProvider>
Expand Down
1 change: 0 additions & 1 deletion integrations/xmtp/xmtp-create-client.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { useCallback, useEffect } from "react"
import { usePrivy, useWallets } from "@privy-io/react-auth"
import { usePrivyWagmi } from "@privy-io/wagmi-connector"
import { useClient } from "@xmtp/react-sdk"
import { useAccount, useNetwork } from "wagmi"

Expand Down
33 changes: 12 additions & 21 deletions integrations/xmtp/xmtp-start-conversation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import {
useCanMessage,
useStartConversation,
} from "@xmtp/react-sdk"
import { useEnsAddress } from "wagmi"

import useEnsAddress from "@/lib/hooks/use-ens-address"
import { cn } from "@/lib/utils"
import { Button } from "@/components/ui/button"

Expand All @@ -27,27 +27,15 @@ export const XMTPStartConversation = ({ className }: XMTPStartConversation) => {
setIsLoading(false)
}

const {
data: ensResolvedAddress,
isLoading: isEnsLoading,
isFetching: isEnsFetching,
refetch: ensRefetch,
} = useEnsAddress({
name: peerAddress,
chainId: 1,
enabled: false,
})
const { data: ensResolvedAddress, isLoading: isEnsLoading } =
useEnsAddress(peerAddress)

const handleAccountChange = async (event: any) => {
const newPeerAddress: string = event.target.value
setPeerAddress(event.target.value)
if (isValidAddress(event.target.value)) {
await checkAddress(event.target.value)
}
if (newPeerAddress.endsWith(".eth")) {
console.log("refetching")
await ensRefetch()
}
}

const handleMessageChange = (event: any) => {
Expand Down Expand Up @@ -84,16 +72,16 @@ export const XMTPStartConversation = ({ className }: XMTPStartConversation) => {
await checkAddress(ensResolvedAddress)
}

if (ensResolvedAddress && isValidAddress(ensResolvedAddress)) {
if (
typeof ensResolvedAddress === "string" &&
isValidAddress(ensResolvedAddress)
) {
checkEnsAddress(ensResolvedAddress).catch((err) => console.log(err))
}
}, [ensResolvedAddress])

const getFeedbackMessage = () => {
if (
isLoading ||
(peerAddress.endsWith(".eth") && (isEnsLoading || isEnsFetching))
) {
if (isLoading || (peerAddress.endsWith(".eth") && isEnsLoading)) {
return "Finding address on the XMTP network"
}

Expand All @@ -105,10 +93,13 @@ export const XMTPStartConversation = ({ className }: XMTPStartConversation) => {
return "Please enter a valid 0x wallet, or ENS address"
}

if (!ensResolvedAddress && peerAddress.endsWith(".eth")) {
return "An error occured resolving the address from the ENS"
}

if (
!isLoading &&
!isEnsLoading &&
!isEnsFetching &&
!peerIsActive &&
(isValidAddress(peerAddress) || peerAddress.endsWith(".eth"))
) {
Expand Down
30 changes: 30 additions & 0 deletions lib/hooks/use-ens-address.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { useEffect, useState } from "react"
import { SetStateAction } from "jotai"
import { createPublicClient, http } from "viem"
import { mainnet } from "wagmi"

const client = createPublicClient({
chain: mainnet,
transport: http(),
})

export default function useEnsAddress(name: string) {
const [resolvedAddress, setResolvedAddress] =
useState<SetStateAction<string | null>>(null)
const [isLoading, setIsLoading] = useState(false)

useEffect(() => {
const updateAddress = async () => {
setIsLoading(true)
const address = await client.getEnsAddress({ name })
setResolvedAddress(address)
setIsLoading(false)
}

if (name.endsWith(".eth")) {
updateAddress().catch((err) => console.log(err))
}
}, [name])

return { data: resolvedAddress, isLoading }
}

0 comments on commit 2f2b558

Please sign in to comment.