Commit 3439786c authored by Zach Pomerantz's avatar Zach Pomerantz Committed by GitHub

feat: display connecting state (#3713)

parent 6294915b
...@@ -32,6 +32,19 @@ function Caption({ icon: Icon = AlertTriangle, caption }: CaptionProps) { ...@@ -32,6 +32,19 @@ function Caption({ icon: Icon = AlertTriangle, caption }: CaptionProps) {
) )
} }
export function Connecting() {
return (
<Caption
icon={InlineSpinner}
caption={
<Loading>
<Trans>Connecting…</Trans>
</Loading>
}
/>
)
}
export function ConnectWallet() { export function ConnectWallet() {
return <Caption caption={<Trans>Connect wallet to swap</Trans>} /> return <Caption caption={<Trans>Connect wallet to swap</Trans>} />
} }
......
...@@ -17,8 +17,8 @@ const ToolbarRow = styled(Row)` ...@@ -17,8 +17,8 @@ const ToolbarRow = styled(Row)`
${largeIconCss} ${largeIconCss}
` `
export default memo(function Toolbar({ disabled }: { disabled?: boolean }) { export default memo(function Toolbar() {
const { chainId } = useActiveWeb3React() const { active, activating, chainId } = useActiveWeb3React()
const { const {
[Field.INPUT]: { currency: inputCurrency, balance: inputBalance, amount: inputAmount }, [Field.INPUT]: { currency: inputCurrency, balance: inputBalance, amount: inputAmount },
[Field.OUTPUT]: { currency: outputCurrency, usdc: outputUSDC }, [Field.OUTPUT]: { currency: outputCurrency, usdc: outputUSDC },
...@@ -28,7 +28,8 @@ export default memo(function Toolbar({ disabled }: { disabled?: boolean }) { ...@@ -28,7 +28,8 @@ export default memo(function Toolbar({ disabled }: { disabled?: boolean }) {
const isAmountPopulated = useIsAmountPopulated() const isAmountPopulated = useIsAmountPopulated()
const { type: wrapType } = useWrapCallback() const { type: wrapType } = useWrapCallback()
const caption = useMemo(() => { const caption = useMemo(() => {
if (disabled || !chainId) { if (!active || !chainId) {
if (activating) return <Caption.Connecting />
return <Caption.ConnectWallet /> return <Caption.ConnectWallet />
} }
...@@ -59,8 +60,9 @@ export default memo(function Toolbar({ disabled }: { disabled?: boolean }) { ...@@ -59,8 +60,9 @@ export default memo(function Toolbar({ disabled }: { disabled?: boolean }) {
return <Caption.Empty /> return <Caption.Empty />
}, [ }, [
activating,
active,
chainId, chainId,
disabled,
impact, impact,
inputAmount, inputAmount,
inputBalance, inputBalance,
......
...@@ -73,7 +73,7 @@ export default function Swap(props: SwapProps) { ...@@ -73,7 +73,7 @@ export default function Swap(props: SwapProps) {
<Input disabled={isDisabled} focused={focused} /> <Input disabled={isDisabled} focused={focused} />
<ReverseButton disabled={isDisabled} /> <ReverseButton disabled={isDisabled} />
<Output disabled={isDisabled} focused={focused}> <Output disabled={isDisabled} focused={focused}>
<Toolbar disabled={!active} /> <Toolbar />
<SwapButton disabled={isDisabled} /> <SwapButton disabled={isDisabled} />
</Output> </Output>
</SwapInfoProvider> </SwapInfoProvider>
......
...@@ -16,6 +16,7 @@ type Web3ContextType = { ...@@ -16,6 +16,7 @@ type Web3ContextType = {
accounts?: ReturnType<Web3ReactHooks['useAccounts']> accounts?: ReturnType<Web3ReactHooks['useAccounts']>
account?: ReturnType<Web3ReactHooks['useAccount']> account?: ReturnType<Web3ReactHooks['useAccount']>
active?: ReturnType<Web3ReactHooks['useIsActive']> active?: ReturnType<Web3ReactHooks['useIsActive']>
activating?: ReturnType<Web3ReactHooks['useIsActivating']>
error?: ReturnType<Web3ReactHooks['useError']> error?: ReturnType<Web3ReactHooks['useError']>
ensNames?: ReturnType<Web3ReactHooks['useENSNames']> ensNames?: ReturnType<Web3ReactHooks['useENSNames']>
ensName?: ReturnType<Web3ReactHooks['useENSName']> ensName?: ReturnType<Web3ReactHooks['useENSName']>
...@@ -82,17 +83,18 @@ export function ActiveWeb3Provider({ ...@@ -82,17 +83,18 @@ export function ActiveWeb3Provider({
const accounts = hooks.useAccounts() const accounts = hooks.useAccounts()
const account = hooks.useAccount() const account = hooks.useAccount()
const activating = hooks.useIsActivating()
const active = hooks.useIsActive() const active = hooks.useIsActive()
const chainId = hooks.useChainId() const chainId = hooks.useChainId()
const ensNames = hooks.useENSNames() const ensNames = hooks.useENSNames()
const ensName = hooks.useENSName() const ensName = hooks.useENSName()
const error = hooks.useError() const error = hooks.useError()
const web3 = useMemo(() => { const web3 = useMemo(() => {
if (connector === EMPTY || !active) { if (connector === EMPTY || !(active || activating)) {
return EMPTY_CONTEXT return EMPTY_CONTEXT
} }
return { connector, library, chainId, accounts, account, active, error, ensNames, ensName } return { connector, library, chainId, accounts, account, active, activating, error, ensNames, ensName }
}, [account, accounts, active, chainId, connector, ensName, ensNames, error, library]) }, [account, accounts, activating, active, chainId, connector, ensName, ensNames, error, library])
// Log web3 errors to facilitate debugging. // Log web3 errors to facilitate debugging.
useEffect(() => { useEffect(() => {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment