@@ -54,13 +54,18 @@ export type UseInkathonProviderContextType = {
54
54
switchActiveChain ?: ( chain : SubstrateChain ) => Promise < void >
55
55
api ?: ApiPromise
56
56
provider ?: WsProvider | HttpProvider
57
- connect ?: ( chain ?: SubstrateChain , wallet ?: SubstrateWallet ) => Promise < void >
57
+ connect ?: (
58
+ chain ?: SubstrateChain ,
59
+ wallet ?: SubstrateWallet ,
60
+ lastActiveAccountAddress ?: string ,
61
+ ) => Promise < void >
58
62
disconnect ?: ( ) => void
59
63
accounts ?: InjectedAccount [ ]
60
64
activeAccount ?: InjectedAccount
61
65
activeExtension ?: InjectedExtension
62
66
activeSigner ?: Signer
63
67
setActiveAccount ?: Dispatch < SetStateAction < InjectedAccount | undefined > >
68
+ lastActiveAccount ?: InjectedAccount
64
69
deployments ?: SubstrateDeployment [ ]
65
70
}
66
71
export const UseInkathonProviderContext =
@@ -124,8 +129,7 @@ export const UseInkathonProvider: FC<UseInkathonProviderProps> = ({
124
129
const [ accounts , setAccounts ] = useState < InjectedAccount [ ] > ( [ ] )
125
130
const [ activeAccount , setActiveAccount ] = useState < InjectedAccount > ( )
126
131
const [ activeExtension , setActiveExtension ] = useState < InjectedExtension > ( )
127
- const [ latestActiveAccount , setLatestActiveAccount ] =
128
- useState < InjectedAccount > ( )
132
+ const [ lastActiveAccount , setLastActiveAccount ] = useState < InjectedAccount > ( )
129
133
const [ activeSigner , setActiveSigner ] = useState < Signer > ( )
130
134
const [ unsubscribeAccounts , setUnsubscribeAccounts ] = useState < Unsubcall > ( )
131
135
const [ deployments , setDeployments ] = useState < SubstrateDeployment [ ] > ( [ ] )
@@ -170,11 +174,17 @@ export const UseInkathonProvider: FC<UseInkathonProviderProps> = ({
170
174
}
171
175
172
176
// Updates account list and active account
173
- const updateAccounts = ( injectedAccounts : InjectedAccount [ ] ) => {
177
+ const updateAccounts = (
178
+ injectedAccounts : InjectedAccount [ ] ,
179
+ lastActiveAccountAddress ?: string ,
180
+ ) => {
174
181
const newAccounts = injectedAccounts || [ ]
175
- // Find active account in new accounts or fallback to first account
182
+ // Find active account in new accounts or fallback to latest account
183
+ const _lastAccount = lastActiveAccountAddress
184
+ ? { address : lastActiveAccountAddress }
185
+ : lastActiveAccount
176
186
const newAccount =
177
- newAccounts . find ( ( a ) => accountsAreEqual ( a , latestActiveAccount ) ) ||
187
+ newAccounts . find ( ( a ) => accountsAreEqual ( a , _lastAccount ) ) ||
178
188
newAccounts ?. [ 0 ]
179
189
180
190
// Update accounts and active account
@@ -187,16 +197,17 @@ export const UseInkathonProvider: FC<UseInkathonProviderProps> = ({
187
197
setIsConnected ( ! ! newAccount )
188
198
}
189
199
useEffect ( ( ) => {
190
- if (
191
- activeAccount &&
192
- ! accountsAreEqual ( activeAccount , latestActiveAccount )
193
- ) {
194
- setLatestActiveAccount ( ( ) => activeAccount )
200
+ if ( activeAccount && ! accountsAreEqual ( activeAccount , lastActiveAccount ) ) {
201
+ setLastActiveAccount ( ( ) => activeAccount )
195
202
}
196
203
} , [ activeAccount ] )
197
204
198
205
// Connect to injected wallet
199
- const connect = async ( chain ?: SubstrateChain , wallet ?: SubstrateWallet ) => {
206
+ const connect = async (
207
+ chain ?: SubstrateChain ,
208
+ wallet ?: SubstrateWallet ,
209
+ lastActiveAccountAddress ?: string ,
210
+ ) => {
200
211
setError ( undefined )
201
212
setIsConnecting ( true )
202
213
setIsConnected ( ! ! activeAccount )
@@ -230,7 +241,9 @@ export const UseInkathonProvider: FC<UseInkathonProviderProps> = ({
230
241
231
242
// Query & keep listening to injected accounts
232
243
unsubscribeAccounts ?.( )
233
- const unsubscribe = extension ?. accounts . subscribe ( updateAccounts )
244
+ const unsubscribe = extension ?. accounts . subscribe ( ( accounts ) => {
245
+ updateAccounts ( accounts , lastActiveAccountAddress )
246
+ } )
234
247
setUnsubscribeAccounts ( unsubscribe )
235
248
} catch ( e : any ) {
236
249
console . error ( 'Error while connecting wallet:' , e )
@@ -294,6 +307,7 @@ export const UseInkathonProvider: FC<UseInkathonProviderProps> = ({
294
307
activeExtension,
295
308
activeSigner,
296
309
setActiveAccount,
310
+ lastActiveAccount,
297
311
deployments,
298
312
} }
299
313
>
0 commit comments