Skip to content

Commit 137efcc

Browse files
committed
[MNY-197] SDK: SwapWidget chain selection UI improvements
1 parent 6bf91a4 commit 137efcc

File tree

3 files changed

+37
-21
lines changed

3 files changed

+37
-21
lines changed

packages/thirdweb/src/react/web/ui/Bridge/swap-widget/select-chain.tsx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useState } from "react";
1+
import { useMemo, useState } from "react";
22
import type { Chain as BridgeChain } from "../../../../../bridge/index.js";
33
import type { ThirdwebClient } from "../../../../../client/client.js";
44
import {
@@ -53,7 +53,22 @@ export function SelectBridgeChainUI(
5353
},
5454
) {
5555
const [search, setSearch] = useState("");
56-
const filteredChains = props.chains.filter((chain) => {
56+
const [initiallySelectedChain] = useState(props.selectedChain);
57+
58+
// put the initially selected chain first
59+
const sortedChains = useMemo(() => {
60+
if (initiallySelectedChain) {
61+
return [
62+
initiallySelectedChain,
63+
...props.chains.filter(
64+
(chain) => chain.chainId !== initiallySelectedChain.chainId,
65+
),
66+
];
67+
}
68+
return props.chains;
69+
}, [props.chains, initiallySelectedChain]);
70+
71+
const filteredChains = sortedChains.filter((chain) => {
5772
return chain.name.toLowerCase().includes(search.toLowerCase());
5873
});
5974

packages/thirdweb/src/react/web/ui/Bridge/swap-widget/select-token-ui.tsx

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ import { tokenAmountFormatter } from "./utils.js";
3737
* @internal
3838
*/
3939
type SelectTokenUIProps = {
40-
onBack: () => void;
40+
onClose: () => void;
4141
client: ThirdwebClient;
4242
selectedToken: TokenSelection | undefined;
4343
setSelectedToken: (token: TokenSelection) => void;
@@ -182,6 +182,7 @@ function SelectTokenUI(
182182
});
183183
}, [otherTokens]);
184184

185+
// desktop
185186
if (!isMobile) {
186187
return (
187188
<Container
@@ -205,7 +206,10 @@ function SelectTokenUI(
205206
</LeftContainer>
206207
<Container flex="column" relative scrollY>
207208
<TokenSelectionScreen
208-
onSelectToken={props.setSelectedToken}
209+
onSelectToken={(token) => {
210+
props.setSelectedToken(token);
211+
props.onClose();
212+
}}
209213
isMobile={false}
210214
selectedToken={props.selectedToken}
211215
isFetching={props.isFetching}
@@ -226,7 +230,10 @@ function SelectTokenUI(
226230
if (screen === "select-token") {
227231
return (
228232
<TokenSelectionScreen
229-
onSelectToken={props.setSelectedToken}
233+
onSelectToken={(token) => {
234+
props.setSelectedToken(token);
235+
props.onClose();
236+
}}
230237
selectedToken={props.selectedToken}
231238
isFetching={props.isFetching}
232239
ownedTokens={props.ownedTokens}
@@ -581,8 +588,10 @@ function TokenSelectionScreen(props: {
581588
client={props.client}
582589
onSelect={props.onSelectToken}
583590
isSelected={
584-
props.selectedToken?.tokenAddress.toLowerCase() ===
585-
token.address.toLowerCase()
591+
!!props.selectedToken &&
592+
props.selectedToken.tokenAddress.toLowerCase() ===
593+
token.address.toLowerCase() &&
594+
token.chainId === props.selectedToken.chainId
586595
}
587596
/>
588597
))}

packages/thirdweb/src/react/web/ui/Bridge/swap-widget/swap-ui.tsx

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -235,20 +235,16 @@ export function SwapUI(props: SwapUIProps) {
235235
{modalState.screen === "select-buy-token" && (
236236
<SelectToken
237237
activeWalletInfo={props.activeWalletInfo}
238-
onBack={() =>
238+
onClose={() => {
239239
setModalState((v) => ({
240240
...v,
241241
isOpen: false,
242-
}))
243-
}
242+
}));
243+
}}
244244
client={props.client}
245245
selectedToken={props.buyToken}
246246
setSelectedToken={(token) => {
247247
props.setBuyToken(token);
248-
setModalState((v) => ({
249-
...v,
250-
isOpen: false,
251-
}));
252248
// if buy token is same as sell token, unset sell token
253249
if (
254250
props.sellToken &&
@@ -264,20 +260,16 @@ export function SwapUI(props: SwapUIProps) {
264260

265261
{modalState.screen === "select-sell-token" && (
266262
<SelectToken
267-
onBack={() =>
263+
onClose={() => {
268264
setModalState((v) => ({
269265
...v,
270266
isOpen: false,
271-
}))
272-
}
267+
}));
268+
}}
273269
client={props.client}
274270
selectedToken={props.sellToken}
275271
setSelectedToken={(token) => {
276272
props.setSellToken(token);
277-
setModalState((v) => ({
278-
...v,
279-
isOpen: false,
280-
}));
281273
// if sell token is same as buy token, unset buy token
282274
if (
283275
props.buyToken &&

0 commit comments

Comments
 (0)