diff --git a/packages/icons/general/ChevronUp.tsx b/packages/icons/general/ChevronUp.tsx index bd7adf50abdf..d3ef9e3b5ccb 100644 --- a/packages/icons/general/ChevronUp.tsx +++ b/packages/icons/general/ChevronUp.tsx @@ -4,6 +4,7 @@ export const ChevronUpIcon = createIcon( 'ChevronUpIcon', { if (!location.search) return undefined @@ -31,9 +27,5 @@ export function SwapBox() { history.replace(PopupRoutes.Swap) }, [chainId]) - return ( - - - - ) + return } diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeForm.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeForm.tsx index b4f37c027a5e..d2972806d1c5 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeForm.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/TradeForm.tsx @@ -70,6 +70,7 @@ const useStyles = makeStyles<{ isDashboard: boolean; isPopup: boolean }>()((them stroke: isDashboard ? theme.palette.text.primary : theme.palette.text.strong, transition: 'all 300ms', cursor: 'pointer', + color: theme.palette.text.primary, }, reverseChevron: { transform: 'rotate(-180deg)', diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx index f951af0f07b9..44fce936d616 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/Trader.tsx @@ -141,35 +141,33 @@ export function Trader(props: TraderProps) { useEffect(() => { if ( - inputToken && - inputToken?.type !== EthereumTokenType.Native && - inputTokenBalance_ && - !loadingInputTokenBalance - ) - dispatchTradeStore({ - type: AllProviderTradeActionType.UPDATE_INPUT_TOKEN_BALANCE, - balance: inputTokenBalance_, - }) + !inputToken || + inputToken.type === EthereumTokenType.Native || + !inputTokenBalance_ || + loadingInputTokenBalance + ) { + return + } + dispatchTradeStore({ + type: AllProviderTradeActionType.UPDATE_INPUT_TOKEN_BALANCE, + balance: inputTokenBalance_, + }) + }, [inputToken, inputTokenBalance_, loadingInputTokenBalance]) + + useEffect(() => { if ( - outputToken && - outputToken?.type !== EthereumTokenType.Native && - outputTokenBalance_ && - !loadingOutputTokenBalance + !outputToken || + outputToken.type === EthereumTokenType.Native || + !outputTokenBalance_ || + loadingOutputTokenBalance ) { - dispatchTradeStore({ - type: AllProviderTradeActionType.UPDATE_OUTPUT_TOKEN_BALANCE, - balance: outputTokenBalance_, - }) + return } - }, [ - inputToken, - outputToken, - inputTokenBalance_, - outputTokenBalance_, - loadingInputTokenBalance, - loadingOutputTokenBalance, - NATIVE_TOKEN_ADDRESS, - ]) + dispatchTradeStore({ + type: AllProviderTradeActionType.UPDATE_OUTPUT_TOKEN_BALANCE, + balance: outputTokenBalance_, + }) + }, [outputToken, outputTokenBalance_, loadingOutputTokenBalance]) // #region select token const excludeTokens = [inputToken, outputToken].filter(Boolean).map((x) => x?.address) as string[] @@ -324,7 +322,7 @@ export function Trader(props: TraderProps) { // #endregion // Query the balance of native tokens on target chain - useUpdateBalance(chainId, currentChainId) + useUpdateBalance(chainId) // #endregion // #region reset focused trade when chainId, inputToken, outputToken, inputAmount be changed diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/hooks/useUpdateBalance.ts b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/hooks/useUpdateBalance.ts index d94244c0f060..b3eda92e983b 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trader/hooks/useUpdateBalance.ts +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trader/hooks/useUpdateBalance.ts @@ -3,53 +3,53 @@ import { EthereumTokenType, isSameAddress, useAccount, - useProviderType, + useBalance, useTokenConstants, - useWeb3, } from '@masknet/web3-shared-evm' -import { useAsync } from 'react-use' +import { useEffect } from 'react' import { AllProviderTradeActionType, AllProviderTradeContext } from '../../../trader/useAllProviderTradeContext' -export function useUpdateBalance(chainId: ChainId, currentChainId: ChainId) { - const web3 = useWeb3({ chainId }) +export function useUpdateBalance(chainId: ChainId) { const currentAccount = useAccount() - const currentProvider = useProviderType() const { NATIVE_TOKEN_ADDRESS } = useTokenConstants() const { tradeState: [{ inputToken, outputToken }, dispatchTradeStore], } = AllProviderTradeContext.useContainer() + const balance = useBalance(chainId) - return useAsync(async () => { - if (!currentAccount) { - dispatchTradeStore({ - type: AllProviderTradeActionType.UPDATE_INPUT_TOKEN_BALANCE, - balance: '0', - }) + useEffect(() => { + if (currentAccount) return + dispatchTradeStore({ + type: AllProviderTradeActionType.UPDATE_INPUT_TOKEN_BALANCE, + balance: '0', + }) - dispatchTradeStore({ - type: AllProviderTradeActionType.UPDATE_OUTPUT_TOKEN_BALANCE, - balance: '0', - }) - return - } + dispatchTradeStore({ + type: AllProviderTradeActionType.UPDATE_OUTPUT_TOKEN_BALANCE, + balance: '0', + }) + return + }, [currentAccount]) - if (chainId && currentProvider && currentAccount) { - const balance = await web3.eth.getBalance(currentAccount) + useEffect(() => { + if (!currentAccount) return + const value = inputToken?.type === EthereumTokenType.Native ? balance.value : '0' + dispatchTradeStore({ + type: AllProviderTradeActionType.UPDATE_INPUT_TOKEN_BALANCE, + balance: value || '0', + }) + }, [currentAccount, inputToken?.type, balance.value]) - dispatchTradeStore({ - type: AllProviderTradeActionType.UPDATE_INPUT_TOKEN_BALANCE, - balance: inputToken?.type === EthereumTokenType.Native ? balance : '0', - }) - - dispatchTradeStore({ - type: AllProviderTradeActionType.UPDATE_OUTPUT_TOKEN_BALANCE, - balance: - isSameAddress(outputToken?.address, NATIVE_TOKEN_ADDRESS) || - outputToken?.type === EthereumTokenType.Native - ? balance - : '0', - }) - } - }, [web3, inputToken, outputToken, currentAccount, currentProvider, chainId, currentChainId, NATIVE_TOKEN_ADDRESS]) + useEffect(() => { + if (!currentAccount) return + const value = + outputToken?.type === EthereumTokenType.Native || isSameAddress(outputToken?.address, NATIVE_TOKEN_ADDRESS) + ? balance.value + : '0' + dispatchTradeStore({ + type: AllProviderTradeActionType.UPDATE_OUTPUT_TOKEN_BALANCE, + balance: value || '0', + }) + }, [currentAccount, outputToken?.type, outputToken?.address, balance.value]) } diff --git a/packages/mask/src/plugins/Trader/trader/useAllProviderTradeContext.ts b/packages/mask/src/plugins/Trader/trader/useAllProviderTradeContext.ts index dd89d35164b9..0f839f28252c 100644 --- a/packages/mask/src/plugins/Trader/trader/useAllProviderTradeContext.ts +++ b/packages/mask/src/plugins/Trader/trader/useAllProviderTradeContext.ts @@ -74,8 +74,8 @@ function reducer(state: AllProviderTradeState, action: AllProviderSwapAction): A export function useAllProviderTradeContext() { const [tradeStore, dispatchTradeStore] = useReducer(reducer, { inputAmount: '', - inputTokenBalance: '', - outputTokenBalance: '', + inputTokenBalance: '0', + outputTokenBalance: '0', }) const [temporarySlippage, setTemporarySlippage] = useState() const { inputAmount, inputToken, outputToken } = tradeStore diff --git a/packages/web3-shared/evm/hooks/useAssetsFromChain.ts b/packages/web3-shared/evm/hooks/useAssetsFromChain.ts index 4fb1bbd52aca..28d0a326453b 100644 --- a/packages/web3-shared/evm/hooks/useAssetsFromChain.ts +++ b/packages/web3-shared/evm/hooks/useAssetsFromChain.ts @@ -4,7 +4,7 @@ import { Asset, ChainId, EthereumTokenType, FungibleTokenDetailed } from '../typ import { useTokensBalance } from './useTokensBalance' import { useChainDetailed } from './useChainDetailed' import { getChainDetailed, EMPTY_LIST } from '../utils' -import { useBalance } from '.' +import { useBalance } from './useBalance' export function useAssetsFromChain(tokens: FungibleTokenDetailed[], chainId?: ChainId) { const { value: balance = '0' } = useBalance(chainId)