@rango-dev/widget-embedded 0.20.1-next.21 → 0.20.1-next.23

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.
Files changed (113) hide show
  1. package/dist/QueueManager.d.ts.map +1 -1
  2. package/dist/components/AppRouter.d.ts.map +1 -1
  3. package/dist/components/AppRoutes.d.ts.map +1 -1
  4. package/dist/components/ConfirmWalletsModal/ConfirmWallets.styles.d.ts +3 -3
  5. package/dist/components/ConfirmWalletsModal/WalletList.d.ts.map +1 -1
  6. package/dist/components/Layout/Layout.d.ts.map +1 -1
  7. package/dist/components/NotificationContent/NotificationContent.d.ts.map +1 -1
  8. package/dist/components/Quote/Quote.styles.d.ts +2 -2
  9. package/dist/components/QuoteWarningsAndErrors/HighValueLossWarningModal.d.ts +1 -0
  10. package/dist/components/QuoteWarningsAndErrors/HighValueLossWarningModal.d.ts.map +1 -1
  11. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.d.ts.map +1 -1
  12. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.d.ts +1 -0
  13. package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.d.ts.map +1 -1
  14. package/dist/components/QuoteWarningsAndErrors/SlippageWariningModal.d.ts +1 -0
  15. package/dist/components/QuoteWarningsAndErrors/SlippageWariningModal.d.ts.map +1 -1
  16. package/dist/components/QuoteWarningsAndErrors/UnknownPriceWarningModal.d.ts +1 -0
  17. package/dist/components/QuoteWarningsAndErrors/UnknownPriceWarningModal.d.ts.map +1 -1
  18. package/dist/components/SwapDetails/SwapDetails.d.ts.map +1 -1
  19. package/dist/components/SwapDetailsModal/SwapDetailsModal.WalletState.d.ts.map +1 -1
  20. package/dist/components/SwapDetailsModal/SwapDetailsModal.d.ts.map +1 -1
  21. package/dist/components/SwapDetailsModal/SwapDetailsModal.types.d.ts +2 -0
  22. package/dist/components/SwapDetailsModal/SwapDetailsModal.types.d.ts.map +1 -1
  23. package/dist/components/common/ActivateTabAlert/ActivateTabAlert.d.ts +4 -0
  24. package/dist/components/common/ActivateTabAlert/ActivateTabAlert.d.ts.map +1 -0
  25. package/dist/components/common/ActivateTabAlert/ActivateTabAlert.types.d.ts +4 -0
  26. package/dist/components/common/ActivateTabAlert/ActivateTabAlert.types.d.ts.map +1 -0
  27. package/dist/components/common/ActivateTabAlert/index.d.ts +2 -0
  28. package/dist/components/common/ActivateTabAlert/index.d.ts.map +1 -0
  29. package/dist/components/common/ActivateTabModal/ActivateTabModal.d.ts +4 -0
  30. package/dist/components/common/ActivateTabModal/ActivateTabModal.d.ts.map +1 -0
  31. package/dist/components/common/ActivateTabModal/ActivateTabModal.types.d.ts +6 -0
  32. package/dist/components/common/ActivateTabModal/ActivateTabModal.types.d.ts.map +1 -0
  33. package/dist/components/common/ActivateTabModal/index.d.ts +2 -0
  34. package/dist/components/common/ActivateTabModal/index.d.ts.map +1 -0
  35. package/dist/constants/searchParams.d.ts +6 -6
  36. package/dist/constants/searchParams.d.ts.map +1 -1
  37. package/dist/containers/Widget/Widget.d.ts.map +1 -1
  38. package/dist/containers/WidgetInfo/WidgetInfo.d.ts.map +1 -1
  39. package/dist/containers/WidgetInfo/WidgetInfo.types.d.ts +2 -0
  40. package/dist/containers/WidgetInfo/WidgetInfo.types.d.ts.map +1 -1
  41. package/dist/hooks/useSwapInput.d.ts.map +1 -1
  42. package/dist/hooks/useSyncStoresWithConfig.d.ts.map +1 -1
  43. package/dist/hooks/useSyncUrlAndStore/index.d.ts +2 -0
  44. package/dist/hooks/useSyncUrlAndStore/index.d.ts.map +1 -0
  45. package/dist/hooks/useSyncUrlAndStore/useSyncUrlAndStore.d.ts +2 -0
  46. package/dist/hooks/useSyncUrlAndStore/useSyncUrlAndStore.d.ts.map +1 -0
  47. package/dist/hooks/useSyncUrlAndStore/useSyncUrlAndStore.helpers.d.ts +4 -0
  48. package/dist/hooks/useSyncUrlAndStore/useSyncUrlAndStore.helpers.d.ts.map +1 -0
  49. package/dist/index.js +2 -2
  50. package/dist/index.js.map +4 -4
  51. package/dist/libs/tabManager/index.d.ts +3 -0
  52. package/dist/libs/tabManager/index.d.ts.map +1 -0
  53. package/dist/libs/tabManager/tabManager.constants.d.ts +4 -0
  54. package/dist/libs/tabManager/tabManager.constants.d.ts.map +1 -0
  55. package/dist/libs/tabManager/tabManager.d.ts +63 -0
  56. package/dist/libs/tabManager/tabManager.d.ts.map +1 -0
  57. package/dist/libs/tabManager/tabManager.types.d.ts +29 -0
  58. package/dist/libs/tabManager/tabManager.types.d.ts.map +1 -0
  59. package/dist/pages/ConfirmSwapPage.d.ts.map +1 -1
  60. package/dist/pages/HistoryPage.d.ts.map +1 -1
  61. package/dist/pages/Home.d.ts.map +1 -1
  62. package/dist/pages/SwapDetailsPage.d.ts.map +1 -1
  63. package/dist/pages/WalletsPage.d.ts.map +1 -1
  64. package/dist/store/ui.d.ts +12 -10
  65. package/dist/store/ui.d.ts.map +1 -1
  66. package/dist/utils/quote.d.ts +0 -1
  67. package/dist/utils/quote.d.ts.map +1 -1
  68. package/package.json +4 -4
  69. package/src/QueueManager.tsx +4 -1
  70. package/src/components/AppRouter.tsx +1 -8
  71. package/src/components/AppRoutes.tsx +11 -0
  72. package/src/components/ConfirmWalletsModal/WalletList.tsx +3 -0
  73. package/src/components/Layout/Layout.tsx +37 -8
  74. package/src/components/NotificationContent/NotificationContent.tsx +0 -3
  75. package/src/components/QuoteWarningsAndErrors/HighValueLossWarningModal.tsx +3 -1
  76. package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.tsx +3 -1
  77. package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.ts +1 -0
  78. package/src/components/QuoteWarningsAndErrors/SlippageWariningModal.tsx +3 -1
  79. package/src/components/QuoteWarningsAndErrors/UnknownPriceWarningModal.tsx +3 -1
  80. package/src/components/SwapDetails/SwapDetails.tsx +3 -0
  81. package/src/components/SwapDetailsModal/SwapDetailsModal.WalletState.tsx +9 -1
  82. package/src/components/SwapDetailsModal/SwapDetailsModal.tsx +10 -2
  83. package/src/components/SwapDetailsModal/SwapDetailsModal.types.ts +2 -0
  84. package/src/components/common/ActivateTabAlert/ActivateTabAlert.tsx +26 -0
  85. package/src/components/common/ActivateTabAlert/ActivateTabAlert.types.ts +3 -0
  86. package/src/components/common/ActivateTabAlert/index.ts +1 -0
  87. package/src/components/common/ActivateTabModal/ActivateTabModal.tsx +31 -0
  88. package/src/components/common/ActivateTabModal/ActivateTabModal.types.ts +5 -0
  89. package/src/components/common/ActivateTabModal/index.ts +1 -0
  90. package/src/constants/searchParams.ts +6 -6
  91. package/src/containers/Wallets/Wallets.tsx +3 -3
  92. package/src/containers/Widget/Widget.tsx +6 -1
  93. package/src/containers/WidgetInfo/WidgetInfo.tsx +5 -1
  94. package/src/containers/WidgetInfo/WidgetInfo.types.ts +2 -0
  95. package/src/hooks/useSwapInput.ts +6 -1
  96. package/src/hooks/useSyncStoresWithConfig.ts +3 -17
  97. package/src/hooks/useSyncUrlAndStore/index.ts +1 -0
  98. package/src/hooks/useSyncUrlAndStore/useSyncUrlAndStore.helpers.ts +35 -0
  99. package/src/hooks/useSyncUrlAndStore/useSyncUrlAndStore.ts +135 -0
  100. package/src/libs/tabManager/index.ts +2 -0
  101. package/src/libs/tabManager/tabManager.constants.ts +3 -0
  102. package/src/libs/tabManager/tabManager.ts +222 -0
  103. package/src/libs/tabManager/tabManager.types.ts +28 -0
  104. package/src/pages/ConfirmSwapPage.tsx +6 -5
  105. package/src/pages/HistoryPage.tsx +1 -6
  106. package/src/pages/Home.tsx +12 -6
  107. package/src/pages/SwapDetailsPage.tsx +21 -7
  108. package/src/pages/WalletsPage.tsx +3 -0
  109. package/src/store/ui.ts +39 -11
  110. package/src/utils/quote.ts +0 -27
  111. package/dist/components/UpdateUrl.d.ts +0 -2
  112. package/dist/components/UpdateUrl.d.ts.map +0 -1
  113. package/src/components/UpdateUrl.tsx +0 -158
