66 Flex ,
77 IconButton ,
88 Link ,
9- Tabs ,
109 Text ,
1110 useDisclosure ,
1211} from "@chakra-ui/react" ;
@@ -44,8 +43,8 @@ import Notification from "@/components/Notification";
4443import { ClipboardLink , ClipboardRoot } from "@/components/ui/clipboard" ;
4544import RouteIndication from "@/components/RouteIndication" ;
4645import { Tooltip } from "@/components/ui/tooltip" ;
47- import { NotifyType , WidgetProps } from "@/types" ;
4846import Slippage from "@/components/Slippage" ;
47+ import { NotifyType , ObligatedToken , WidgetProps } from "@/types" ;
4948
5049const SwapWidget = ( {
5150 tokenOut : providedTokenOut ,
@@ -54,12 +53,16 @@ const SwapWidget = ({
5453 enableShare,
5554 indicateRoute,
5655 adaptive,
56+ rotateObligated,
5757} : WidgetProps ) => {
5858 const [ tokenIn , setTokenIn ] = useState < Address > ( ) ;
5959 const [ valueIn , setValueIn ] = useState ( "" ) ;
6060 const [ warningAccepted , setWarningAccepted ] = useState ( false ) ;
6161 const [ tokenOut , setTokenOut ] = useState < Address > ( ) ;
6262 const [ slippage , setSlippage ] = useState ( DEFAULT_SLIPPAGE ) ;
63+ const [ obligatedToken , setObligatedToken ] = useState (
64+ obligateSelection && ( rotateObligated ?? ObligatedToken . TokenOut ) ,
65+ ) ;
6366
6467 const chainId = usePriorityChainId ( ) ;
6568 const wagmiChainId = useChainId ( ) ;
@@ -218,6 +221,10 @@ const SwapWidget = ({
218221
219222 const limitInputTokens =
220223 chainId === mainnet . id && tokenOutInfo ?. symbol === "UNI-V2" ;
224+ const displayTokenRotation =
225+ ! obligateSelection ||
226+ rotateObligated ||
227+ typeof rotateObligated === "number" ;
221228
222229 return (
223230 < Box
@@ -250,7 +257,7 @@ const SwapWidget = ({
250257 < SwapInput
251258 title = { "You pay" }
252259 limitTokens = { limitInputTokens && MAINNET_ZAP_INPUT_TOKENS }
253- obligatedToken = { providedTokenIn && obligateSelection }
260+ obligatedToken = { obligatedToken === ObligatedToken . TokenIn }
254261 portalRef = { portalRef }
255262 tokenValue = { tokenIn }
256263 tokenOnChange = { setTokenIn }
@@ -259,7 +266,7 @@ const SwapWidget = ({
259266 usdValue = { tokenInUsdPrice }
260267 />
261268
262- { ! obligateSelection && (
269+ { displayTokenRotation && (
263270 < Flex justifyContent = "center" alignItems = "center" >
264271 < IconButton
265272 borderRadius = { "full" }
@@ -272,6 +279,13 @@ const SwapWidget = ({
272279 onClick = { ( ) => {
273280 const tempTokenIn = tokenIn ;
274281
282+ if ( obligateSelection )
283+ setObligatedToken ( ( val ) =>
284+ val === ObligatedToken . TokenIn
285+ ? ObligatedToken . TokenOut
286+ : ObligatedToken . TokenIn ,
287+ ) ;
288+
275289 setTokenIn ( tokenOut ) ;
276290 setTokenOut ( tempTokenIn ) ;
277291 setValueIn ( valueOut ) ;
@@ -284,7 +298,7 @@ const SwapWidget = ({
284298
285299 < SwapInput
286300 disabled
287- obligatedToken = { providedTokenOut && obligateSelection }
301+ obligatedToken = { obligatedToken === ObligatedToken . TokenOut }
288302 title = { "You receive" }
289303 loading = { routerLoading }
290304 portalRef = { portalRef }
0 commit comments