@rango-dev/widget-embedded 0.23.1-next.20 → 0.23.1-next.22

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.
@@ -1 +1 @@
1
- {"version":3,"file":"SelectSwapItemsPage.d.ts","sourceRoot":"","sources":["../../src/pages/SelectSwapItemsPage.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAcxC,UAAU,SAAS;IACjB,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC;CAChC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,qBAqGnD"}
1
+ {"version":3,"file":"SelectSwapItemsPage.d.ts","sourceRoot":"","sources":["../../src/pages/SelectSwapItemsPage.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAaxC,UAAU,SAAS;IACjB,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC;CAChC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,qBAiGnD"}
@@ -1,4 +1,5 @@
1
1
  import type { ConfigSlice } from './config';
2
+ import type { Balance } from '../../types';
2
3
  import type { BlockchainMeta, SwapperMeta, Token } from 'rango-sdk';
3
4
  import type { StateCreator } from 'zustand';
4
5
  type BlockchainOptions = {
@@ -8,10 +9,11 @@ type TokenOptions = {
8
9
  type: 'source' | 'destination';
9
10
  blockchain?: string;
10
11
  searchFor?: string;
12
+ getBalanceFor?: (token: Token) => Balance | null;
11
13
  };
12
14
  export type FetchStatus = 'loading' | 'success' | 'failed';
13
15
  export interface DataSlice {
14
- _blockchains: BlockchainMeta[];
16
+ _blockchainsMapByName: Map<string, BlockchainMeta>;
15
17
  _tokens: Token[];
16
18
  _popularTokens: Token[];
17
19
  _swappers: SwapperMeta[];
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/store/slices/data.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAQ5C,KAAK,iBAAiB,GAAG;IACvB,IAAI,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;CACjC,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC;IAE/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC3D,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,cAAc,EAAE,KAAK,EAAE,CAAC;IACxB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,iBAAiB,KAAK,cAAc,EAAE,CAAC;IAC/D,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,YAAY,KAAK,KAAK,EAAE,CAAC;IAC5C,QAAQ,EAAE,MAAM,WAAW,EAAE,CAAC;IAC9B,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG,aAAa,KAAK,OAAO,CAAC;IAEzE,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,CACxC,SAAS,GAAG,WAAW,EACvB;CAAE,EACF;CAAE,EACF,SAAS,CAkNT,CAAC"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/store/slices/data.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAS5C,KAAK,iBAAiB,GAAG;IACvB,IAAI,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;CACjC,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC;IAE/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,IAAI,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC3D,MAAM,WAAW,SAAS;IACxB,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnD,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,cAAc,EAAE,KAAK,EAAE,CAAC;IACxB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,iBAAiB,KAAK,cAAc,EAAE,CAAC;IAC/D,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,YAAY,KAAK,KAAK,EAAE,CAAC;IAC5C,QAAQ,EAAE,MAAM,WAAW,EAAE,CAAC;IAC9B,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG,aAAa,KAAK,OAAO,CAAC;IACzE,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,CACxC,SAAS,GAAG,WAAW,EACvB;CAAE,EACF;CAAE,EACF,SAAS,CA4PT,CAAC"}
@@ -1,7 +1,11 @@
1
+ import type { Token } from 'rango-sdk';
1
2
  export declare function removeDuplicateFrom<T>(array: T[]): T[];
2
3
  export declare function areEqual(array1: (number | string)[], array2: (number | string)[]): boolean;
3
4
  export declare function debounce(fn: Function, time: number): (...args: any) => void;
4
5
  export declare function containsText(text: string, searchText: string): boolean;
6
+ export declare function exactText(text: string, searchText: string): boolean;
7
+ export declare function startWithText(text: string, searchText: string): boolean;
5
8
  export declare const getContainer: () => HTMLElement;
6
9
  export declare const getExpanded: () => HTMLElement;
10
+ export declare function compareWithSearchFor(tokenA: Token, tokenB: Token, searchFor?: string): number;
7
11
  //# sourceMappingURL=common.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEtD;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAC3B,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,WAK5B;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAGvB,GAAG,UAS9B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAGtE;AAED,eAAO,MAAM,YAAY,mBACyC,CAAC;AAEnE,eAAO,MAAM,WAAW,mBAC8C,CAAC"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAWvC,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEtD;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAC3B,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,WAK5B;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAGvB,GAAG,UAS9B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAGtE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED,eAAO,MAAM,YAAY,mBACyC,CAAC;AAEnE,eAAO,MAAM,WAAW,mBAC8C,CAAC;AAsDvE,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,KAAK,EACb,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CA0GR"}
@@ -4,4 +4,5 @@ export declare function getBlockchainShortNameFor(blockchainName: string, blockc
4
4
  export declare function getSwapperDisplayName(swapperId: string, swappers: SwapperMeta[]): string | undefined;
5
5
  export declare function findToken(t: Asset, tokens: Token[]): Token | null;
6
6
  export declare function findBlockchain(name: string, blockchains: BlockchainMeta[]): BlockchainMeta | null;
7
+ export declare function isTokenNative(token: Token, blockchain: BlockchainMeta | undefined): boolean;
7
8
  //# sourceMappingURL=meta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/utils/meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAI3E,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,cAAc,EAAE,GAC5B,MAAM,GAAG,SAAS,CAGpB;AACD,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,cAAc,EAAE,GAC5B,MAAM,GAAG,SAAS,CAGpB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,EAAE,sBAGxB;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,gBAElD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,yBAEzE"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/utils/meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAI3E,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,cAAc,EAAE,GAC5B,MAAM,GAAG,SAAS,CAGpB;AACD,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,cAAc,EAAE,GAC5B,MAAM,GAAG,SAAS,CAGpB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,EAAE,sBAGxB;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,gBAElD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,yBAEzE;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,cAAc,GAAG,SAAS,WAiBvC"}
@@ -17,7 +17,7 @@ export declare const getUsdPrice: (blockchain: string, symbol: string, address:
17
17
  export declare const isExperimentalChain: (blockchains: BlockchainMeta[], wallet: string) => boolean;
18
18
  export declare const getKeplrCompatibleConnectedWallets: (selectableWallets: Wallet[]) => WalletType[];
19
19
  export declare function formatBalance(balance: Balance | null): Balance | null;
20
- export declare function sortTokens(tokens: Token[], getBalanceFor: (token: Token) => Balance | null, isTokenPinned: (token: Token) => boolean): Token[];
20
+ export declare function compareTokenBalance(token1Balance: Balance | null, token2Balance: Balance | null): number;
21
21
  export declare function areTokensEqual(tokenA: Pick<Token, 'blockchain' | 'symbol' | 'address'> | null, tokenB: Pick<Token, 'blockchain' | 'symbol' | 'address'> | null): boolean;
22
22
  export declare function sortWalletsBasedOnConnectionState(wallets: ModalWalletInfo[]): ModalWalletInfo[];
23
23
  export declare function getConciseAddress(address: string, maxChars?: number, ellipsisLength?: number): string;
@@ -1 +1 @@
1
- {"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/utils/wallets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,SAAS,EACT,aAAa,EACb,MAAM,EACP,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EACV,KAAK,EACL,OAAO,EACP,UAAU,EACV,WAAW,EACX,UAAU,EAEX,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAErE,OAAO,EAAE,WAAW,IAAI,YAAY,EAAE,MAAM,eAAe,CAAC;AAuB5D,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CAWvE;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,WAAW,EAC3C,aAAa,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,EAC/C,IAAI,EAAE,UAAU,EAAE,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,eAAe,EAAE,CA6BnB;AAED,wBAAgB,6BAA6B,CAC3C,oBAAoB,EAAE,cAAc,EAAE,GACrC,OAAO,EAAE,GAAG,IAAI,CAUlB;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,EACxB,mBAAmB,EAAE,OAAO,EAAE,GAAG,IAAI,EACrC,gBAAgB,EAAE,OAAO,GACxB,MAAM,EAAE,CAkFV;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,YA4B5D;AAID,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,eAAe,WAOjC;AAED,wBAAgB,cAAc,CAC5B,gBAAgB,EAAE,YAAY,EAC9B,MAAM,EAAE,KAAK,EAAE,GACd,YAAY,EAAE,CAuBhB;AAED,wBAAgB,yBAAyB,CACvC,eAAe,EAAE,eAAe,GAC/B,eAAe,CAEjB;AAED,eAAO,MAAM,uBAAuB,oBAAqB,eAAe,EAAE,WAwCzE,CAAC;AAQF,eAAO,MAAM,WAAW,eACV,MAAM,UACV,MAAM,WACL,MAAM,GAAG,IAAI,aACX,KAAK,EAAE,KACjB,MAAM,GAAG,IAQX,CAAC;AACF,eAAO,MAAM,mBAAmB,gBACjB,cAAc,EAAE,UACrB,MAAM,KACb,OAUF,CAAC;AAEF,eAAO,MAAM,kCAAkC,sBAC1B,MAAM,EAAE,KAC1B,UAAU,EAUZ,CAAC;AAEF,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAkBrE;AA8CD,wBAAgB,UAAU,CACxB,MAAM,EAAE,KAAK,EAAE,EACf,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,IAAI,EAC/C,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,WAczC;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,IAAI,EAC/D,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,IAAI,WAOhE;AAED,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,eAAe,EAAE,GACzB,eAAe,EAAE,CAcnB;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EAEf,QAAQ,SAAI,EAEZ,cAAc,SAAI,GACjB,MAAM,CAOR;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,gBAAgB,EAChB,UAAU,GACX,EAAE;IACD,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,GAAG,SAAS,CAMrB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAEvD;AAED,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,eAAe,EAAE,iBAmCpE;AAED,eAAO,MAAM,iBAAiB,qBACV,eAAe,EAAE,cACvB,MAAM,YAIjB,CAAC;AAEJ,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,eAAe,EAAE,UAE9D"}
1
+ {"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/utils/wallets.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rango-dev/widget-embedded",
3
- "version": "0.23.1-next.20",
3
+ "version": "0.23.1-next.22",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "source": "./src/index.ts",
@@ -25,7 +25,7 @@
25
25
  "@rango-dev/queue-manager-core": "^0.26.0",
26
26
  "@rango-dev/queue-manager-rango-preset": "^0.28.1-next.3",
27
27
  "@rango-dev/queue-manager-react": "^0.26.0",
28
- "@rango-dev/ui": "^0.29.1-next.15",
28
+ "@rango-dev/ui": "^0.29.1-next.16",
29
29
  "@rango-dev/wallets-react": "^0.14.1-next.1",
30
30
  "@rango-dev/wallets-shared": "^0.28.1-next.1",
31
31
  "bignumber.js": "^9.1.1",
@@ -1,4 +1,4 @@
1
- import { darkTheme, IconButton, styled } from '@rango-dev/ui';
1
+ import { css, darkTheme, IconButton, styled } from '@rango-dev/ui';
2
2
 
3
3
  export const HeaderButton = styled(IconButton, {
4
4
  width: '$24',
@@ -76,3 +76,21 @@ export const InProgressTransactionBadgeContainer = styled('div', {
76
76
  backgroundColor: '$background',
77
77
  borderRadius: '100%',
78
78
  });
79
+
80
+ export const rowStyles = css({
81
+ display: 'flex',
82
+ flexDirection: 'row',
83
+ justifyContent: 'center',
84
+ alignItems: 'center',
85
+ });
86
+
87
+ export const WalletImageContainer = styled('div', {
88
+ borderRadius: '100%',
89
+ border: '1.5px transparent solid',
90
+ '&:not(:first-child)': {
91
+ marginLeft: '-$6',
92
+ },
93
+ img: {
94
+ borderRadius: '100%',
95
+ },
96
+ });
@@ -70,7 +70,7 @@ function RefreshButton({ onClick }: { onClick: (() => void) | undefined }) {
70
70
  onTransitionEnd={() => setIsRefetched(false)}
71
71
  isRefetched={isRefetched}>
72
72
  <RefreshProgressButton
73
- size={24}
73
+ size={22}
74
74
  color={!onClick ? 'gray' : 'black'}
75
75
  progress={(elapsedTime / MAX_ELAPSED_TIME) * MAX_PERCENTAGE}
76
76
  />
@@ -1,17 +1,37 @@
1
1
  import type { PropTypes } from './HeaderButtons.types';
2
2
 
3
3
  import { i18n } from '@lingui/core';
4
- import { Tooltip, WalletIcon } from '@rango-dev/ui';
4
+ import { Image, Tooltip, WalletIcon } from '@rango-dev/ui';
5
5
  import React from 'react';
6
6
 
7
- import { ConnectedIcon, HeaderButton } from './HeaderButtons.styles';
7
+ import { useWalletList } from '../../hooks/useWalletList';
8
+
9
+ import {
10
+ ConnectedIcon,
11
+ HeaderButton,
12
+ rowStyles,
13
+ WalletImageContainer,
14
+ } from './HeaderButtons.styles';
8
15
 
9
16
  function WalletButton(props: PropTypes) {
17
+ const { list } = useWalletList({});
18
+ const connectedWallets = list.filter(
19
+ (wallet) => wallet.state === 'connected'
20
+ );
21
+ const content = !connectedWallets.length ? (
22
+ i18n.t('Connect Wallet')
23
+ ) : (
24
+ <div className={rowStyles()}>
25
+ {connectedWallets.map((wallet) => (
26
+ <WalletImageContainer key={wallet.title}>
27
+ <Image src={wallet.image} size={14} />
28
+ </WalletImageContainer>
29
+ ))}
30
+ </div>
31
+ );
32
+
10
33
  return (
11
- <Tooltip
12
- container={props.container}
13
- side="top"
14
- content={i18n.t('Connect Wallet')}>
34
+ <Tooltip container={props.container} side="bottom" content={content}>
15
35
  <HeaderButton variant="ghost" size="small" onClick={props.onClick}>
16
36
  {props.isConnected && <ConnectedIcon />}
17
37
  <WalletIcon size={18} color="black" />
@@ -0,0 +1,6 @@
1
+ export const MIN_LENGTH_SYMBOL_EXACT_MATCH = 1;
2
+ export const MIN_LENGTH_SYMBOL_START_WITH = 2;
3
+ export const MIN_LENGTH_SYMBOL_CONTAINS = 3;
4
+ export const MIN_LENGTH_TOKEN_NAME_EXACT_MATCH = 3;
5
+ export const MIN_LENGTH_TOKEN_NAME_CONTAINS = 3;
6
+ export const MIN_LENGTH_TOKEN_ADDRESS_CONTAINS = 4;
@@ -50,7 +50,7 @@ const themesList = [
50
50
  },
51
51
  {
52
52
  id: ThemeModeEnum.DARK,
53
- icon: <DarkModeIcon color="black" size={16} />,
53
+ icon: <DarkModeIcon color="black" size={14} />,
54
54
  tooltip: (
55
55
  <Typography size="xsmall" variant="body">
56
56
  {i18n.t('Dark')}
@@ -69,7 +69,7 @@ const themesList = [
69
69
  ];
70
70
 
71
71
  const getThemeIcon = (theme: ThemeMode) => {
72
- const iconProps: SvgIconProps = { color: 'gray', size: 12 };
72
+ const iconProps: SvgIconProps = { color: 'gray', size: 14 };
73
73
 
74
74
  switch (theme) {
75
75
  case 'auto':
@@ -156,7 +156,7 @@ export function SettingsLists() {
156
156
  </>
157
157
  ),
158
158
  onClick: () => navigate(navigationRoutes.bridges),
159
- start: <BridgeIcon color="gray" size={12} />,
159
+ start: <BridgeIcon color="gray" size={14} />,
160
160
  };
161
161
 
162
162
  const exchangeItem = {
@@ -173,7 +173,7 @@ export function SettingsLists() {
173
173
  <ChevronRightIcon color="gray" />
174
174
  </>
175
175
  ),
176
- start: <ExchangeIcon color="gray" size={12} />,
176
+ start: <ExchangeIcon color="gray" size={14} />,
177
177
  onClick: () => navigate(navigationRoutes.exchanges),
178
178
  };
179
179
 
@@ -184,7 +184,7 @@ export function SettingsLists() {
184
184
  {i18n.t('Language')}
185
185
  </Typography>
186
186
  ),
187
- start: <LanguageIcon color="gray" size={12} />,
187
+ start: <LanguageIcon color="gray" size={14} />,
188
188
  end: <ChevronRightIcon color="gray" />,
189
189
  onClick: () => navigate(navigationRoutes.languages),
190
190
  };
@@ -214,7 +214,7 @@ export function SettingsLists() {
214
214
  </Tooltip>
215
215
  </>
216
216
  ),
217
- start: <DoneIcon color="gray" size={12} />,
217
+ start: <DoneIcon color="gray" size={14} />,
218
218
  end: <Switch checked={infiniteApprove} />,
219
219
  onClick: toggleInfiniteApprove,
220
220
  };
@@ -14,7 +14,6 @@ import { useNavigateBack } from '../hooks/useNavigateBack';
14
14
  import { useAppStore } from '../store/AppStore';
15
15
  import { useQuoteStore } from '../store/quote';
16
16
  import { useWalletsStore } from '../store/wallets';
17
- import { sortTokens } from '../utils/wallets';
18
17
 
19
18
  interface PropTypes {
20
19
  type: 'source' | 'destination';
@@ -34,7 +33,6 @@ export function SelectSwapItemsPage(props: PropTypes) {
34
33
  } = useQuoteStore();
35
34
  const getBalanceFor = useWalletsStore.use.getBalanceFor();
36
35
  const [searchedFor, setSearchedFor] = useState<string>('');
37
- const { isTokenPinned } = useAppStore();
38
36
 
39
37
  const selectedBlockchain = type === 'source' ? fromBlockchain : toBlockchain;
40
38
  const selectedBlockchainName = selectedBlockchain?.name ?? '';
@@ -47,12 +45,9 @@ export function SelectSwapItemsPage(props: PropTypes) {
47
45
  type,
48
46
  blockchain: selectedBlockchainName,
49
47
  searchFor: searchedFor,
48
+ getBalanceFor: getBalanceFor,
50
49
  });
51
50
 
52
- const checkIsTokenPinned = (token: Token) => isTokenPinned(token, type);
53
-
54
- const tokensList = sortTokens(tokens, getBalanceFor, checkIsTokenPinned);
55
-
56
51
  const updateBlockchain = (blockchain: BlockchainMeta) => {
57
52
  if (type === 'source') {
58
53
  setFromBlockchain(blockchain);
@@ -101,7 +96,7 @@ export function SelectSwapItemsPage(props: PropTypes) {
101
96
  />
102
97
  <Divider size={16} />
103
98
  <TokenList
104
- list={tokensList}
99
+ list={tokens}
105
100
  selectedBlockchain={selectedBlockchainName}
106
101
  searchedFor={searchedFor}
107
102
  type={type}
@@ -1,14 +1,16 @@
1
1
  // We keep all the received data from server in this slice
2
2
 
3
3
  import type { ConfigSlice } from './config';
4
+ import type { Balance } from '../../types';
4
5
  import type { BlockchainMeta, SwapperMeta, Token } from 'rango-sdk';
5
6
  import type { StateCreator } from 'zustand';
6
7
 
7
8
  import { httpService as sdk } from '../../services/httpService';
8
- import { containsText } from '../../utils/common';
9
+ import { compareWithSearchFor, containsText } from '../../utils/common';
9
10
  import { isTokenExcludedInConfig } from '../../utils/configs';
11
+ import { isTokenNative } from '../../utils/meta';
10
12
  import { sortLiquiditySourcesByGroupTitle } from '../../utils/settings';
11
- import { areTokensEqual } from '../../utils/wallets';
13
+ import { areTokensEqual, compareTokenBalance } from '../../utils/wallets';
12
14
 
13
15
  type BlockchainOptions = {
14
16
  type?: 'source' | 'destination';
@@ -19,10 +21,12 @@ type TokenOptions = {
19
21
  // filter by an specific blockchain
20
22
  blockchain?: string;
21
23
  searchFor?: string;
24
+ getBalanceFor?: (token: Token) => Balance | null;
22
25
  };
26
+
23
27
  export type FetchStatus = 'loading' | 'success' | 'failed';
24
28
  export interface DataSlice {
25
- _blockchains: BlockchainMeta[];
29
+ _blockchainsMapByName: Map<string, BlockchainMeta>;
26
30
  _tokens: Token[];
27
31
  _popularTokens: Token[];
28
32
  _swappers: SwapperMeta[];
@@ -31,7 +35,6 @@ export interface DataSlice {
31
35
  tokens: (options?: TokenOptions) => Token[];
32
36
  swappers: () => SwapperMeta[];
33
37
  isTokenPinned: (token: Token, type: 'source' | 'destination') => boolean;
34
-
35
38
  fetch: () => Promise<void>;
36
39
  }
37
40
 
@@ -42,14 +45,17 @@ export const createDataSlice: StateCreator<
42
45
  DataSlice
43
46
  > = (set, get) => ({
44
47
  // State
45
- _blockchains: [],
48
+ _blockchainsMapByName: new Map<string, BlockchainMeta>(),
46
49
  _tokens: [],
47
50
  _popularTokens: [],
48
51
  _swappers: [],
49
52
  fetchStatus: 'loading',
50
53
  // Selectors
51
54
  blockchains: (options) => {
52
- const blockchainsFromState = get()._blockchains;
55
+ const blockchainsMapByName = get()._blockchainsMapByName;
56
+ const blockchainsFromState = Array.from(
57
+ blockchainsMapByName?.values() || []
58
+ );
53
59
 
54
60
  if (!options || !options?.type) {
55
61
  return blockchainsFromState;
@@ -76,6 +82,7 @@ export const createDataSlice: StateCreator<
76
82
  },
77
83
  tokens: (options) => {
78
84
  const tokensFromState = get()._tokens;
85
+ const blockchainsMapByName = get()._blockchainsMapByName;
79
86
 
80
87
  if (!options || !options?.type) {
81
88
  return tokensFromState;
@@ -127,29 +134,62 @@ export const createDataSlice: StateCreator<
127
134
 
128
135
  return true;
129
136
  })
130
- .sort((a, b) => {
131
- // Check pinned tokens
132
- if (get().isTokenPinned(a, options.type)) {
133
- return -1;
137
+ .sort((tokenA, tokenB) => {
138
+ //1. sort by pinned tokens
139
+ const isToken1Pinned = get().isTokenPinned(tokenA, options.type);
140
+ const isToken2Pinned = get().isTokenPinned(tokenB, options.type);
141
+ if (isToken1Pinned !== isToken2Pinned) {
142
+ return isToken1Pinned ? -1 : 1;
143
+ }
144
+
145
+ //2. sort by balance
146
+ if (options.getBalanceFor) {
147
+ const token1Balance = options.getBalanceFor(tokenA);
148
+ const token2Balance = options.getBalanceFor(tokenB);
149
+ const balanceCompare = compareTokenBalance(
150
+ token1Balance,
151
+ token2Balance
152
+ );
153
+ if (balanceCompare !== 0) {
154
+ return balanceCompare;
155
+ }
134
156
  }
135
- if (get().isTokenPinned(b, options.type)) {
136
- return 1;
157
+
158
+ //3. sort by token popularity
159
+ if (tokenA.isPopular !== tokenB.isPopular) {
160
+ return tokenA.isPopular ? -1 : 1;
137
161
  }
138
162
 
139
- // Check secondary coins
140
- if (a.isSecondaryCoin) {
141
- return 1;
163
+ //4. sort by search phrase
164
+ if (options.searchFor) {
165
+ const symbolSearchForCompare = compareWithSearchFor(
166
+ tokenA,
167
+ tokenB,
168
+ options.searchFor
169
+ );
170
+ if (symbolSearchForCompare) {
171
+ return symbolSearchForCompare;
172
+ }
142
173
  }
143
- if (b.isSecondaryCoin) {
144
- return -1;
174
+
175
+ const blockChainA = blockchainsMapByName.get(tokenA.blockchain);
176
+ const blockChainB = blockchainsMapByName.get(tokenB.blockchain);
177
+
178
+ //5. sort by native token
179
+ const isNativeTokenA = isTokenNative(tokenA, blockChainA);
180
+ const isNativeTokenB = isTokenNative(tokenB, blockChainB);
181
+ if (isNativeTokenA !== isNativeTokenB) {
182
+ return isNativeTokenA ? -1 : 1;
145
183
  }
146
184
 
147
- // Check it has an address or not.
148
- if (!a.address && b.address) {
149
- return -1;
185
+ //6. sort by token isSecondary
186
+ if (tokenA.isSecondaryCoin !== tokenB.isSecondaryCoin) {
187
+ return tokenA.isSecondaryCoin ? 1 : -1;
150
188
  }
151
- if (a.address && !b.address) {
152
- return 1;
189
+
190
+ //7. sort by blockchain order
191
+ if (!!blockChainA && !!blockChainB) {
192
+ return blockChainA.sort - blockChainB.sort;
153
193
  }
154
194
 
155
195
  return 0;
@@ -213,7 +253,11 @@ export const createDataSlice: StateCreator<
213
253
  });
214
254
 
215
255
  set({ fetchStatus: 'success' });
216
- const blockchains: BlockchainMeta[] = [];
256
+ const blockchainsMapByName: Map<string, BlockchainMeta> = new Map<
257
+ string,
258
+ BlockchainMeta
259
+ >();
260
+
217
261
  const tokens: Token[] = [];
218
262
  const popularTokens: Token[] = response.popularTokens;
219
263
  const swappers: SwapperMeta[] = response.swappers;
@@ -226,20 +270,21 @@ export const createDataSlice: StateCreator<
226
270
  tokens.push(token);
227
271
  });
228
272
 
229
- response.blockchains.forEach((blockchain) => {
273
+ const sortedBlockchain = response.blockchains.sort(
274
+ (a, b) => a.sort - b.sort
275
+ );
276
+
277
+ sortedBlockchain.forEach((blockchain) => {
230
278
  if (
231
279
  blockchain.enabled &&
232
280
  blockchainsWithAtLeastOneToken.has(blockchain.name)
233
281
  ) {
234
- blockchains.push(blockchain);
282
+ blockchainsMapByName.set(blockchain.name, blockchain);
235
283
  }
236
284
  });
237
285
 
238
- // Sort
239
- blockchains.sort((a, b) => a.sort - b.sort);
240
-
241
286
  set({
242
- _blockchains: blockchains,
287
+ _blockchainsMapByName: blockchainsMapByName,
243
288
  _tokens: tokens,
244
289
  _popularTokens: popularTokens,
245
290
  _swappers: swappers,