@lifi/widget 3.6.0-alpha.2 → 3.6.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_esm/components/TokenRate/TokenRate.js +2 -2
- package/_esm/components/TokenRate/TokenRate.js.map +1 -1
- package/_esm/config/version.d.ts +1 -1
- package/_esm/config/version.js +1 -1
- package/_esm/hooks/useAccount.d.ts +7 -1
- package/_esm/hooks/useAccount.js +41 -9
- package/_esm/hooks/useAccount.js.map +1 -1
- package/_esm/hooks/useWallets.d.ts +1 -1
- package/_esm/pages/SelectWalletPage/EVMListItemButton.js +3 -0
- package/_esm/pages/SelectWalletPage/EVMListItemButton.js.map +1 -1
- package/_esm/pages/SelectWalletPage/SVMListItemButton.js +3 -0
- package/_esm/pages/SelectWalletPage/SVMListItemButton.js.map +1 -1
- package/_esm/pages/SelectWalletPage/UTXOListItemButton.js +3 -0
- package/_esm/pages/SelectWalletPage/UTXOListItemButton.js.map +1 -1
- package/components/TokenRate/TokenRate.tsx +2 -2
- package/config/version.ts +1 -1
- package/hooks/useAccount.ts +64 -15
- package/package.json +6 -6
- package/pages/SelectWalletPage/EVMListItemButton.tsx +3 -0
- package/pages/SelectWalletPage/SVMListItemButton.tsx +3 -0
- package/pages/SelectWalletPage/UTXOListItemButton.tsx +3 -0
|
@@ -3,12 +3,12 @@ import { formatUnits } from 'viem';
|
|
|
3
3
|
import { create } from 'zustand';
|
|
4
4
|
import { convertToSubscriptFormat, precisionFormatter, } from '../../utils/format.js';
|
|
5
5
|
import { TokenRateTypography } from './TokenRate.style.js';
|
|
6
|
-
const
|
|
6
|
+
const useTokenRate = create((set) => ({
|
|
7
7
|
isForward: true,
|
|
8
8
|
toggleIsForward: () => set((state) => ({ isForward: !state.isForward })),
|
|
9
9
|
}));
|
|
10
10
|
export const TokenRate = ({ route }) => {
|
|
11
|
-
const { isForward, toggleIsForward } =
|
|
11
|
+
const { isForward, toggleIsForward } = useTokenRate();
|
|
12
12
|
const toggleRate = (e) => {
|
|
13
13
|
e.stopPropagation();
|
|
14
14
|
toggleIsForward();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenRate.js","sourceRoot":"","sources":["../../../components/TokenRate/TokenRate.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EACL,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAW3D,MAAM,
|
|
1
|
+
{"version":3,"file":"TokenRate.js","sourceRoot":"","sources":["../../../components/TokenRate/TokenRate.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EACL,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAW3D,MAAM,YAAY,GAAG,MAAM,CAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACpD,SAAS,EAAE,IAAI;IACf,eAAe,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;CACzE,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,SAAS,GAA6B,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC/D,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,YAAY,EAAE,CAAC;IAEtD,MAAM,UAAU,GAAuC,CAAC,CAAC,EAAE,EAAE;QAC3D,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,eAAe,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpC,MAAM,SAAS,GAAG;QAChB,GAAG,KAAK,CAAC,SAAS;QAClB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;KACjC,CAAC;IACF,MAAM,OAAO,GAAG;QACd,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO;YAC9B,QAAQ,EAAE,MAAM,CAAC,OAAO;YACxB,KAAK,CAAC,OAAO,CAAC;QAChB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;YACnC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC;YACrC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;KAC3B,CAAC;IAEF,MAAM,UAAU,GACd,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,MAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1D,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,MAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjE,MAAM,UAAU,GACd,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,MAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC9D,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,MAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE7D,MAAM,QAAQ,GAAG,SAAS;QACxB,CAAC,CAAC,KAAK,SAAS,CAAC,MAAM,MAAM,wBAAwB,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;QACrF,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,MAAM,wBAAwB,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;IAExF,MAAM,SAAS,GAAG,SAAS;QACzB,CAAC,CAAC,KAAK,SAAS,CAAC,MAAM,MAAM,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;QACtF,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,MAAM,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;IAEzF,OAAO,CACL,KAAC,mBAAmB,IAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAE,SAAS,YACrE,QAAQ,GACW,CACvB,CAAC;AACJ,CAAC,CAAC"}
|
package/_esm/config/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const name = "@lifi/widget";
|
|
2
|
-
export declare const version = "3.6.0-alpha.
|
|
2
|
+
export declare const version = "3.6.0-alpha.3";
|
package/_esm/config/version.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ChainType } from '@lifi/sdk';
|
|
2
|
+
import type { CreateConnectorFnExtended } from '@lifi/wallet-management';
|
|
2
3
|
import type { WalletAdapter } from '@solana/wallet-adapter-base';
|
|
3
4
|
import type { Chain } from 'viem';
|
|
4
5
|
import type { Connector } from 'wagmi';
|
|
@@ -30,8 +31,13 @@ export interface AccountResult {
|
|
|
30
31
|
interface UseAccountArgs {
|
|
31
32
|
chainType?: ChainType;
|
|
32
33
|
}
|
|
34
|
+
export type LastConnectedAccount = WalletAdapter | Connector | CreateConnectorFnExtended | null;
|
|
35
|
+
interface LastConnectedAccountStore {
|
|
36
|
+
lastConnectedAccount: LastConnectedAccount;
|
|
37
|
+
setLastConnectedAccount: (account: LastConnectedAccount) => void;
|
|
38
|
+
}
|
|
39
|
+
export declare const useLastConnectedAccount: import("zustand").UseBoundStore<import("zustand").StoreApi<LastConnectedAccountStore>>;
|
|
33
40
|
/**
|
|
34
|
-
*
|
|
35
41
|
* @param args When we provide args we want to return either account with corresponding chainType or default disconnected one
|
|
36
42
|
* @returns - Account result
|
|
37
43
|
*/
|
package/_esm/hooks/useAccount.js
CHANGED
|
@@ -3,6 +3,7 @@ import { useConfig as useBigmiConfig } from '@lifi/wallet-management';
|
|
|
3
3
|
import { useWallet } from '@solana/wallet-adapter-react';
|
|
4
4
|
import { useMemo } from 'react';
|
|
5
5
|
import { useAccount as useAccountInternal } from 'wagmi';
|
|
6
|
+
import { create } from 'zustand';
|
|
6
7
|
const defaultAccount = {
|
|
7
8
|
chainType: ChainType.EVM,
|
|
8
9
|
isConnected: false,
|
|
@@ -11,8 +12,11 @@ const defaultAccount = {
|
|
|
11
12
|
isDisconnected: true,
|
|
12
13
|
status: 'disconnected',
|
|
13
14
|
};
|
|
15
|
+
export const useLastConnectedAccount = create((set) => ({
|
|
16
|
+
lastConnectedAccount: null,
|
|
17
|
+
setLastConnectedAccount: (account) => set({ lastConnectedAccount: account }),
|
|
18
|
+
}));
|
|
14
19
|
/**
|
|
15
|
-
*
|
|
16
20
|
* @param args When we provide args we want to return either account with corresponding chainType or default disconnected one
|
|
17
21
|
* @returns - Account result
|
|
18
22
|
*/
|
|
@@ -21,9 +25,7 @@ export const useAccount = (args) => {
|
|
|
21
25
|
const bigmiAccount = useAccountInternal({ config: bigmiConfig });
|
|
22
26
|
const wagmiAccount = useAccountInternal();
|
|
23
27
|
const { wallet } = useWallet();
|
|
24
|
-
|
|
25
|
-
// to avoid re-render useMemo on every object reference change.
|
|
26
|
-
const hasChainTypeArgs = Boolean(args);
|
|
28
|
+
const { lastConnectedAccount } = useLastConnectedAccount();
|
|
27
29
|
return useMemo(() => {
|
|
28
30
|
const svm = wallet?.adapter.publicKey
|
|
29
31
|
? {
|
|
@@ -48,14 +50,44 @@ export const useAccount = (args) => {
|
|
|
48
50
|
const evm = { ...wagmiAccount, chainType: ChainType.EVM };
|
|
49
51
|
const utxo = { ...bigmiAccount, chainType: ChainType.UTXO };
|
|
50
52
|
const accounts = [evm, svm, utxo];
|
|
51
|
-
const connectedAccounts =
|
|
53
|
+
const connectedAccounts = accounts.filter((account) => account.isConnected && account.address);
|
|
54
|
+
// If a chainType argument is provided, attempt to find a connected account with the matching chainType.
|
|
55
|
+
// If no matching account is found, fallback to the default account.
|
|
56
|
+
// If no chainType argument, selectedAccount should be used.
|
|
57
|
+
const selectedChainTypeAccount = args?.chainType
|
|
58
|
+
? connectedAccounts.find((account) => account.chainType === args?.chainType) || defaultAccount
|
|
59
|
+
: undefined;
|
|
60
|
+
// If lastConnectedAccount exists, attempt to find a connected account with a matching connector ID or name.
|
|
61
|
+
// If no matching account is found, fallback to the first connected account.
|
|
62
|
+
// If lastConnectedAccount is not present, simply select the first connected account.
|
|
63
|
+
const selectedAccount = lastConnectedAccount
|
|
64
|
+
? connectedAccounts.find((account) => {
|
|
65
|
+
const connectorIdMatch = lastConnectedAccount?.id ===
|
|
66
|
+
account.connector?.id;
|
|
67
|
+
const connectorNameMatch = !lastConnectedAccount?.id &&
|
|
68
|
+
lastConnectedAccount?.name ===
|
|
69
|
+
account.connector?.name;
|
|
70
|
+
return connectorIdMatch || connectorNameMatch;
|
|
71
|
+
}) || connectedAccounts[0]
|
|
72
|
+
: connectedAccounts[0];
|
|
52
73
|
return {
|
|
53
|
-
account:
|
|
54
|
-
account.isConnected &&
|
|
55
|
-
account.address) ?? defaultAccount,
|
|
74
|
+
account: selectedChainTypeAccount || selectedAccount || defaultAccount,
|
|
56
75
|
// We need to return only connected account list
|
|
57
76
|
accounts: connectedAccounts,
|
|
58
77
|
};
|
|
59
|
-
|
|
78
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
79
|
+
}, [
|
|
80
|
+
wallet,
|
|
81
|
+
wagmiAccount.connector?.uid,
|
|
82
|
+
wagmiAccount.connector?.id,
|
|
83
|
+
wagmiAccount.status,
|
|
84
|
+
wagmiAccount.address,
|
|
85
|
+
bigmiAccount.connector?.uid,
|
|
86
|
+
bigmiAccount.connector?.id,
|
|
87
|
+
bigmiAccount.status,
|
|
88
|
+
bigmiAccount.address,
|
|
89
|
+
args?.chainType,
|
|
90
|
+
lastConnectedAccount,
|
|
91
|
+
]);
|
|
60
92
|
};
|
|
61
93
|
//# sourceMappingURL=useAccount.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAccount.js","sourceRoot":"","sources":["../../hooks/useAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"useAccount.js","sourceRoot":"","sources":["../../hooks/useAccount.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,5 @@ import type { CreateConnectorFnExtended } from '@lifi/wallet-management';
|
|
|
2
2
|
import type { Wallet } from '@solana/wallet-adapter-react';
|
|
3
3
|
import type { Connector } from 'wagmi';
|
|
4
4
|
import type { WidgetChains, WidgetWalletConfig } from '../types/widget.js';
|
|
5
|
-
export declare const useWallets: (walletConfig?: WidgetWalletConfig, chains?: WidgetChains) => (Connector |
|
|
5
|
+
export declare const useWallets: (walletConfig?: WidgetWalletConfig, chains?: WidgetChains) => (Connector | CreateConnectorFnExtended | Wallet)[];
|
|
6
6
|
export declare const walletComparator: (a: CreateConnectorFnExtended | Connector | Wallet, b: CreateConnectorFnExtended | Connector | Wallet) => number;
|
|
@@ -6,6 +6,7 @@ import { useConfig } from 'wagmi';
|
|
|
6
6
|
import { connect, disconnect, getAccount } from 'wagmi/actions';
|
|
7
7
|
import { ListItemButton } from '../../components/ListItemButton.js';
|
|
8
8
|
import { ListItemText } from '../../components/ListItemText.js';
|
|
9
|
+
import { useLastConnectedAccount } from '../../hooks/useAccount.js';
|
|
9
10
|
import { useNavigateBack } from '../../hooks/useNavigateBack.js';
|
|
10
11
|
import { useWidgetEvents } from '../../hooks/useWidgetEvents.js';
|
|
11
12
|
import { WidgetEvent } from '../../types/events.js';
|
|
@@ -13,6 +14,7 @@ export const EVMListItemButton = ({ connector, onNotInstalled, }) => {
|
|
|
13
14
|
const { navigateBack } = useNavigateBack();
|
|
14
15
|
const emitter = useWidgetEvents();
|
|
15
16
|
const config = useConfig();
|
|
17
|
+
const { setLastConnectedAccount } = useLastConnectedAccount();
|
|
16
18
|
const handleEVMConnect = async () => {
|
|
17
19
|
const identityCheckPassed = await isWalletInstalledAsync(connector.id);
|
|
18
20
|
if (!identityCheckPassed) {
|
|
@@ -24,6 +26,7 @@ export const EVMListItemButton = ({ connector, onNotInstalled, }) => {
|
|
|
24
26
|
await disconnect(config, { connector: connectedAccount.connector });
|
|
25
27
|
}
|
|
26
28
|
const data = await connect(config, { connector });
|
|
29
|
+
setLastConnectedAccount(connector);
|
|
27
30
|
emitter.emit(WidgetEvent.WalletConnected, {
|
|
28
31
|
address: data.accounts[0],
|
|
29
32
|
chainId: data.chainId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EVMListItemButton.js","sourceRoot":"","sources":["../../../pages/SelectWalletPage/EVMListItemButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAOpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,SAAS,EACT,cAAc,GACS,EAAE,EAAE;IAC3B,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"EVMListItemButton.js","sourceRoot":"","sources":["../../../pages/SelectWalletPage/EVMListItemButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EACL,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAOpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,SAAS,EACT,cAAc,GACS,EAAE,EAAE;IAC3B,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,EAAE,uBAAuB,EAAE,GAAG,uBAAuB,EAAE,CAAC;IAE9D,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;QAClC,MAAM,mBAAmB,GAAG,MAAM,sBAAsB,CACrD,SAAuB,CAAC,EAAE,CAC5B,CAAC;QACF,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,cAAc,CAAC,SAAsB,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QACD,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAC/B,MAAM,UAAU,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAClD,uBAAuB,CAAC,SAAS,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;YACxC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,SAAS,CAAC,GAAG;SACzB,CAAC,CAAC;QACH,YAAY,EAAE,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,aAAa,GAChB,SAAuC,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,CAAC;IAEzE,OAAO,CACL,MAAC,cAAc,IAAoB,OAAO,EAAE,gBAAgB,aAC1D,KAAC,cAAc,cACb,KAAC,MAAM,IACL,GAAG,EAAE,gBAAgB,CAAC,SAAsB,CAAC,EAC7C,GAAG,EAAE,aAAa,YAEjB,aAAa,EAAE,CAAC,CAAC,CAAC,GACZ,GACM,EACjB,KAAC,YAAY,IAAC,OAAO,EAAE,aAAa,GAAI,KATrB,SAAS,CAAC,EAAE,CAUhB,CAClB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -4,6 +4,7 @@ import { Avatar, ListItemAvatar } from '@mui/material';
|
|
|
4
4
|
import { useWallet } from '@solana/wallet-adapter-react';
|
|
5
5
|
import { ListItemButton } from '../../components/ListItemButton.js';
|
|
6
6
|
import { ListItemText } from '../../components/ListItemText.js';
|
|
7
|
+
import { useLastConnectedAccount } from '../../hooks/useAccount.js';
|
|
7
8
|
import { useNavigateBack } from '../../hooks/useNavigateBack.js';
|
|
8
9
|
import { useWidgetEvents } from '../../hooks/useWidgetEvents.js';
|
|
9
10
|
import { WidgetEvent } from '../../types/events.js';
|
|
@@ -11,6 +12,7 @@ export const SVMListItemButton = ({ wallet }) => {
|
|
|
11
12
|
const { navigateBack } = useNavigateBack();
|
|
12
13
|
const emitter = useWidgetEvents();
|
|
13
14
|
const { select, disconnect, connected } = useWallet();
|
|
15
|
+
const { setLastConnectedAccount } = useLastConnectedAccount();
|
|
14
16
|
const connect = async () => {
|
|
15
17
|
if (connected) {
|
|
16
18
|
await disconnect();
|
|
@@ -19,6 +21,7 @@ export const SVMListItemButton = ({ wallet }) => {
|
|
|
19
21
|
// We use autoConnect on wallet selection
|
|
20
22
|
// await solanaConnect();
|
|
21
23
|
wallet.adapter.once('connect', (publicKey) => {
|
|
24
|
+
setLastConnectedAccount(wallet.adapter);
|
|
22
25
|
emitter.emit(WidgetEvent.WalletConnected, {
|
|
23
26
|
address: publicKey?.toString(),
|
|
24
27
|
chainId: ChainId.SOL,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SVMListItemButton.js","sourceRoot":"","sources":["../../../pages/SelectWalletPage/SVMListItemButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAMpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAA0B,EAAE,EAAE;IACtE,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"SVMListItemButton.js","sourceRoot":"","sources":["../../../pages/SelectWalletPage/SVMListItemButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAMpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAA0B,EAAE,EAAE;IACtE,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAAC;IACtD,MAAM,EAAE,uBAAuB,EAAE,GAAG,uBAAuB,EAAE,CAAC;IAE9D,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,UAAU,EAAE,CAAC;QACrB,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,yCAAyC;QACzC,yBAAyB;QACzB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE;YAC3C,uBAAuB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;gBACxC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;gBAC9B,OAAO,EAAE,OAAO,CAAC,GAAG;gBACpB,SAAS,EAAE,SAAS,CAAC,GAAG;aACzB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,YAAY,EAAE,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,cAAc,IAA2B,OAAO,EAAE,OAAO,aACxD,KAAC,cAAc,cACb,KAAC,MAAM,IAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,YACvD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAChB,GACM,EACjB,KAAC,YAAY,IAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,WAAW,GAAI,KANzC,MAAM,CAAC,OAAO,CAAC,IAAI,CAOvB,CAClB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -5,6 +5,7 @@ import { Avatar, ListItemAvatar } from '@mui/material';
|
|
|
5
5
|
import { connect, disconnect, getAccount } from 'wagmi/actions';
|
|
6
6
|
import { ListItemButton } from '../../components/ListItemButton.js';
|
|
7
7
|
import { ListItemText } from '../../components/ListItemText.js';
|
|
8
|
+
import { useLastConnectedAccount } from '../../hooks/useAccount.js';
|
|
8
9
|
import { useNavigateBack } from '../../hooks/useNavigateBack.js';
|
|
9
10
|
import { useWidgetEvents } from '../../hooks/useWidgetEvents.js';
|
|
10
11
|
import { WidgetEvent } from '../../types/events.js';
|
|
@@ -12,6 +13,7 @@ export const UTXOListItemButton = ({ connector, onNotInstalled, }) => {
|
|
|
12
13
|
const { navigateBack } = useNavigateBack();
|
|
13
14
|
const emitter = useWidgetEvents();
|
|
14
15
|
const config = useConfig();
|
|
16
|
+
const { setLastConnectedAccount } = useLastConnectedAccount();
|
|
15
17
|
const handleUTXOConnect = async () => {
|
|
16
18
|
const identityCheckPassed = await isWalletInstalledAsync(connector.id);
|
|
17
19
|
if (!identityCheckPassed) {
|
|
@@ -23,6 +25,7 @@ export const UTXOListItemButton = ({ connector, onNotInstalled, }) => {
|
|
|
23
25
|
await disconnect(config, { connector: connectedAccount.connector });
|
|
24
26
|
}
|
|
25
27
|
const data = await connect(config, { connector });
|
|
28
|
+
setLastConnectedAccount(connector);
|
|
26
29
|
emitter.emit(WidgetEvent.WalletConnected, {
|
|
27
30
|
address: data.accounts[0],
|
|
28
31
|
chainId: data.chainId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UTXOListItemButton.js","sourceRoot":"","sources":["../../../pages/SelectWalletPage/UTXOListItemButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,SAAS,GACV,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAOpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EACjC,SAAS,EACT,cAAc,GACU,EAAE,EAAE;IAC5B,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"UTXOListItemButton.js","sourceRoot":"","sources":["../../../pages/SelectWalletPage/UTXOListItemButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,SAAS,GACV,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAOpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EACjC,SAAS,EACT,cAAc,GACU,EAAE,EAAE;IAC5B,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,EAAE,uBAAuB,EAAE,GAAG,uBAAuB,EAAE,CAAC;IAE9D,MAAM,iBAAiB,GAAG,KAAK,IAAI,EAAE;QACnC,MAAM,mBAAmB,GAAG,MAAM,sBAAsB,CACrD,SAAuB,CAAC,EAAE,CAC5B,CAAC;QACF,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,cAAc,CAAC,SAAsB,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QACD,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAC/B,MAAM,UAAU,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAClD,uBAAuB,CAAC,SAAS,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;YACxC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,SAAS,CAAC,IAAI;SAC1B,CAAC,CAAC;QACH,YAAY,EAAE,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,aAAa,GAChB,SAAuC,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,CAAC;IAEzE,OAAO,CACL,MAAC,cAAc,IAAoB,OAAO,EAAE,iBAAiB,aAC3D,KAAC,cAAc,cACb,KAAC,MAAM,IACL,GAAG,EAAE,gBAAgB,CAAC,SAAsB,CAAC,EAC7C,GAAG,EAAE,aAAa,YAEjB,aAAa,EAAE,CAAC,CAAC,CAAC,GACZ,GACM,EACjB,KAAC,YAAY,IAAC,OAAO,EAAE,GAAG,aAAa,YAAY,GAAI,KATpC,SAAS,CAAC,EAAE,CAUhB,CAClB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -18,13 +18,13 @@ interface TokenRateState {
|
|
|
18
18
|
toggleIsForward(): void;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
const
|
|
21
|
+
const useTokenRate = create<TokenRateState>((set) => ({
|
|
22
22
|
isForward: true,
|
|
23
23
|
toggleIsForward: () => set((state) => ({ isForward: !state.isForward })),
|
|
24
24
|
}));
|
|
25
25
|
|
|
26
26
|
export const TokenRate: React.FC<TokenRateProps> = ({ route }) => {
|
|
27
|
-
const { isForward, toggleIsForward } =
|
|
27
|
+
const { isForward, toggleIsForward } = useTokenRate();
|
|
28
28
|
|
|
29
29
|
const toggleRate: MouseEventHandler<HTMLSpanElement> = (e) => {
|
|
30
30
|
e.stopPropagation();
|
package/config/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export const name = '@lifi/widget';
|
|
2
|
-
export const version = '3.6.0-alpha.
|
|
2
|
+
export const version = '3.6.0-alpha.3';
|
package/hooks/useAccount.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ChainId, ChainType } from '@lifi/sdk';
|
|
2
|
+
import type { CreateConnectorFnExtended } from '@lifi/wallet-management';
|
|
2
3
|
import { useConfig as useBigmiConfig } from '@lifi/wallet-management';
|
|
3
4
|
import type { WalletAdapter } from '@solana/wallet-adapter-base';
|
|
4
5
|
import { useWallet } from '@solana/wallet-adapter-react';
|
|
@@ -6,6 +7,7 @@ import { useMemo } from 'react';
|
|
|
6
7
|
import type { Chain } from 'viem';
|
|
7
8
|
import type { Connector } from 'wagmi';
|
|
8
9
|
import { useAccount as useAccountInternal } from 'wagmi';
|
|
10
|
+
import { create } from 'zustand';
|
|
9
11
|
|
|
10
12
|
export interface AccountBase<CT extends ChainType, ConnectorType = undefined> {
|
|
11
13
|
address?: string;
|
|
@@ -49,8 +51,26 @@ const defaultAccount: AccountBase<ChainType> = {
|
|
|
49
51
|
status: 'disconnected',
|
|
50
52
|
};
|
|
51
53
|
|
|
54
|
+
export type LastConnectedAccount =
|
|
55
|
+
| WalletAdapter
|
|
56
|
+
| Connector
|
|
57
|
+
| CreateConnectorFnExtended
|
|
58
|
+
| null;
|
|
59
|
+
|
|
60
|
+
interface LastConnectedAccountStore {
|
|
61
|
+
lastConnectedAccount: LastConnectedAccount;
|
|
62
|
+
setLastConnectedAccount: (account: LastConnectedAccount) => void;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export const useLastConnectedAccount = create<LastConnectedAccountStore>(
|
|
66
|
+
(set) => ({
|
|
67
|
+
lastConnectedAccount: null,
|
|
68
|
+
setLastConnectedAccount: (account) =>
|
|
69
|
+
set({ lastConnectedAccount: account }),
|
|
70
|
+
}),
|
|
71
|
+
);
|
|
72
|
+
|
|
52
73
|
/**
|
|
53
|
-
*
|
|
54
74
|
* @param args When we provide args we want to return either account with corresponding chainType or default disconnected one
|
|
55
75
|
* @returns - Account result
|
|
56
76
|
*/
|
|
@@ -58,12 +78,8 @@ export const useAccount = (args?: UseAccountArgs): AccountResult => {
|
|
|
58
78
|
const bigmiConfig = useBigmiConfig();
|
|
59
79
|
const bigmiAccount = useAccountInternal({ config: bigmiConfig });
|
|
60
80
|
const wagmiAccount = useAccountInternal();
|
|
61
|
-
|
|
62
81
|
const { wallet } = useWallet();
|
|
63
|
-
|
|
64
|
-
// We create a simple variable from the args object
|
|
65
|
-
// to avoid re-render useMemo on every object reference change.
|
|
66
|
-
const hasChainTypeArgs = Boolean(args);
|
|
82
|
+
const { lastConnectedAccount } = useLastConnectedAccount();
|
|
67
83
|
|
|
68
84
|
return useMemo(() => {
|
|
69
85
|
const svm: Account = wallet?.adapter.publicKey
|
|
@@ -89,19 +105,52 @@ export const useAccount = (args?: UseAccountArgs): AccountResult => {
|
|
|
89
105
|
const evm: Account = { ...wagmiAccount, chainType: ChainType.EVM };
|
|
90
106
|
const utxo: Account = { ...bigmiAccount, chainType: ChainType.UTXO };
|
|
91
107
|
const accounts = [evm, svm, utxo];
|
|
92
|
-
const connectedAccounts =
|
|
108
|
+
const connectedAccounts = accounts.filter(
|
|
93
109
|
(account) => account.isConnected && account.address,
|
|
94
110
|
);
|
|
111
|
+
|
|
112
|
+
// If a chainType argument is provided, attempt to find a connected account with the matching chainType.
|
|
113
|
+
// If no matching account is found, fallback to the default account.
|
|
114
|
+
// If no chainType argument, selectedAccount should be used.
|
|
115
|
+
const selectedChainTypeAccount = args?.chainType
|
|
116
|
+
? connectedAccounts.find(
|
|
117
|
+
(account) => account.chainType === args?.chainType,
|
|
118
|
+
) || defaultAccount
|
|
119
|
+
: undefined;
|
|
120
|
+
|
|
121
|
+
// If lastConnectedAccount exists, attempt to find a connected account with a matching connector ID or name.
|
|
122
|
+
// If no matching account is found, fallback to the first connected account.
|
|
123
|
+
// If lastConnectedAccount is not present, simply select the first connected account.
|
|
124
|
+
const selectedAccount = lastConnectedAccount
|
|
125
|
+
? connectedAccounts.find((account) => {
|
|
126
|
+
const connectorIdMatch =
|
|
127
|
+
(lastConnectedAccount as Connector)?.id ===
|
|
128
|
+
(account.connector as Connector)?.id;
|
|
129
|
+
const connectorNameMatch =
|
|
130
|
+
!(lastConnectedAccount as Connector)?.id &&
|
|
131
|
+
(lastConnectedAccount as WalletAdapter)?.name ===
|
|
132
|
+
account.connector?.name;
|
|
133
|
+
return connectorIdMatch || connectorNameMatch;
|
|
134
|
+
}) || connectedAccounts[0]
|
|
135
|
+
: connectedAccounts[0];
|
|
136
|
+
|
|
95
137
|
return {
|
|
96
|
-
account:
|
|
97
|
-
accounts.find(
|
|
98
|
-
(account) =>
|
|
99
|
-
(!hasChainTypeArgs || account.chainType === args?.chainType) &&
|
|
100
|
-
account.isConnected &&
|
|
101
|
-
account.address,
|
|
102
|
-
) ?? defaultAccount,
|
|
138
|
+
account: selectedChainTypeAccount || selectedAccount || defaultAccount,
|
|
103
139
|
// We need to return only connected account list
|
|
104
140
|
accounts: connectedAccounts,
|
|
105
141
|
};
|
|
106
|
-
|
|
142
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
143
|
+
}, [
|
|
144
|
+
wallet,
|
|
145
|
+
wagmiAccount.connector?.uid,
|
|
146
|
+
wagmiAccount.connector?.id,
|
|
147
|
+
wagmiAccount.status,
|
|
148
|
+
wagmiAccount.address,
|
|
149
|
+
bigmiAccount.connector?.uid,
|
|
150
|
+
bigmiAccount.connector?.id,
|
|
151
|
+
bigmiAccount.status,
|
|
152
|
+
bigmiAccount.address,
|
|
153
|
+
args?.chainType,
|
|
154
|
+
lastConnectedAccount,
|
|
155
|
+
]);
|
|
107
156
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lifi/widget",
|
|
3
|
-
"version": "3.6.0-alpha.
|
|
3
|
+
"version": "3.6.0-alpha.3",
|
|
4
4
|
"description": "LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./_esm/index.js",
|
|
@@ -34,15 +34,15 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@emotion/react": "^11.13.3",
|
|
36
36
|
"@emotion/styled": "^11.13.0",
|
|
37
|
-
"@lifi/sdk": "^3.3.0-alpha.
|
|
38
|
-
"@lifi/wallet-management": "^3.2.0-alpha.
|
|
37
|
+
"@lifi/sdk": "^3.3.0-alpha.2",
|
|
38
|
+
"@lifi/wallet-management": "^3.2.0-alpha.3",
|
|
39
39
|
"@mui/icons-material": "^5.16.7",
|
|
40
40
|
"@mui/lab": "^5.0.0-alpha.173",
|
|
41
41
|
"@mui/material": "^5.16.7",
|
|
42
42
|
"@solana/wallet-adapter-base": "^0.9.23",
|
|
43
43
|
"@solana/wallet-adapter-react": "^0.15.35",
|
|
44
44
|
"@solana/web3.js": "^1.95.3",
|
|
45
|
-
"@tanstack/react-query": "^5.
|
|
45
|
+
"@tanstack/react-query": "^5.56.0",
|
|
46
46
|
"@tanstack/react-virtual": "^3.10.7",
|
|
47
47
|
"i18next": "^23.15.1",
|
|
48
48
|
"microdiff": "^1.4.0",
|
|
@@ -53,8 +53,8 @@
|
|
|
53
53
|
"react-intersection-observer": "^9.13.1",
|
|
54
54
|
"react-router-dom": "^6.26.2",
|
|
55
55
|
"uuid": "^10.0.0",
|
|
56
|
-
"viem": "^2.21.
|
|
57
|
-
"wagmi": "^2.12.
|
|
56
|
+
"viem": "^2.21.6",
|
|
57
|
+
"wagmi": "^2.12.11",
|
|
58
58
|
"zustand": "^4.5.5"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|
|
@@ -10,6 +10,7 @@ import { useConfig } from 'wagmi';
|
|
|
10
10
|
import { connect, disconnect, getAccount } from 'wagmi/actions';
|
|
11
11
|
import { ListItemButton } from '../../components/ListItemButton.js';
|
|
12
12
|
import { ListItemText } from '../../components/ListItemText.js';
|
|
13
|
+
import { useLastConnectedAccount } from '../../hooks/useAccount.js';
|
|
13
14
|
import { useNavigateBack } from '../../hooks/useNavigateBack.js';
|
|
14
15
|
import { useWidgetEvents } from '../../hooks/useWidgetEvents.js';
|
|
15
16
|
import { WidgetEvent } from '../../types/events.js';
|
|
@@ -26,6 +27,7 @@ export const EVMListItemButton = ({
|
|
|
26
27
|
const { navigateBack } = useNavigateBack();
|
|
27
28
|
const emitter = useWidgetEvents();
|
|
28
29
|
const config = useConfig();
|
|
30
|
+
const { setLastConnectedAccount } = useLastConnectedAccount();
|
|
29
31
|
|
|
30
32
|
const handleEVMConnect = async () => {
|
|
31
33
|
const identityCheckPassed = await isWalletInstalledAsync(
|
|
@@ -40,6 +42,7 @@ export const EVMListItemButton = ({
|
|
|
40
42
|
await disconnect(config, { connector: connectedAccount.connector });
|
|
41
43
|
}
|
|
42
44
|
const data = await connect(config, { connector });
|
|
45
|
+
setLastConnectedAccount(connector);
|
|
43
46
|
emitter.emit(WidgetEvent.WalletConnected, {
|
|
44
47
|
address: data.accounts[0],
|
|
45
48
|
chainId: data.chainId,
|
|
@@ -4,6 +4,7 @@ import type { Wallet } from '@solana/wallet-adapter-react';
|
|
|
4
4
|
import { useWallet } from '@solana/wallet-adapter-react';
|
|
5
5
|
import { ListItemButton } from '../../components/ListItemButton.js';
|
|
6
6
|
import { ListItemText } from '../../components/ListItemText.js';
|
|
7
|
+
import { useLastConnectedAccount } from '../../hooks/useAccount.js';
|
|
7
8
|
import { useNavigateBack } from '../../hooks/useNavigateBack.js';
|
|
8
9
|
import { useWidgetEvents } from '../../hooks/useWidgetEvents.js';
|
|
9
10
|
import { WidgetEvent } from '../../types/events.js';
|
|
@@ -16,6 +17,7 @@ export const SVMListItemButton = ({ wallet }: SVMListItemButtonProps) => {
|
|
|
16
17
|
const { navigateBack } = useNavigateBack();
|
|
17
18
|
const emitter = useWidgetEvents();
|
|
18
19
|
const { select, disconnect, connected } = useWallet();
|
|
20
|
+
const { setLastConnectedAccount } = useLastConnectedAccount();
|
|
19
21
|
|
|
20
22
|
const connect = async () => {
|
|
21
23
|
if (connected) {
|
|
@@ -25,6 +27,7 @@ export const SVMListItemButton = ({ wallet }: SVMListItemButtonProps) => {
|
|
|
25
27
|
// We use autoConnect on wallet selection
|
|
26
28
|
// await solanaConnect();
|
|
27
29
|
wallet.adapter.once('connect', (publicKey) => {
|
|
30
|
+
setLastConnectedAccount(wallet.adapter);
|
|
28
31
|
emitter.emit(WidgetEvent.WalletConnected, {
|
|
29
32
|
address: publicKey?.toString(),
|
|
30
33
|
chainId: ChainId.SOL,
|
|
@@ -10,6 +10,7 @@ import type { Connector } from 'wagmi';
|
|
|
10
10
|
import { connect, disconnect, getAccount } from 'wagmi/actions';
|
|
11
11
|
import { ListItemButton } from '../../components/ListItemButton.js';
|
|
12
12
|
import { ListItemText } from '../../components/ListItemText.js';
|
|
13
|
+
import { useLastConnectedAccount } from '../../hooks/useAccount.js';
|
|
13
14
|
import { useNavigateBack } from '../../hooks/useNavigateBack.js';
|
|
14
15
|
import { useWidgetEvents } from '../../hooks/useWidgetEvents.js';
|
|
15
16
|
import { WidgetEvent } from '../../types/events.js';
|
|
@@ -26,6 +27,7 @@ export const UTXOListItemButton = ({
|
|
|
26
27
|
const { navigateBack } = useNavigateBack();
|
|
27
28
|
const emitter = useWidgetEvents();
|
|
28
29
|
const config = useConfig();
|
|
30
|
+
const { setLastConnectedAccount } = useLastConnectedAccount();
|
|
29
31
|
|
|
30
32
|
const handleUTXOConnect = async () => {
|
|
31
33
|
const identityCheckPassed = await isWalletInstalledAsync(
|
|
@@ -40,6 +42,7 @@ export const UTXOListItemButton = ({
|
|
|
40
42
|
await disconnect(config, { connector: connectedAccount.connector });
|
|
41
43
|
}
|
|
42
44
|
const data = await connect(config, { connector });
|
|
45
|
+
setLastConnectedAccount(connector);
|
|
43
46
|
emitter.emit(WidgetEvent.WalletConnected, {
|
|
44
47
|
address: data.accounts[0],
|
|
45
48
|
chainId: data.chainId,
|