Skip to content

Commit 89f332c

Browse files
committed
feat: Optionally supply latestActiveAccount to connect to prefer most recent account
1 parent 6ec97be commit 89f332c

File tree

1 file changed

+27
-13
lines changed

1 file changed

+27
-13
lines changed

src/provider.tsx

+27-13
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,18 @@ export type UseInkathonProviderContextType = {
5454
switchActiveChain?: (chain: SubstrateChain) => Promise<void>
5555
api?: ApiPromise
5656
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>
5862
disconnect?: () => void
5963
accounts?: InjectedAccount[]
6064
activeAccount?: InjectedAccount
6165
activeExtension?: InjectedExtension
6266
activeSigner?: Signer
6367
setActiveAccount?: Dispatch<SetStateAction<InjectedAccount | undefined>>
68+
lastActiveAccount?: InjectedAccount
6469
deployments?: SubstrateDeployment[]
6570
}
6671
export const UseInkathonProviderContext =
@@ -124,8 +129,7 @@ export const UseInkathonProvider: FC<UseInkathonProviderProps> = ({
124129
const [accounts, setAccounts] = useState<InjectedAccount[]>([])
125130
const [activeAccount, setActiveAccount] = useState<InjectedAccount>()
126131
const [activeExtension, setActiveExtension] = useState<InjectedExtension>()
127-
const [latestActiveAccount, setLatestActiveAccount] =
128-
useState<InjectedAccount>()
132+
const [lastActiveAccount, setLastActiveAccount] = useState<InjectedAccount>()
129133
const [activeSigner, setActiveSigner] = useState<Signer>()
130134
const [unsubscribeAccounts, setUnsubscribeAccounts] = useState<Unsubcall>()
131135
const [deployments, setDeployments] = useState<SubstrateDeployment[]>([])
@@ -170,11 +174,17 @@ export const UseInkathonProvider: FC<UseInkathonProviderProps> = ({
170174
}
171175

172176
// Updates account list and active account
173-
const updateAccounts = (injectedAccounts: InjectedAccount[]) => {
177+
const updateAccounts = (
178+
injectedAccounts: InjectedAccount[],
179+
lastActiveAccountAddress?: string,
180+
) => {
174181
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
176186
const newAccount =
177-
newAccounts.find((a) => accountsAreEqual(a, latestActiveAccount)) ||
187+
newAccounts.find((a) => accountsAreEqual(a, _lastAccount)) ||
178188
newAccounts?.[0]
179189

180190
// Update accounts and active account
@@ -187,16 +197,17 @@ export const UseInkathonProvider: FC<UseInkathonProviderProps> = ({
187197
setIsConnected(!!newAccount)
188198
}
189199
useEffect(() => {
190-
if (
191-
activeAccount &&
192-
!accountsAreEqual(activeAccount, latestActiveAccount)
193-
) {
194-
setLatestActiveAccount(() => activeAccount)
200+
if (activeAccount && !accountsAreEqual(activeAccount, lastActiveAccount)) {
201+
setLastActiveAccount(() => activeAccount)
195202
}
196203
}, [activeAccount])
197204

198205
// 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+
) => {
200211
setError(undefined)
201212
setIsConnecting(true)
202213
setIsConnected(!!activeAccount)
@@ -230,7 +241,9 @@ export const UseInkathonProvider: FC<UseInkathonProviderProps> = ({
230241

231242
// Query & keep listening to injected accounts
232243
unsubscribeAccounts?.()
233-
const unsubscribe = extension?.accounts.subscribe(updateAccounts)
244+
const unsubscribe = extension?.accounts.subscribe((accounts) => {
245+
updateAccounts(accounts, lastActiveAccountAddress)
246+
})
234247
setUnsubscribeAccounts(unsubscribe)
235248
} catch (e: any) {
236249
console.error('Error while connecting wallet:', e)
@@ -294,6 +307,7 @@ export const UseInkathonProvider: FC<UseInkathonProviderProps> = ({
294307
activeExtension,
295308
activeSigner,
296309
setActiveAccount,
310+
lastActiveAccount,
297311
deployments,
298312
}}
299313
>

0 commit comments

Comments
 (0)