Skip to content

Commit 03dba7b

Browse files
authored
Merge branch 'main' into main
2 parents 73c34a1 + 8ed9d9e commit 03dba7b

File tree

9 files changed

+49
-39
lines changed

9 files changed

+49
-39
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## [2.3.1](https://github.com/txnlab/use-wallet/compare/v2.3.0...v2.3.1) (2023-12-15)
2+
3+
### Changes
4+
5+
- Throw error if `useWallet` hook is being used outside the `WalletProvider` ([#125](https://github.com/txnlab/use-wallet/pull/125)) ([3ccc5e0](https://github.com/txnlab/use-wallet/commit/3ccc5e0251ff3f4f5f0da5950a038d8d1f21e70c))
6+
- Use named export of `zustand/shallow` to suppress deprecation warning ([263a56b](https://github.com/TxnLab/use-wallet/commit/263a56b95e9cab6112cc0f46f456ddbc107e7ee7))
7+
18
# [2.3.0](https://github.com/txnlab/use-wallet/compare/v2.2.0...v2.3.0) (2023-11-29)
29

310
### Features

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"url": "https://github.com/txnlab/use-wallet/issues"
1313
},
1414
"homepage": "https://txnlab.github.io/use-wallet",
15-
"version": "2.3.0",
15+
"version": "2.3.1",
1616
"description": "React hooks for using Algorand compatible wallets in dApps.",
1717
"scripts": {
1818
"dev": "yarn storybook",

src/context/WalletContext.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import React, { createContext, useContext } from 'react'
2+
import type { SupportedProviders } from '../types/providers'
3+
4+
const WalletContext = createContext<SupportedProviders | null>(null)
5+
6+
export const useWalletContext = (): SupportedProviders | null => {
7+
const context = useContext(WalletContext)
8+
if (context === undefined) {
9+
throw new Error('useWallet must be used within the WalletProvider')
10+
}
11+
return context
12+
}
13+
14+
export interface WalletProviderProps {
15+
children: React.ReactNode
16+
value: SupportedProviders | null
17+
}
18+
19+
export const WalletProvider = ({ children, value }: WalletProviderProps) => {
20+
return <WalletContext.Provider value={value}>{children}</WalletContext.Provider>
21+
}

src/hooks/useWallet.test.tsx

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@ import React from 'react'
77
import useWallet from './useWallet'
88
import DeflyWalletClient from '../clients/defly'
99
import PeraWalletClient from '../clients/pera'
10-
import { default as ClientProvider } from '../store/state/clientStore'
10+
import { WalletProvider, type WalletProviderProps } from '../context/WalletContext'
1111
import { useHydratedWalletStore } from '../store/state/walletStore'
12-
import { createWrapper } from '../testUtils/createWrapper'
1312
import { mockAccounts } from '../testUtils/mockAccounts'
1413
import { createDeflyMockInstance, createPeraMockInstance } from '../testUtils/mockClients'
1514
import { clearAccounts } from '../utils/clearAccounts'
@@ -36,7 +35,7 @@ jest.mock('../store/state/walletStore', () => ({
3635
}))
3736

3837
jest.mock('../', () => ({
39-
ClientProvider: ({ children }: { children: React.ReactNode }) => <div>{children}</div>
38+
WalletProvider: ({ children }: WalletProviderProps) => <div>{children}</div>
4039
}))
4140

4241
jest.mock('../utils/clearAccounts')
@@ -59,7 +58,7 @@ describe('useWallet', () => {
5958
jest.spyOn(peraMockInstance, 'disconnect')
6059
jest.spyOn(peraMockInstance, 'getAccountInfo')
6160

62-
// Passed to `ClientProvider` in renderHook wrapper
61+
// Passed to `WalletProvider` in renderHook wrapper
6362
mockClientProviders = {
6463
pera: peraMockInstance,
6564
defly: deflyMockInstance
@@ -72,7 +71,9 @@ describe('useWallet', () => {
7271

7372
it('should return active and connected accounts', () => {
7473
const { result } = renderHook(() => useWallet(), {
75-
wrapper: createWrapper(ClientProvider, { value: mockClientProviders })
74+
wrapper: ({ children }) => (
75+
<WalletProvider value={mockClientProviders}>{children}</WalletProvider>
76+
)
7677
})
7778

7879
// Active account
@@ -87,7 +88,9 @@ describe('useWallet', () => {
8788

8889
it('should return `providers` array', async () => {
8990
const { result } = renderHook(() => useWallet(), {
90-
wrapper: createWrapper(ClientProvider, { value: mockClientProviders })
91+
wrapper: ({ children }) => (
92+
<WalletProvider value={mockClientProviders}>{children}</WalletProvider>
93+
)
9194
})
9295

9396
const providers = result.current.providers
@@ -134,7 +137,9 @@ describe('useWallet', () => {
134137

135138
it('should return status flags', () => {
136139
const { result } = renderHook(() => useWallet(), {
137-
wrapper: createWrapper(ClientProvider, { value: mockClientProviders })
140+
wrapper: ({ children }) => (
141+
<WalletProvider value={mockClientProviders}>{children}</WalletProvider>
142+
)
138143
})
139144

140145
expect(result.current.isActive).toBe(true)
@@ -143,7 +148,9 @@ describe('useWallet', () => {
143148

144149
it('should return `getAccountInfo`', async () => {
145150
const { result } = renderHook(() => useWallet(), {
146-
wrapper: createWrapper(ClientProvider, { value: mockClientProviders })
151+
wrapper: ({ children }) => (
152+
<WalletProvider value={mockClientProviders}>{children}</WalletProvider>
153+
)
147154
})
148155

149156
await act(async () => {

src/hooks/useWallet.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
import { useState, useMemo, useContext, useEffect } from 'react'
1+
import { useState, useMemo, useEffect } from 'react'
22
import type algosdk from 'algosdk'
33
import { getAlgosdk } from '../algod'
44
import { useHydratedWalletStore, walletStoreSelector } from '../store/index'
55
import { TransactionsArray, WalletClient, Provider } from '../types'
66
import { PROVIDER_ID } from '../constants'
7-
import { ClientContext } from '../store/state/clientStore'
7+
import { useWalletContext } from '../context/WalletContext'
88
import allClients from '../clients'
99
import { clearAccounts } from '../utils/clearAccounts'
10-
import shallow from 'zustand/shallow'
10+
import { shallow } from 'zustand/shallow'
1111

1212
export default function useWallet() {
1313
const [providers, setProviders] = useState<Provider[] | null>(null)
14-
const clients = useContext(ClientContext)
14+
const clients = useWalletContext()
1515

1616
const {
1717
activeAccount,

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export { reconnectProviders, encodeNFDTransactionsArray } from './utils'
2-
export { WalletProvider } from './store'
2+
export { WalletProvider } from './context/WalletContext'
33
export * from './constants'
44
export * from './types'
55
export * from './clients'

src/store/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
export * from './state/walletStore'
22
export * from './state/debugStore'
3-
export { default as WalletProvider } from './state/clientStore'

src/store/state/clientStore.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/testUtils/createWrapper.tsx

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)