@@ -0,0 +1,28 @@
1
+ export type ID = number;
2
+
3
+ type PingMessage = { name: 'ping'; pingAt: number };
4
+ type PongMessage = { name: 'pong' };
5
+ type ForceClaimMessage = {
6
+ name: 'force-claim';
7
+ candidateId: ID;
8
+ };
9
+ type ForceReleaseMessage = { name: 'force-release'; candidateId: ID };
10
+
11
+ export type Message =
12
+ | PingMessage
13
+ | PongMessage
14
+ | ForceClaimMessage
15
+ | ForceReleaseMessage;
16
+
17
+ export type Events = {
18
+ // Initially attempt to verify if the tab can be activated.
19
+ onInit?: () => void;
20
+ onClaim?: () => void;
21
+ onRelease?: () => void;
22
+ };
23
+
24
+ export interface TabManagerInterface {
25
+ forceClaim: () => void;
26
+ isClaimed: () => boolean;
27
+ destroy: () => void;
28
+ }
@@ -20,7 +20,7 @@ import {
20
20
  } from '@rango-dev/ui';
21
21
  import React, { useEffect, useLayoutEffect, useRef, useState } from 'react';
22
22
  import { flushSync } from 'react-dom';
23
- import { useNavigate } from 'react-router-dom';
23
+ import { useLocation, useNavigate } from 'react-router-dom';
24
24
 
