@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.
- package/dist/QueueManager.d.ts.map +1 -1
- package/dist/components/AppRouter.d.ts.map +1 -1
- package/dist/components/AppRoutes.d.ts.map +1 -1
- package/dist/components/ConfirmWalletsModal/ConfirmWallets.styles.d.ts +3 -3
- package/dist/components/ConfirmWalletsModal/WalletList.d.ts.map +1 -1
- package/dist/components/Layout/Layout.d.ts.map +1 -1
- package/dist/components/NotificationContent/NotificationContent.d.ts.map +1 -1
- package/dist/components/Quote/Quote.styles.d.ts +2 -2
- package/dist/components/QuoteWarningsAndErrors/HighValueLossWarningModal.d.ts +1 -0
- package/dist/components/QuoteWarningsAndErrors/HighValueLossWarningModal.d.ts.map +1 -1
- package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.d.ts.map +1 -1
- package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.d.ts +1 -0
- package/dist/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.d.ts.map +1 -1
- package/dist/components/QuoteWarningsAndErrors/SlippageWariningModal.d.ts +1 -0
- package/dist/components/QuoteWarningsAndErrors/SlippageWariningModal.d.ts.map +1 -1
- package/dist/components/QuoteWarningsAndErrors/UnknownPriceWarningModal.d.ts +1 -0
- package/dist/components/QuoteWarningsAndErrors/UnknownPriceWarningModal.d.ts.map +1 -1
- package/dist/components/SwapDetails/SwapDetails.d.ts.map +1 -1
- package/dist/components/SwapDetailsModal/SwapDetailsModal.WalletState.d.ts.map +1 -1
- package/dist/components/SwapDetailsModal/SwapDetailsModal.d.ts.map +1 -1
- package/dist/components/SwapDetailsModal/SwapDetailsModal.types.d.ts +2 -0
- package/dist/components/SwapDetailsModal/SwapDetailsModal.types.d.ts.map +1 -1
- package/dist/components/common/ActivateTabAlert/ActivateTabAlert.d.ts +4 -0
- package/dist/components/common/ActivateTabAlert/ActivateTabAlert.d.ts.map +1 -0
- package/dist/components/common/ActivateTabAlert/ActivateTabAlert.types.d.ts +4 -0
- package/dist/components/common/ActivateTabAlert/ActivateTabAlert.types.d.ts.map +1 -0
- package/dist/components/common/ActivateTabAlert/index.d.ts +2 -0
- package/dist/components/common/ActivateTabAlert/index.d.ts.map +1 -0
- package/dist/components/common/ActivateTabModal/ActivateTabModal.d.ts +4 -0
- package/dist/components/common/ActivateTabModal/ActivateTabModal.d.ts.map +1 -0
- package/dist/components/common/ActivateTabModal/ActivateTabModal.types.d.ts +6 -0
- package/dist/components/common/ActivateTabModal/ActivateTabModal.types.d.ts.map +1 -0
- package/dist/components/common/ActivateTabModal/index.d.ts +2 -0
- package/dist/components/common/ActivateTabModal/index.d.ts.map +1 -0
- package/dist/constants/searchParams.d.ts +6 -6
- package/dist/constants/searchParams.d.ts.map +1 -1
- package/dist/containers/Widget/Widget.d.ts.map +1 -1
- package/dist/containers/WidgetInfo/WidgetInfo.d.ts.map +1 -1
- package/dist/containers/WidgetInfo/WidgetInfo.types.d.ts +2 -0
- package/dist/containers/WidgetInfo/WidgetInfo.types.d.ts.map +1 -1
- package/dist/hooks/useSwapInput.d.ts.map +1 -1
- package/dist/hooks/useSyncStoresWithConfig.d.ts.map +1 -1
- package/dist/hooks/useSyncUrlAndStore/index.d.ts +2 -0
- package/dist/hooks/useSyncUrlAndStore/index.d.ts.map +1 -0
- package/dist/hooks/useSyncUrlAndStore/useSyncUrlAndStore.d.ts +2 -0
- package/dist/hooks/useSyncUrlAndStore/useSyncUrlAndStore.d.ts.map +1 -0
- package/dist/hooks/useSyncUrlAndStore/useSyncUrlAndStore.helpers.d.ts +4 -0
- package/dist/hooks/useSyncUrlAndStore/useSyncUrlAndStore.helpers.d.ts.map +1 -0
- package/dist/index.js +2 -2
- package/dist/index.js.map +4 -4
- package/dist/libs/tabManager/index.d.ts +3 -0
- package/dist/libs/tabManager/index.d.ts.map +1 -0
- package/dist/libs/tabManager/tabManager.constants.d.ts +4 -0
- package/dist/libs/tabManager/tabManager.constants.d.ts.map +1 -0
- package/dist/libs/tabManager/tabManager.d.ts +63 -0
- package/dist/libs/tabManager/tabManager.d.ts.map +1 -0
- package/dist/libs/tabManager/tabManager.types.d.ts +29 -0
- package/dist/libs/tabManager/tabManager.types.d.ts.map +1 -0
- package/dist/pages/ConfirmSwapPage.d.ts.map +1 -1
- package/dist/pages/HistoryPage.d.ts.map +1 -1
- package/dist/pages/Home.d.ts.map +1 -1
- package/dist/pages/SwapDetailsPage.d.ts.map +1 -1
- package/dist/pages/WalletsPage.d.ts.map +1 -1
- package/dist/store/ui.d.ts +12 -10
- package/dist/store/ui.d.ts.map +1 -1
- package/dist/utils/quote.d.ts +0 -1
- package/dist/utils/quote.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/QueueManager.tsx +4 -1
- package/src/components/AppRouter.tsx +1 -8
- package/src/components/AppRoutes.tsx +11 -0
- package/src/components/ConfirmWalletsModal/WalletList.tsx +3 -0
- package/src/components/Layout/Layout.tsx +37 -8
- package/src/components/NotificationContent/NotificationContent.tsx +0 -3
- package/src/components/QuoteWarningsAndErrors/HighValueLossWarningModal.tsx +3 -1
- package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.tsx +3 -1
- package/src/components/QuoteWarningsAndErrors/QuoteWarningsAndErrors.types.ts +1 -0
- package/src/components/QuoteWarningsAndErrors/SlippageWariningModal.tsx +3 -1
- package/src/components/QuoteWarningsAndErrors/UnknownPriceWarningModal.tsx +3 -1
- package/src/components/SwapDetails/SwapDetails.tsx +3 -0
- package/src/components/SwapDetailsModal/SwapDetailsModal.WalletState.tsx +9 -1
- package/src/components/SwapDetailsModal/SwapDetailsModal.tsx +10 -2
- package/src/components/SwapDetailsModal/SwapDetailsModal.types.ts +2 -0
- package/src/components/common/ActivateTabAlert/ActivateTabAlert.tsx +26 -0
- package/src/components/common/ActivateTabAlert/ActivateTabAlert.types.ts +3 -0
- package/src/components/common/ActivateTabAlert/index.ts +1 -0
- package/src/components/common/ActivateTabModal/ActivateTabModal.tsx +31 -0
- package/src/components/common/ActivateTabModal/ActivateTabModal.types.ts +5 -0
- package/src/components/common/ActivateTabModal/index.ts +1 -0
- package/src/constants/searchParams.ts +6 -6
- package/src/containers/Wallets/Wallets.tsx +3 -3
- package/src/containers/Widget/Widget.tsx +6 -1
- package/src/containers/WidgetInfo/WidgetInfo.tsx +5 -1
- package/src/containers/WidgetInfo/WidgetInfo.types.ts +2 -0
- package/src/hooks/useSwapInput.ts +6 -1
- package/src/hooks/useSyncStoresWithConfig.ts +3 -17
- package/src/hooks/useSyncUrlAndStore/index.ts +1 -0
- package/src/hooks/useSyncUrlAndStore/useSyncUrlAndStore.helpers.ts +35 -0
- package/src/hooks/useSyncUrlAndStore/useSyncUrlAndStore.ts +135 -0
- package/src/libs/tabManager/index.ts +2 -0
- package/src/libs/tabManager/tabManager.constants.ts +3 -0
- package/src/libs/tabManager/tabManager.ts +222 -0
- package/src/libs/tabManager/tabManager.types.ts +28 -0
- package/src/pages/ConfirmSwapPage.tsx +6 -5
- package/src/pages/HistoryPage.tsx +1 -6
- package/src/pages/Home.tsx +12 -6
- package/src/pages/SwapDetailsPage.tsx +21 -7
- package/src/pages/WalletsPage.tsx +3 -0
- package/src/store/ui.ts +39 -11
- package/src/utils/quote.ts +0 -27
- package/dist/components/UpdateUrl.d.ts +0 -2
- package/dist/components/UpdateUrl.d.ts.map +0 -1
- 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
|
|
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={
|
|
98
|
-
setSelectedSwap(requestId);
|
|
99
|
-
navigate(requestId);
|
|
100
|
-
}}
|
|
95
|
+
onSwapClick={navigate}
|
|
101
96
|
groupBy={groupSwapsByDate}
|
|
102
97
|
isLoading={loading}
|
|
103
98
|
/>
|
package/src/pages/Home.tsx
CHANGED
|
@@ -43,7 +43,7 @@ export function Home() {
|
|
|
43
43
|
const navigate = useNavigate();
|
|
44
44
|
const {
|
|
45
45
|
fetch: fetchQuote,
|
|
46
|
-
loading
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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;
|
package/src/utils/quote.ts
CHANGED
|
@@ -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 +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
|
-
}
|