Skip to content

Commit c81d785

Browse files
author
Jeet
committed
Not clear form values on error and show errors directly
1 parent 4352f93 commit c81d785

File tree

3 files changed

+46
-122
lines changed

3 files changed

+46
-122
lines changed

packages/checkout/widgets-lib/rollup.config.js

Lines changed: 17 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -10,54 +10,37 @@ const PRODUCTION = 'production';
1010

1111
const isProduction = process.env.NODE_ENV === PRODUCTION
1212

13-
const defaultPlugins = [
14-
json(),
15-
replace({
16-
preventAssignment: true,
17-
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || PRODUCTION),
18-
}),
19-
]
20-
21-
const productionPlugins = [
22-
commonjs(),
23-
]
24-
25-
const getPlugins = () => {
26-
if (process.env.NODE_ENV !== PRODUCTION) {
27-
return defaultPlugins;
28-
}
29-
30-
return [
31-
...defaultPlugins,
32-
...productionPlugins
33-
];
34-
}
35-
3613
/**
37-
* @type {import('rollup').RollupOptions[]}
14+
* @type {import('rollup').RollupOptions}
3815
*/
39-
export default [
16+
export default
4017
// browser bundle
4118
{
4219
input: 'src/index.ts',
4320
treeshake: 'smallest',
4421
output: {
4522
dir: 'dist/browser',
4623
format: 'es',
47-
inlineDynamicImports: !isProduction,
24+
inlineDynamicImports: true,
4825
},
4926
plugins: [
5027
isProduction ? typescript({customConditions: ["default"], declaration: false, outDir: 'dist/browser'})
5128
: swc.rollup({ jsc: {
5229
transform: { react: { development: true, runtime: 'automatic' }},
5330
} }),
54-
resolve({
55-
browser: true,
56-
dedupe: ['react', 'react-dom'],
57-
exportConditions: ['default', 'browser'],
58-
}),
31+
...(isProduction ? [
32+
resolve({
33+
browser: true,
34+
dedupe: ['react', 'react-dom'],
35+
exportConditions: ['default', 'browser'],
36+
})
37+
] : []),
5938
nodePolyfills(),
60-
...getPlugins(),
39+
json(),
40+
replace({
41+
preventAssignment: true,
42+
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || PRODUCTION),
43+
}),
44+
commonjs(),
6145
],
62-
},
63-
]
46+
}

packages/checkout/widgets-lib/src/widgets/swap/components/SwapForm.tsx

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
useContext, useEffect, useMemo, useState,
44
} from 'react';
55
import {
6-
Box, ButtCon, Heading, Icon, OptionKey, Tooltip,
6+
Box, ButtCon, Heading, Icon, OptionKey, Tooltip, Body,
77
} from '@biom3/react';
88
import { isAddressSanctioned, TokenInfo, WidgetTheme } from '@imtbl/checkout-sdk';
99