25
25
  import { getRequiredWallets } from '../components/ConfirmWalletsModal/ConfirmWallets.helpers';
26
26
  import { ConfirmWalletsModal } from '../components/ConfirmWalletsModal/ConfirmWalletsModal';
@@ -81,12 +81,13 @@ export function ConfirmSwapPage() {
81
81
  quoteWarningsConfirmed,
82
82
  } = useQuoteStore();
83
83
  const navigate = useNavigate();
84
+ const location = useLocation();
84
85
  const [dbErrorMessage, setDbErrorMessage] = useState<string>('');
85
86
 
86
87
  const { connectedWallets } = useWalletsStore();
87
88
  const showWalletsOnInit = !quoteWalletsConfirmed;
88
89
  const [showWallets, setShowWallets] = useState(false);
89
- const setSelectedSwap = useUiStore.use.setSelectedSwap();
90
+ const { isActiveTab } = useUiStore();
90
91
  const disabledLiquiditySources = useAppStore().disabledLiquiditySources;
91
92
  const prevDisabledLiquiditySources = useRef(disabledLiquiditySources);
92
93
  const { manager } = useManager();
@@ -121,7 +122,6 @@ export function ConfirmSwapPage() {
121
122
  { swapDetails: confirmSwapResult.swap },
122
123
  { id: confirmSwapResult.swap.requestId }
123
124
  );
