33 useContext , useEffect , useMemo , useState ,
44} from 'react' ;
55import {
6- Box , ButtCon , Heading , Icon , OptionKey , Tooltip ,
6+ Box , ButtCon , Heading , Icon , OptionKey , Tooltip , Body ,
77} from '@biom3/react' ;
88import { isAddressSanctioned , TokenInfo , WidgetTheme } from '@imtbl/checkout-sdk' ;
99
@@ -42,7 +42,6 @@ import { CoinSelectorOptionProps } from '../../../components/CoinSelector/CoinSe
4242import { useInterval } from '../../../lib/hooks/useInterval' ;
4343import { NotEnoughImx } from '../../../components/NotEnoughImx/NotEnoughImx' ;
4444import { SharedViews , ViewActions , ViewContext } from '../../../context/view-context/ViewContext' ;
45- import { UnableToSwap } from './UnableToSwap' ;
4645import { ConnectLoaderContext } from '../../../context/connect-loader-context/ConnectLoaderContext' ;
4746import useDebounce from '../../../lib/hooks/useDebounce' ;
4847import { 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,27 @@ export function SwapForm({ data, theme, cancelAutoProceed }: SwapFromProps) {
10831082 />
10841083 ) }
10851084 </ Box >
1085+ { quoteError && (
1086+ < Box sx = { {
1087+ paddingX : 'base.spacing.x4' ,
1088+ pt : 'base.spacing.x3' ,
1089+ } }
1090+ >
1091+ < Body
1092+ size = "xSmall"
1093+ weight = "bold"
1094+ sx = { {
1095+ color : 'base.color.text.status.fatal.primary' ,
1096+ } }
1097+ rc = { < div /> }
1098+ >
1099+ Unable to swap this token
1100+ </ Body >
1101+ < Body size = "xxSmall" >
1102+ This token pairing isn't available to swap right now. Try another selection.
1103+ </ Body >
1104+ </ Box >
1105+ ) }
10861106 { ! autoProceed && (
10871107 < SwapButton
10881108 validator = { SwapFormValidator }
@@ -1121,16 +1141,6 @@ export function SwapForm({ data, theme, cancelAutoProceed }: SwapFromProps) {
11211141 } }
11221142 onCloseDrawer = { ( ) => setShowNotEnoughImxDrawer ( false ) }
11231143 />
1124- < UnableToSwap
1125- visible = { showUnableToSwapDrawer }
1126- onCloseDrawer = { ( ) => {
1127- setShowUnableToSwapDrawer ( false ) ;
1128- setFromToken ( undefined ) ;
1129- setFromAmount ( '' ) ;
1130- setToToken ( undefined ) ;
1131- setToAmount ( '' ) ;
1132- } }
1133- />
11341144 < NetworkSwitchDrawer
11351145 visible = { showNetworkSwitchDrawer }
11361146 targetChainId = { getL2ChainId ( checkout ?. config ! ) }
0 commit comments