Skip to content

Commit

Permalink
Merge pull request #601 from dappforce/fix/wallet
Browse files Browse the repository at this point in the history
Fix wallet connection
  • Loading branch information
olehmell authored Mar 14, 2024
2 parents 6ef99d3 + 923936c commit dbd4af0
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,11 @@ export default function useAccountsFromPreferredWallet(onError?: () => void) {
const setPreferredWallet = useMyAccount((state) => state.setPreferredWallet)
const [accounts, setAccounts] = useState<WalletAccount[] | null>(null)
const onErrorRef = useWrapInRef(onError)
const isInitialized = useMyAccount.use.isInitialized()

useEffect(() => {
if (!isInitialized) return

const unsub = enableWallet({
listener: (accounts) => setAccounts(accounts ?? []),
onError: (err) => {
Expand All @@ -29,7 +32,7 @@ export default function useAccountsFromPreferredWallet(onError?: () => void) {
return () => {
unsub.then((unsub) => unsub?.())
}
}, [preferredWallet, onErrorRef, setPreferredWallet])
}, [preferredWallet, onErrorRef, setPreferredWallet, isInitialized])

return { accounts, isLoading: accounts === null }
}
41 changes: 27 additions & 14 deletions src/stores/my-account.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ type Actions = {
disconnectProxy: () => void
_subscribeEnergy: () => void
_subscribeConnectedWalletEnergy: () => void
_readPreferredWalletFromStorage: () => Wallet | undefined
}

const initialState: State = {
Expand Down Expand Up @@ -281,13 +282,25 @@ const useMyAccountBase = create<State & Actions>()((set, get) => ({

set({ ...initialState, isInitialized: true, isInitializedProxy: true })
},
_readPreferredWalletFromStorage: () => {
const preferredWallet = preferredWalletStorage.get()
let wallet: Wallet | undefined
if (preferredWallet) {
wallet = getWallets().find((wallet) => wallet.title === preferredWallet)
if (wallet) set({ preferredWallet: wallet })
else preferredWalletStorage.remove()
}
return wallet
},
init: async () => {
const { isInitialized, login } = get()
const { isInitialized, login, _readPreferredWalletFromStorage } = get()

// Prevent multiple initialization
if (isInitialized !== undefined) return
set({ isInitialized: false })

_readPreferredWalletFromStorage()

const encodedSecretKey = accountStorage.get()
const parentProxyAddress = parentProxyAddressStorage.get()

Expand All @@ -311,15 +324,6 @@ const useMyAccountBase = create<State & Actions>()((set, get) => ({

set({ isInitialized: true })

const preferredWallet = preferredWalletStorage.get()
if (preferredWallet) {
const wallet = getWallets().find(
(wallet) => wallet.title === preferredWallet
)
if (wallet) set({ preferredWallet: wallet })
else preferredWalletStorage.remove()
}

if (parentProxyAddress) {
set({ parentProxyAddress })
try {
Expand Down Expand Up @@ -457,10 +461,19 @@ export async function enableWallet({
}) {
let preferredWallet = useMyAccount.getState().preferredWallet
if (!preferredWallet) {
const firstInstalledWallet = getWallets().find((wallet) => wallet.installed)
if (!firstInstalledWallet)
return onError(new Error('No supported wallet found'))
preferredWallet = firstInstalledWallet
const fromStorage = useMyAccount
.getState()
._readPreferredWalletFromStorage()
if (fromStorage) {
preferredWallet = fromStorage
} else {
const firstInstalledWallet = getWallets().find(
(wallet) => wallet.installed
)
if (!firstInstalledWallet)
return onError(new Error('No supported wallet found'))
preferredWallet = firstInstalledWallet
}
}

try {
Expand Down

0 comments on commit dbd4af0

Please sign in to comment.