124
- setSelectedSwap(confirmSwapResult.swap.requestId);
125
125
 
126
126
  const swap_url = `../${navigationRoutes.swaps}/${confirmSwapResult.swap.requestId}`;
127
127
  navigate(swap_url, {
@@ -252,7 +252,7 @@ export function ConfirmSwapPage() {
252
252
 
253
253
  useLayoutEffect(() => {
254
254
  if (!quote) {
255
- navigate(`../`);
255
+ navigate(`../${location.search}`);
256
256
  }
257
257
  }, []);
258
258
 
@@ -284,6 +284,7 @@ export function ConfirmSwapPage() {
284
284
  loading={fetchingConfirmationQuote}
285
285
  refetchQuote={onRefresh}
286
286
  showWarningModal={showQuoteWarningModal}
287
+ confirmationDisabled={!isActiveTab}
287
288
  onOpenWarningModal={() => setShowQuoteWarningModal(true)}
288
289
  onCloseWarningModal={() => setShowQuoteWarningModal(false)}
289
290
  onConfirmWarningModal={async () => {
@@ -326,7 +327,7 @@ export function ConfirmSwapPage() {
326
327
  size="large"
327
328
  fullWidth
328
329
  loading={fetchingConfirmationQuote}
329
- disabled={!!confirmSwapResult.error}
330
+ disabled={!!confirmSwapResult.error || !isActiveTab}
330
331
  onClick={onStartConfirmSwap}>
331
332
  {i18n.t('Start Swap')}
332
333
  </Button>
@@ -10,7 +10,6 @@ import { Layout, PageContainer } from '../components/Layout';
10
10
  import { SearchInput } from '../components/SearchInput';
11
11
  import { SwapsGroup } from '../components/SwapsGroup';
12
12
  import { NotFoundContainer } from '../components/SwapsGroup/SwapsGroup.styles';
13
- import { useUiStore } from '../store/ui';
14
13
  import { groupSwapsByDate } from '../utils/date';
15
14
  import { containsText } from '../utils/numbers';
16
15
  import { getPendingSwaps } from '../utils/queue';
@@ -38,7 +37,6 @@ const isStepContainsText = (steps: PendingSwapStep[], value: string) => {
38
37
  };
39
38
 
40
39
  export function HistoryPage() {
41
- const setSelectedSwap = useUiStore.use.setSelectedSwap();
42
40
  const navigate = useNavigate();
43
41
  const { manager, state } = useManager();
44
42
  const list: PendingSwap[] = getPendingSwaps(manager).map(({ swap }) => swap);
@@ -94,10 +92,7 @@ export function HistoryPage() {
94
92
  {!isEmpty && (
95
93
  <SwapsGroup
96
94
  list={filteredList}
97
- onSwapClick={(requestId) => {
98
- setSelectedSwap(requestId);
99
- navigate(requestId);
100
- }}
95
+ onSwapClick={navigate}
101
96
  groupBy={groupSwapsByDate}
102
97
  isLoading={loading}
103
98
  />
@@ -43,7 +43,7 @@ export function Home() {
43
43
  const navigate = useNavigate();
44
44
  const {
45
45
  fetch: fetchQuote,
46
- loading: fetchingQuote,
46
+ loading,
47
47
  error: quoteError,
48
48
  warning: quoteWarning,
49
49
  } = useSwapInput();
@@ -65,7 +65,7 @@ export function Home() {
65
65
  const fetchMetaStatus = useAppStore().fetchStatus;
66
66
 
67
67
  const { connectedWallets, getBalanceFor } = useWalletsStore();
68
- const setCurrentPage = useUiStore.use.setCurrentPage();
68
+ const { isActiveTab } = useUiStore();
69
69
  const [showQuoteWarningModal, setShowQuoteWarningModal] = useState(false);
70
70
  const fetchingBalance =
71
71
  !!fromBlockchain &&
@@ -87,7 +87,7 @@ export function Home() {
87
87
 
88
88
  const swapButtonState = getSwapButtonState({
89
89
  fetchMetaStatus,
90
- fetchingQuote,
90
+ fetchingQuote: loading,
91
91
  inputAmount,
92
92
  quote,
93
93
  anyWalletConnected: connectedWallets.length > 0,
@@ -106,10 +106,15 @@ export function Home() {
106
106
  ? numberToString(fromTokenBalance?.amount, fromTokenBalance?.decimals)
107
107
  : '0';
108
108
 
109
+ const fetchingQuote =
110
+ fetchMetaStatus === 'success' &&
111
+ !!inputAmount &&
112
+ !!fromToken &&
113
+ !!toToken &&
114
+ loading;
115
+
109
116
  useEffect(() => {
110
- setCurrentPage(navigationRoutes.home);
111
117
  resetQuoteWallets();
112
- return setCurrentPage.bind(null, '');
113
118
  }, []);
114
119
 
115
120
  const percentageChange =
@@ -125,7 +130,7 @@ export function Home() {
125
130
  <Button
126
131
  type="primary"
127
132
  size="large"
128
- disabled={swapButtonState.disabled}
133
+ disabled={swapButtonState.disabled || !isActiveTab}
129
134
  prefix={
130
135
  swapButtonState.action === 'confirm-warning' && <WarningIcon />
131
136
  }
@@ -268,6 +273,7 @@ export function Home() {
268
273
  loading={fetchingQuote}
269
274
  refetchQuote={fetchQuote}
270
275
  showWarningModal={showQuoteWarningModal}
276
+ confirmationDisabled={!isActiveTab}
271
277
  onOpenWarningModal={() => setShowQuoteWarningModal(true)}
272
278
  onCloseWarningModal={() => setShowQuoteWarningModal(false)}
273
279
  onConfirmWarningModal={() => {
@@ -1,27 +1,41 @@
1
+ import { i18n } from '@lingui/core';
1
2
  import { cancelSwap } from '@rango-dev/queue-manager-rango-preset';
2
3
  import { useManager } from '@rango-dev/queue-manager-react';
4
+ import { Alert } from '@rango-dev/ui';
3
5
  import React from 'react';
6
+ import { useParams } from 'react-router-dom';
4
7
 
5
8
  import { SwapDetails } from '../components/SwapDetails';
6
9
  import { SwapDetailsPlaceholder } from '../components/SwapDetails/SwapDetails.Placeholder';
7
10
  import { useNavigateBack } from '../hooks/useNavigateBack';
8
11
  import { useAppStore } from '../store/AppStore';
9
- import { useUiStore } from '../store/ui';
10
12
  import { getPendingSwaps } from '../utils/queue';
11
13
 
12
14
  export function SwapDetailsPage() {
13
15
  const { manager, state } = useManager();
14
16
  const loading = !state.loadedFromPersistor;
15
17
  const pendingSwaps = getPendingSwaps(manager);
16
- const requestId = useUiStore.use.selectedSwapRequestId();
18
+ const { requestId } = useParams<{ requestId: string }>();
17
19
  const navigateBack = useNavigateBack();
18
20
  const { fetchStatus: fetchMetaStatus } = useAppStore();
19
21
 
22
+ if (!requestId) {
23
+ return (
24
+ <Alert
25
+ containerStyles={{ margin: '20px' }}
26
+ type="error"
27
+ title={i18n.t(
28
+ 'The request ID is necessary to display the swap details.'
29
+ )}
30
+ />
31
+ );
32
+ }
33
+
20
34
  const showSkeleton = loading || fetchMetaStatus === 'loading';
21
35
 
22
- const selectedSwap = pendingSwaps.find(
23
- ({ swap }) => swap.requestId === requestId
24
- );
36
+ const selectedSwap = requestId
37
+ ? pendingSwaps.find(({ swap }) => swap.requestId === requestId)
38
+ : undefined;
25
39
 
26
40
  const onCancel = () => {
27
41
  if (selectedSwap?.id) {
@@ -47,7 +61,7 @@ export function SwapDetailsPage() {
47
61
  if (!swap || showSkeleton) {
48
62
  return (
49
63
  <SwapDetailsPlaceholder
50
- requestId={requestId || ''}
64
+ requestId={requestId}
51
65
  showSkeleton={showSkeleton}
52
66
  />
53
67
  );
@@ -56,7 +70,7 @@ export function SwapDetailsPage() {
56
70
  return (
57
71
  <SwapDetails
58
72
  swap={swap}
59
- requestId={requestId || ''}
73
+ requestId={requestId}
60
74
  onCancel={onCancel}
61
75
  onDelete={onDelete}
62
76
  />
@@ -8,6 +8,7 @@ import { Layout, PageContainer } from '../components/Layout';
8
8
  import { WalletModal } from '../components/WalletModal';
9
9
  import { useWalletList } from '../hooks/useWalletList';
10
10
  import { useAppStore } from '../store/AppStore';
11
+ import { useUiStore } from '../store/ui';
11
12
  import { getContainer } from '../utils/common';
12
13
 
13
14
  const ListContainer = styled('div', {
@@ -32,6 +33,7 @@ export function WalletsPage() {
32
33
  const [openModal, setOpenModal] = useState(false);
33
34
  const [selectedWalletType, setSelectedWalletType] = useState<WalletType>('');
34
35
  let modalTimerId: ReturnType<typeof setTimeout> | null = null;
36
+ const isActiveTab = useUiStore.use.isActiveTab();
35
37
 
36
38
  const { list, handleClick, error } = useWalletList({
37
39
  config,
@@ -79,6 +81,7 @@ export function WalletsPage() {
79
81
  void handleClick(type);
80
82
  }}
81
83
  isLoading={fetchMetaStatus === 'loading'}
84
+ disabled={!isActiveTab}
82
85
  />
83
86
  );
84
87
  })}
package/src/store/ui.ts CHANGED
@@ -1,21 +1,49 @@
1
+ import type { TabManagerInterface } from '../libs/tabManager';
2
+
1
3
  import { create } from 'zustand';
2
4
 
5
+ import { TabManager } from '../libs/tabManager';
6
+
3
7
  import createSelectors from './selectors';
4
8
 
5
9
  interface UiState {
6
- connectWalletsButtonDisabled: boolean;
7
- selectedSwapRequestId: string | null;
8
- currentPage: string;
9
- setSelectedSwap: (requestId: string | null) => void;
10
- setCurrentPage: (path: string) => void;
10
+ isActiveTab: boolean;
11
+ tabManagerInitiated: boolean;
12
+ showActivateTabModal: boolean;
13
+ activateCurrentTab: (
14
+ setCurrentTabAsActive: () => void,
15
+ hasRunningSwaps: boolean
16
+ ) => void;
17
+ setShowActivateTabModal: (flag: boolean) => void;
11
18
  }
12
19
 
13
20
  export const useUiStore = createSelectors(
14
- create<UiState>()((set) => ({
15
- connectWalletsButtonDisabled: false,
16
- selectedSwapRequestId: null,
17
- currentPage: '',
18
- setSelectedSwap: (requestId) => set({ selectedSwapRequestId: requestId }),
19
- setCurrentPage: (path) => set({ currentPage: path }),
21
+ create<UiState>()((set, get) => ({
22
+ isActiveTab: false,
23
+ tabManagerInitiated: false,
24
+ showActivateTabModal: false,
25
+ activateCurrentTab: (setCurrentTabAsActive, hasRunningSwaps) => {
26
+ const { showActivateTabModal } = get();
27
+
28
+ if (!showActivateTabModal && hasRunningSwaps) {
29
+ set({ showActivateTabModal: true });
30
+ } else if (showActivateTabModal || !hasRunningSwaps) {
31
+ setCurrentTabAsActive();
32
+ }
33
+ },
34
+ setShowActivateTabModal: (flag) => {
35
+ set({ showActivateTabModal: flag });
36
+ },
20
37
  }))
21
38
  );
39
+
40
+ const tabManager: TabManagerInterface = new TabManager({
41
+ onInit: () => useUiStore.setState({ tabManagerInitiated: true }),
42
+ onClaim: () =>
43
+ useUiStore.setState({ isActiveTab: true, showActivateTabModal: false }),
44
+ onRelease: () => useUiStore.setState({ isActiveTab: false }),
45
+ });
46
+
47
+ export const setCurrentTabAsActive = tabManager.forceClaim;
48
+
49
+ export const destroyTabManager = tabManager.destroy;
@@ -35,33 +35,6 @@ import {
35
35
  hasProperSlippage,
36
36
  } from './swap';
37
37
 
38
- export function searchParamsToToken(
39
- tokens: Token[],
40
- searchParams: string | null,
41
- chain: BlockchainMeta | null
42
- ): Token | null {
43
- if (!chain) {
44
- return null;
45
- }
46
- return (
47
- tokens.find((token) => {
48
- const symbolAndAddress = searchParams?.split('--');
49
- if (symbolAndAddress?.length === 1) {
50
- return (
51
- token.symbol === symbolAndAddress[0] &&
52
- token.address === null &&
53
- token.blockchain === chain.name
54
- );
55
- }
56
- return (
57
- token.symbol === symbolAndAddress?.[0] &&
58
- token.address === symbolAndAddress?.[1] &&
59
- token.blockchain === chain.name
60
- );
61
- }) || null
62
- );
63
- }
64
-
65
38
  export function getQuoteToTokenUsdPrice(
66
39
  quote: BestRouteResponse | null
67
40
  ): number | null | undefined {
@@ -1,2 +0,0 @@
1
- export declare function UpdateUrl(): null;
2
- //# sourceMappingURL=UpdateUrl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UpdateUrl.d.ts","sourceRoot":"","sources":["../../src/components/UpdateUrl.tsx"],"names":[],"mappings":"AAcA,wBAAgB,SAAS,SA+IxB"}
@@ -1,158 +0,0 @@
1
- import { useEffect, useRef } from 'react';
2
- import {
3
- createSearchParams,
4
- useLocation,
5
- useSearchParams,
6
- } from 'react-router-dom';
7
-
8
- import { navigationRoutes } from '../constants/navigationRoutes';
9
- import { SearchParams } from '../constants/searchParams';
10
- import { useAppStore } from '../store/AppStore';
11
- import { useQuoteStore } from '../store/quote';
12
- import { useUiStore } from '../store/ui';
13
- import { searchParamsToToken } from '../utils/quote';
14
-
15
- export function UpdateUrl() {
16
- const firstRender = useRef(true);
17
- const [searchParams, setSearchParams] = useSearchParams();
18
- const location = useLocation();
19
- const firstRenderSearchParams = useRef(location.search);
20
- const searchParamsRef = useRef<Record<string, string>>({});
21
- const fromBlockchain = useQuoteStore.use.fromBlockchain();
22
- const toBlockchain = useQuoteStore.use.toBlockchain();
23
- const fromToken = useQuoteStore.use.fromToken();
24
- const toToken = useQuoteStore.use.toToken();
25
- const setFromBlockchain = useQuoteStore.use.setFromBlockchain();
26
- const setFromToken = useQuoteStore.use.setFromToken();
27
- const setToBlockchain = useQuoteStore.use.setToBlockchain();
28
- const setToToken = useQuoteStore.use.setToToken();
29
- const inputAmount = useQuoteStore.use.inputAmount();
30
- const setInputAmount = useQuoteStore.use.setInputAmount();
31
- const fetchMetaStatus = useAppStore().fetchStatus;
32
- const blockchains = useAppStore().blockchains();
33
- const tokens = useAppStore().tokens();
34
- const setSelectedSwap = useUiStore.use.setSelectedSwap();
35
-
36
- useEffect(() => {
37
- const params: Record<string, string> = {};
38
- createSearchParams(firstRenderSearchParams.current).forEach(
39
- (value, key) => {
40
- params[key] = value;
41
- }
42
- );
43
- searchParamsRef.current = params;
44
- const requestId =
45
- location.pathname.split(navigationRoutes.swaps + '/')[1] || null;
46
- if (requestId) {
47
- setSelectedSwap(requestId);
48
- }
49
- }, []);
50
-
51
- useEffect(() => {
52
- if (!firstRender.current) {
53
- let fromChainString = '',
54
- fromTokenString = '',
55
- toChainString = '',
56
- toTokenString = '',
57
- fromAmount = '';
58
- const autoConnect = searchParamsRef.current[SearchParams.AUTO_CONNECT];
59
- if (fetchMetaStatus !== 'success') {
60
- fromChainString = searchParamsRef.current[SearchParams.FROM_CHAIN];
61
- fromTokenString = searchParamsRef.current[SearchParams.FROM_TOKEN];
62
- toChainString = searchParamsRef.current[SearchParams.TO_CHAIN];
63
- toTokenString = searchParamsRef.current[SearchParams.TO_TOKEN];
64
- fromAmount =
65
- searchParamsRef.current[SearchParams.FROM_AMOUNT] || inputAmount;
66
- } else {
67
- fromChainString = fromBlockchain?.name || '';
68
- fromTokenString =
69
- (fromToken?.symbol || '') +
70
- (fromToken?.address ? `--${fromToken?.address}` : '');
71
- toChainString = toBlockchain?.name || '';
72
- toTokenString =
73
- (toToken?.symbol || '') +
74
- (toToken?.address ? `--${toToken?.address}` : '');
75
- fromAmount = inputAmount;
76
- }
77
- setSearchParams(
78
- {
79
- ...(fromChainString && {
80
- [SearchParams.FROM_CHAIN]: fromChainString,
81
- }),
82
- ...(fromTokenString && {
83
- [SearchParams.FROM_TOKEN]: fromTokenString,
84
- }),
85
- ...(toChainString && { [SearchParams.TO_CHAIN]: toChainString }),
86
- ...(toTokenString && { [SearchParams.TO_TOKEN]: toTokenString }),
87
- ...(fromAmount && {
88
- [SearchParams.FROM_AMOUNT]: fromAmount.toString(),
89
- }),
90
- ...(autoConnect && {
91
- [SearchParams.AUTO_CONNECT]: autoConnect,
92
- }),
93
- },
94
- { replace: true }
95
- );
96
- }
97
- firstRender.current = false;
98
- }, [
99
- location.pathname,
100
- inputAmount,
101
- fromBlockchain,
102
- fromToken,
103
- toBlockchain,
104
- toToken,
105
- ]);
106
-
107
- useEffect(() => {
108
- if (fetchMetaStatus === 'success') {
109
- const fromChainString = searchParams.get(SearchParams.FROM_CHAIN);
110
- const fromTokenString = searchParams.get(SearchParams.FROM_TOKEN);
111
- const toChainString = searchParams.get(SearchParams.TO_CHAIN);
112
- const toTokenString = searchParams.get(SearchParams.TO_TOKEN);
113
- const fromAmount = searchParams.get(SearchParams.FROM_AMOUNT);
114
- const fromBlockchain = blockchains.find(
115
- (blockchain) => blockchain.name === fromChainString
116
- );
117
- const fromToken = searchParamsToToken(
118
- tokens,
119
- fromTokenString,
120
- fromBlockchain || null
121
- );
122
- const toBlockchain = blockchains.find(
123
- (blockchain) => blockchain.name === toChainString
124
- );
125
- const toToken = searchParamsToToken(
126
- tokens,
127
- toTokenString,
128
- toBlockchain || null
129
- );
130
- if (!!fromBlockchain) {
131
- setFromBlockchain(fromBlockchain);
132
- if (!!fromToken) {
133
- setFromToken({
134
- token: fromToken,
135
- meta: {
136
- blockchains: blockchains,
137
- tokens: tokens,
138
- },
139
- });
140
- }
141
- }
142
- if (!!toBlockchain) {
143
- setToBlockchain(toBlockchain);
144
- if (!!toToken) {
145
- setToToken({
146
- token: toToken,
147
- meta: { blockchains: blockchains, tokens: tokens },
148
- });
149
- }
150
- }
151
- if (fromAmount) {
152
- setInputAmount(fromAmount);
153
- }
154
- }
155
- }, [fetchMetaStatus]);
156
-
157
- return null;
158
- }