@@ -42,7 +42,6 @@ import { CoinSelectorOptionProps } from '../../../components/CoinSelector/CoinSe
4242
import { useInterval } from '../../../lib/hooks/useInterval';
4343
import { NotEnoughImx } from '../../../components/NotEnoughImx/NotEnoughImx';
4444
import { SharedViews, ViewActions, ViewContext } from '../../../context/view-context/ViewContext';
45-
import { UnableToSwap } from './UnableToSwap';
4645
import { ConnectLoaderContext } from '../../../context/connect-loader-context/ConnectLoaderContext';
4746
import useDebounce from '../../../lib/hooks/useDebounce';
4847
import { CancellablePromise } from '../../../lib/async/cancellablePromise';
@@ -122,6 +121,7 @@ export function SwapForm({ data, theme, cancelAutoProceed }: SwapFromProps) {
122121

123122
// Quote
124123
const [quote, setQuote] = useState<TransactionResponse | null>(null);
124+
const [quoteError, setQuoteError] = useState<string>('');
125125
const [gasFeeValue, setGasFeeValue] = useState<string>('');
126126
const [gasFeeToken, setGasFeeToken] = useState<TokenInfo | undefined>(undefined);
127127
const [gasFeeFiatValue, setGasFeeFiatValue] = useState<string>('');
@@ -148,7 +148,6 @@ export function SwapForm({ data, theme, cancelAutoProceed }: SwapFromProps) {
148148

149149
// Drawers
150150
const [showNotEnoughImxDrawer, setShowNotEnoughImxDrawer] = useState(false);
151-
const [showUnableToSwapDrawer, setShowUnableToSwapDrawer] = useState(false);
152151
const [showNetworkSwitchDrawer, setShowNetworkSwitchDrawer] = useState(false);
153152

154153
const [showTxnRejectedState, setShowTxnRejectedState] = useState(false);
@@ -217,9 +216,8 @@ export function SwapForm({ data, theme, cancelAutoProceed }: SwapFromProps) {
217216
network,
218217
]);
219218

220-
const openUnableToSwapDrawer = useCallback((error: any) => {
221-
setShowNotEnoughImxDrawer(false);
222-
setShowUnableToSwapDrawer(true);
219+
const onQuoteError = useCallback((error: any) => {
220+
setQuoteError(error.message);
223221
track({
224222
userJourney: UserJourney.SWAP,
225223
screen: 'SwapCoins',
@@ -262,6 +260,7 @@ export function SwapForm({ data, theme, cancelAutoProceed }: SwapFromProps) {
262260
setFromTokenError('');
263261
setToAmountError('');
264262
setToTokenError('');
263+
setQuoteError('');
265264
};
266265

267266
const resetQuote = () => {
@@ -349,7 +348,7 @@ export function SwapForm({ data, theme, cancelAutoProceed }: SwapFromProps) {
349348
console.error('Error fetching quote.', error);
350349

351350
resetQuote();
352-
openUnableToSwapDrawer(error);
351+
onQuoteError(error);
353352
}
354353
}
355354

@@ -425,7 +424,7 @@ export function SwapForm({ data, theme, cancelAutoProceed }: SwapFromProps) {
425424
} catch (error: any) {
426425
if (!error.cancelled) {
427426
resetQuote();
428-
openUnableToSwapDrawer(error);
427+
onQuoteError(error);
429428
}
430429
}
431430

@@ -741,7 +740,6 @@ export function SwapForm({ data, theme, cancelAutoProceed }: SwapFromProps) {
741740
};
742741

743742
const openNotEnoughImxDrawer = () => {
744-
setShowUnableToSwapDrawer(false);
745743
setShowNotEnoughImxDrawer(true);
746744
};
747745

@@ -766,7 +764,8 @@ export function SwapForm({ data, theme, cancelAutoProceed }: SwapFromProps) {
766764
if (validateToTokenError) setToTokenError(validateToTokenError);
767765
let isSwapFormValid = true;
768766
if (
769-
validateFromTokenError
767+
quoteError
768+
|| validateFromTokenError
770769
|| validateToTokenError
771770
|| (validateFromAmountError && direction === SwapDirection.FROM)
772771
|| (validateToAmountError && direction === SwapDirection.TO)) isSwapFormValid = false;
@@ -1083,6 +1082,26 @@ export function SwapForm({ data, theme, cancelAutoProceed }: SwapFromProps) {
10831082
/>
10841083
)}
10851084
</Box>
1085+
{quoteError && (
1086+
<Box sx={{
1087+
paddingX: 'base.spacing.x4',
1088+
}}
1089+
>
1090+
<Body
1091+
size="xSmall"
1092+
weight="bold"
1093+
sx={{
1094+
color: 'base.color.text.status.fatal.primary',
1095+
}}
1096+
rc={<div />}
1097+
>
1098+
Unable to swap this token
1099+
</Body>
1100+
<Body size="xxSmall">
1101+
This token pairing isn&apos;t available to swap right now. Try another selection.
1102+
</Body>
1103+
</Box>
1104+
)}
10861105
{!autoProceed && (
10871106
<SwapButton
10881107
validator={SwapFormValidator}
@@ -1121,16 +1140,6 @@ export function SwapForm({ data, theme, cancelAutoProceed }: SwapFromProps) {
11211140
}}
11221141
onCloseDrawer={() => setShowNotEnoughImxDrawer(false)}
11231142
/>
1124-
<UnableToSwap
1125-
visible={showUnableToSwapDrawer}
1126-
onCloseDrawer={() => {
1127-
setShowUnableToSwapDrawer(false);
1128-
setFromToken(undefined);
1129-
setFromAmount('');
1130-
setToToken(undefined);
1131-
setToAmount('');
1132-
}}
1133-
/>
11341143
<NetworkSwitchDrawer
11351144
visible={showNetworkSwitchDrawer}
11361145
targetChainId={getL2ChainId(checkout?.config!)}

packages/checkout/widgets-lib/src/widgets/swap/components/UnableToSwap.tsx

Lines changed: 0 additions & 68 deletions
This file was deleted.

0 commit comments

Comments
 (0)