Commit f0e1e921 authored by Moody Salem's avatar Moody Salem

Move trade price formatting to its own component

parent fcb012cb
import React from 'react'
import { Trade } from '@uniswap/sdk'
import { useContext } from 'react'
import { Repeat } from 'react-feather'
import { Text } from 'rebass'
import { ThemeContext } from 'styled-components'
import { StyledBalanceMaxMini } from './styleds'
interface TradePriceProps {
trade?: Trade
showInverted: boolean
setShowInverted: (showInverted: boolean) => void
}
export default function TradePrice({ trade, showInverted, setShowInverted }: TradePriceProps) {
const theme = useContext(ThemeContext)
const inputToken = trade?.inputAmount?.token
const outputToken = trade?.outputAmount?.token
const price = showInverted
? trade?.executionPrice?.toSignificant(6)
: trade?.executionPrice?.invert()?.toSignificant(6)
const label = showInverted
? `${outputToken?.symbol} per ${inputToken?.symbol}`
: `${inputToken?.symbol} per ${outputToken?.symbol}`
return (
<Text
fontWeight={500}
fontSize={14}
color={theme.text2}
style={{ justifyContent: 'center', alignItems: 'center', display: 'flex' }}
>
{price && `${price} ${label}`}
<StyledBalanceMaxMini onClick={() => setShowInverted(!showInverted)}>
<Repeat size={14} />
</StyledBalanceMaxMini>
</Text>
)
}
import { JSBI, TokenAmount, WETH } from '@uniswap/sdk' import { JSBI, TokenAmount, WETH } from '@uniswap/sdk'
import React, { useContext, useEffect, useState } from 'react' import React, { useContext, useEffect, useState } from 'react'
import { ArrowDown, Repeat } from 'react-feather' import { ArrowDown } from 'react-feather'
import ReactGA from 'react-ga' import ReactGA from 'react-ga'
import { RouteComponentProps } from 'react-router-dom' import { RouteComponentProps } from 'react-router-dom'
import { Text } from 'rebass' import { Text } from 'rebass'
...@@ -16,15 +16,8 @@ import { AutoRow, RowBetween, RowFixed } from '../../components/Row' ...@@ -16,15 +16,8 @@ import { AutoRow, RowBetween, RowFixed } from '../../components/Row'
import AdvancedSwapDetailsDropdown from '../../components/swap/AdvancedSwapDetailsDropdown' import AdvancedSwapDetailsDropdown from '../../components/swap/AdvancedSwapDetailsDropdown'
import FormattedPriceImpact from '../../components/swap/FormattedPriceImpact' import FormattedPriceImpact from '../../components/swap/FormattedPriceImpact'
import SwapModalFooter from '../../components/swap/SwapModalFooter' import SwapModalFooter from '../../components/swap/SwapModalFooter'
import { import { ArrowWrapper, BottomGrouping, Dots, InputGroup, StyledNumerical, Wrapper } from '../../components/swap/styleds'
ArrowWrapper, import TradePrice from '../../components/swap/TradePrice'
BottomGrouping,
Dots,
InputGroup,
StyledBalanceMaxMini,
StyledNumerical,
Wrapper
} from '../../components/swap/styleds'
import { TransferModalHeader } from '../../components/swap/TransferModalHeader' import { TransferModalHeader } from '../../components/swap/TransferModalHeader'
import V1TradeLink from '../../components/swap/V1TradeLink' import V1TradeLink from '../../components/swap/V1TradeLink'
import TokenLogo from '../../components/TokenLogo' import TokenLogo from '../../components/TokenLogo'
...@@ -430,27 +423,7 @@ export default function Send({ location: { search } }: RouteComponentProps) { ...@@ -430,27 +423,7 @@ export default function Send({ location: { search } }: RouteComponentProps) {
<Text fontWeight={500} fontSize={14} color={theme.text2}> <Text fontWeight={500} fontSize={14} color={theme.text2}>
Price Price
</Text> </Text>
<Text <TradePrice showInverted={showInverted} setShowInverted={setShowInverted} trade={bestTrade} />
fontWeight={500}
fontSize={14}
color={theme.text2}
style={{ justifyContent: 'center', alignItems: 'center', display: 'flex' }}
>
{bestTrade && showInverted
? (bestTrade?.executionPrice?.invert()?.toSignificant(6) ?? '') +
' ' +
tokens[Field.INPUT]?.symbol +
' per ' +
tokens[Field.OUTPUT]?.symbol
: (bestTrade?.executionPrice?.toSignificant(6) ?? '') +
' ' +
tokens[Field.OUTPUT]?.symbol +
' per ' +
tokens[Field.INPUT]?.symbol}
<StyledBalanceMaxMini onClick={() => setShowInverted(!showInverted)}>
<Repeat size={14} />
</StyledBalanceMaxMini>
</Text>
</RowBetween> </RowBetween>
{bestTrade && severity > 1 && ( {bestTrade && severity > 1 && (
......
import { JSBI, TokenAmount, WETH } from '@uniswap/sdk' import { JSBI, TokenAmount, WETH } from '@uniswap/sdk'
import React, { useContext, useState } from 'react' import React, { useContext, useState } from 'react'
import { ArrowDown, Repeat } from 'react-feather' import { ArrowDown } from 'react-feather'
import ReactGA from 'react-ga' import ReactGA from 'react-ga'
import { RouteComponentProps } from 'react-router-dom' import { RouteComponentProps } from 'react-router-dom'
import { Text } from 'rebass' import { Text } from 'rebass'
...@@ -14,8 +14,9 @@ import QuestionHelper from '../../components/Question' ...@@ -14,8 +14,9 @@ import QuestionHelper from '../../components/Question'
import { RowBetween, RowFixed } from '../../components/Row' import { RowBetween, RowFixed } from '../../components/Row'
import AdvancedSwapDetailsDropdown from '../../components/swap/AdvancedSwapDetailsDropdown' import AdvancedSwapDetailsDropdown from '../../components/swap/AdvancedSwapDetailsDropdown'
import FormattedPriceImpact from '../../components/swap/FormattedPriceImpact' import FormattedPriceImpact from '../../components/swap/FormattedPriceImpact'
import { ArrowWrapper, BottomGrouping, Dots, StyledBalanceMaxMini, Wrapper } from '../../components/swap/styleds' import { ArrowWrapper, BottomGrouping, Dots, Wrapper } from '../../components/swap/styleds'
import SwapModalFooter from '../../components/swap/SwapModalFooter' import SwapModalFooter from '../../components/swap/SwapModalFooter'
import TradePrice from '../../components/swap/TradePrice'
import V1TradeLink from '../../components/swap/V1TradeLink' import V1TradeLink from '../../components/swap/V1TradeLink'
import { DEFAULT_DEADLINE_FROM_NOW, INITIAL_ALLOWED_SLIPPAGE, MIN_ETH } from '../../constants' import { DEFAULT_DEADLINE_FROM_NOW, INITIAL_ALLOWED_SLIPPAGE, MIN_ETH } from '../../constants'
import { useWeb3React } from '../../hooks' import { useWeb3React } from '../../hooks'
...@@ -227,27 +228,7 @@ export default function Swap({ location: { search } }: RouteComponentProps) { ...@@ -227,27 +228,7 @@ export default function Swap({ location: { search } }: RouteComponentProps) {
<Text fontWeight={500} fontSize={14} color={theme.text2}> <Text fontWeight={500} fontSize={14} color={theme.text2}>
Price Price
</Text> </Text>
<Text <TradePrice trade={bestTrade} showInverted={showInverted} setShowInverted={setShowInverted} />
fontWeight={500}
fontSize={14}
color={theme.text2}
style={{ justifyContent: 'center', alignItems: 'center', display: 'flex' }}
>
{bestTrade && showInverted
? (bestTrade?.executionPrice?.invert()?.toSignificant(6) ?? '') +
' ' +
tokens[Field.INPUT]?.symbol +
' per ' +
tokens[Field.OUTPUT]?.symbol
: (bestTrade?.executionPrice?.toSignificant(6) ?? '') +
' ' +
tokens[Field.OUTPUT]?.symbol +
' per ' +
tokens[Field.INPUT]?.symbol}
<StyledBalanceMaxMini onClick={() => setShowInverted(!showInverted)}>
<Repeat size={14} />
</StyledBalanceMaxMini>
</Text>
</RowBetween> </RowBetween>
{bestTrade && priceImpactSeverity > 1 && ( {bestTrade && priceImpactSeverity > 1 && (
......
...@@ -22,4 +22,3 @@ export const addSerializedPair = createAction<{ serializedPair: SerializedPair } ...@@ -22,4 +22,3 @@ export const addSerializedPair = createAction<{ serializedPair: SerializedPair }
export const removeSerializedPair = createAction<{ chainId: number; tokenAAddress: string; tokenBAddress: string }>( export const removeSerializedPair = createAction<{ chainId: number; tokenAAddress: string; tokenBAddress: string }>(
'removeSerializedPair' 'removeSerializedPair'
) )
export const dismissBetaMessage = createAction<void>('dismissBetaMessage')
...@@ -8,7 +8,6 @@ import { AppDispatch, AppState } from '../index' ...@@ -8,7 +8,6 @@ import { AppDispatch, AppState } from '../index'
import { import {
addSerializedPair, addSerializedPair,
addSerializedToken, addSerializedToken,
dismissBetaMessage,
removeSerializedToken, removeSerializedToken,
SerializedPair, SerializedPair,
SerializedToken, SerializedToken,
...@@ -35,18 +34,6 @@ function deserializeToken(serializedToken: SerializedToken): Token { ...@@ -35,18 +34,6 @@ function deserializeToken(serializedToken: SerializedToken): Token {
) )
} }
// this currently isn't used anywhere, but is kept as an example of how to store/update a simple boolean
export function useBetaMessageManager() {
const betaMessageDismissed = useSelector<AppState, boolean>(state => state.user.betaMessageDismissed)
const dispatch = useDispatch<AppDispatch>()
const wrappedDismissBetaMessage = useCallback(() => {
dispatch(dismissBetaMessage())
}, [dispatch])
return [!betaMessageDismissed, wrappedDismissBetaMessage]
}
export function useIsDarkMode(): boolean { export function useIsDarkMode(): boolean {
const { userDarkMode, matchesDarkMode } = useSelector<AppState, { userDarkMode: boolean; matchesDarkMode: boolean }>( const { userDarkMode, matchesDarkMode } = useSelector<AppState, { userDarkMode: boolean; matchesDarkMode: boolean }>(
({ user: { matchesDarkMode, userDarkMode } }) => ({ ({ user: { matchesDarkMode, userDarkMode } }) => ({
......
...@@ -19,8 +19,6 @@ interface UserState { ...@@ -19,8 +19,6 @@ interface UserState {
userDarkMode: boolean | null // the user's choice for dark mode or light mode userDarkMode: boolean | null // the user's choice for dark mode or light mode
matchesDarkMode: boolean // whether the dark mode media query matches matchesDarkMode: boolean // whether the dark mode media query matches
betaMessageDismissed: boolean
tokens: { tokens: {
[chainId: number]: { [chainId: number]: {
[address: string]: SerializedToken [address: string]: SerializedToken
...@@ -47,8 +45,6 @@ const initialState: UserState = { ...@@ -47,8 +45,6 @@ const initialState: UserState = {
userDarkMode: null, userDarkMode: null,
matchesDarkMode: false, matchesDarkMode: false,
betaMessageDismissed: false,
tokens: {}, tokens: {},
pairs: {}, pairs: {},
......
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