Commit 7a58ca81 authored by ian-jh's avatar ian-jh

resolve conflicts

parents 73042777 66604cf4
This diff is collapsed.
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
"noLiquidity": "No liquidity.", "noLiquidity": "No liquidity.",
"insufficientLiquidity": "Insufficient liquidity.", "insufficientLiquidity": "Insufficient liquidity.",
"unlockTokenCont": "Please unlock token to continue.", "unlockTokenCont": "Please unlock token to continue.",
"transactionDetails": "Transaction Details", "transactionDetails": "Advanced Details",
"hideDetails": "Hide Details", "hideDetails": "Hide Details",
"slippageWarning": "Slippage Warning", "slippageWarning": "Slippage Warning",
"highSlippageWarning": "High Slippage Warning", "highSlippageWarning": "High Slippage Warning",
...@@ -81,5 +81,5 @@ ...@@ -81,5 +81,5 @@
"decimals": "Decimals", "decimals": "Decimals",
"enterTokenCont": "Enter a token address to continue", "enterTokenCont": "Enter a token address to continue",
"priceChange": "Expected price slippage", "priceChange": "Expected price slippage",
"forAtLeast" : "for at least " "forAtLeast": "for at least "
} }
...@@ -21,7 +21,7 @@ const ContainerRow = styled.div` ...@@ -21,7 +21,7 @@ const ContainerRow = styled.div`
justify-content: center; justify-content: center;
align-items: center; align-items: center;
border-radius: 1.25rem; border-radius: 1.25rem;
box-shadow: 0 0 0 0.5px ${({ error, theme }) => (error ? theme.salmonRed : theme.mercuryGray)}; box-shadow: 0 0 0 1px ${({ error, theme }) => (error ? theme.salmonRed : theme.mercuryGray)};
background-color: ${({ theme }) => theme.white}; background-color: ${({ theme }) => theme.white};
transition: box-shadow 200ms ease-in-out; transition: box-shadow 200ms ease-in-out;
` `
......
...@@ -51,8 +51,8 @@ class ContextualInfo extends Component { ...@@ -51,8 +51,8 @@ class ContextualInfo extends Component {
} }
static defaultProps = { static defaultProps = {
openDetailsText: 'Transaction Details', openDetailsText: 'Advanced Details',
closeDetailsText: 'Hide Details', closeDetailsText: 'Hide Advanced',
renderTransactionDetails() {}, renderTransactionDetails() {},
contextualInfo: '', contextualInfo: '',
isError: false isError: false
......
...@@ -32,11 +32,10 @@ const SummaryWrapperContainer = styled.div` ...@@ -32,11 +32,10 @@ const SummaryWrapperContainer = styled.div`
const Details = styled.div` const Details = styled.div`
background-color: ${({ theme }) => theme.concreteGray}; background-color: ${({ theme }) => theme.concreteGray};
padding: 1.5rem; /* padding: 1.25rem 1.25rem 1rem 1.25rem; */
padding-bottom: 1rem;
border-radius: 1rem; border-radius: 1rem;
font-size: 0.75rem; font-size: 0.75rem;
margin-top: 1rem; margin: 1rem 0.5rem 0 0.5rem;
` `
const ErrorSpan = styled.span` const ErrorSpan = styled.span`
...@@ -86,11 +85,10 @@ const ColoredDropdown = styled(WrappedDropdown)` ...@@ -86,11 +85,10 @@ const ColoredDropdown = styled(WrappedDropdown)`
` `
export default function ContextualInfo({ export default function ContextualInfo({
openDetailsText = 'Transaction Details', openDetailsText = 'Advanced Details',
closeDetailsText = 'Hide Details', closeDetailsText = 'Hide Advanced',
contextualInfo = '', contextualInfo = '',
allowExpand = false, allowExpand = false,
renderTransactionDetails = () => {},
isError = false, isError = false,
slippageWarning, slippageWarning,
highSlippageWarning, highSlippageWarning,
......
...@@ -34,6 +34,7 @@ const SubCurrencySelect = styled.button` ...@@ -34,6 +34,7 @@ const SubCurrencySelect = styled.button`
outline: none; outline: none;
cursor: pointer; cursor: pointer;
user-select: none; user-select: none;
` `
const InputRow = styled.div` const InputRow = styled.div`
...@@ -70,7 +71,7 @@ const CurrencySelect = styled.button` ...@@ -70,7 +71,7 @@ const CurrencySelect = styled.button`
} }
:focus { :focus {
box-shadow: 0 0 0.5px 0.5px ${({ theme }) => theme.malibuBlue}; border: 1px solid ${({ theme }) => darken(0.1, theme.royalBlue)};
} }
:active { :active {
...@@ -104,12 +105,12 @@ const InputPanel = styled.div` ...@@ -104,12 +105,12 @@ const InputPanel = styled.div`
const Container = styled.div` const Container = styled.div`
border-radius: 1.25rem; border-radius: 1.25rem;
box-shadow: 0 0 0 0.5px ${({ error, theme }) => (error ? theme.salmonRed : theme.mercuryGray)}; box-shadow: 0 0 0 1px ${({ error, theme }) => (error ? theme.salmonRed : theme.mercuryGray)};
background-color: ${({ theme }) => theme.white}; background-color: ${({ theme }) => theme.white};
transition: box-shadow 200ms ease-in-out; transition: box-shadow 200ms ease-in-out;
:focus-within { :focus-within {
box-shadow: 0 0 0.5px 0.5px ${({ theme }) => theme.malibuBlue}; box-shadow: 0 0 1px 1px ${({ theme }) => theme.malibuBlue};
} }
` `
......
...@@ -5,8 +5,9 @@ import { DialogOverlay, DialogContent } from '@reach/dialog' ...@@ -5,8 +5,9 @@ import { DialogOverlay, DialogContent } from '@reach/dialog'
import '@reach/dialog/styles.css' import '@reach/dialog/styles.css'
const AnimatedDialogOverlay = animated(DialogOverlay) const AnimatedDialogOverlay = animated(DialogOverlay)
const StyledDialogOverlay = styled(AnimatedDialogOverlay).attrs({ const WrappedDialogOverlay = ({ suppressClassNameWarning, ...rest }) => <AnimatedDialogOverlay {...rest} />
suppressclassnamewarning: 'true' const StyledDialogOverlay = styled(WrappedDialogOverlay).attrs({
suppressClassNameWarning: true
})` })`
&[data-reach-dialog-overlay] { &[data-reach-dialog-overlay] {
z-index: 2; z-index: 2;
......
...@@ -5,7 +5,7 @@ import styled from 'styled-components' ...@@ -5,7 +5,7 @@ import styled from 'styled-components'
import { transparentize, darken } from 'polished' import { transparentize, darken } from 'polished'
import { useBodyKeyDown } from '../../hooks' import { useBodyKeyDown } from '../../hooks'
import { useBetaMessageManager } from '../../contexts/Application' import { useBetaMessageManager } from '../../contexts/LocalStorage'
const tabOrder = [ const tabOrder = [
{ {
...@@ -84,11 +84,11 @@ const StyledNavLink = styled(NavLink).attrs({ ...@@ -84,11 +84,11 @@ const StyledNavLink = styled(NavLink).attrs({
&.${activeClassName} { &.${activeClassName} {
background-color: ${({ theme }) => theme.white}; background-color: ${({ theme }) => theme.white};
border-radius: 3rem; border-radius: 3rem;
box-shadow: 0 0 0.5px 1px ${({ theme }) => theme.mercuryGray}; box-shadow: 0 0 1px 1px ${({ theme }) => theme.mercuryGray};
font-weight: 500; font-weight: 500;
color: ${({ theme }) => theme.royalBlue}; color: ${({ theme }) => theme.royalBlue};
:hover { :hover {
box-shadow: 0 0 0.5px 1px ${({ theme }) => darken(0.1, theme.mercuryGray)}; box-shadow: 0 0 1px 1px ${({ theme }) => darken(0.1, theme.mercuryGray)};
} }
} }
......
This diff is collapsed.
...@@ -5,7 +5,7 @@ import { useWeb3Context, Connectors } from 'web3-react' ...@@ -5,7 +5,7 @@ import { useWeb3Context, Connectors } from 'web3-react'
import { darken, transparentize } from 'polished' import { darken, transparentize } from 'polished'
import Jazzicon from 'jazzicon' import Jazzicon from 'jazzicon'
import { ethers } from 'ethers' import { ethers } from 'ethers'
import { Activity, ArrowRight } from 'react-feather' import { Activity } from 'react-feather'
import { shortenAddress } from '../../utils' import { shortenAddress } from '../../utils'
import { useENSName } from '../../hooks' import { useENSName } from '../../hooks'
...@@ -91,13 +91,6 @@ const NetworkIcon = styled(Activity)` ...@@ -91,13 +91,6 @@ const NetworkIcon = styled(Activity)`
height: 16px; height: 16px;
` `
const ArrowIcon = styled(ArrowRight)`
margin-left: 0.25rem;
margin-right: 0.5rem;
width: 16px;
height: 16px;
`
const SpinnerWrapper = styled(Spinner)` const SpinnerWrapper = styled(Spinner)`
margin: 0 0.25rem 0 0.25rem; margin: 0 0.25rem 0 0.25rem;
` `
...@@ -251,7 +244,6 @@ export default function Web3Status() { ...@@ -251,7 +244,6 @@ export default function Web3Status() {
return ( return (
<Web3StatusConnect onClick={onClick}> <Web3StatusConnect onClick={onClick}>
<Text>{t('Connect')}</Text> <Text>{t('Connect')}</Text>
<ArrowIcon />
</Web3StatusConnect> </Web3StatusConnect>
) )
} else { } else {
......
...@@ -2,10 +2,8 @@ import React, { createContext, useContext, useReducer, useMemo, useCallback, use ...@@ -2,10 +2,8 @@ import React, { createContext, useContext, useReducer, useMemo, useCallback, use
import { useWeb3Context } from 'web3-react' import { useWeb3Context } from 'web3-react'
import { safeAccess } from '../utils' import { safeAccess } from '../utils'
const SHOW_BETA_MESSAGE = 'SHOW_BETA_MESSAGE'
const BLOCK_NUMBERS = 'BLOCK_NUMBERS' const BLOCK_NUMBERS = 'BLOCK_NUMBERS'
const DISMISS_BETA_MESSAGE = 'DISMISS_BETA_MESSAGE'
const UPDATE_BLOCK_NUMBER = 'UPDATE_BLOCK_NUMBER' const UPDATE_BLOCK_NUMBER = 'UPDATE_BLOCK_NUMBER'
const ApplicationContext = createContext() const ApplicationContext = createContext()
...@@ -16,12 +14,6 @@ function useApplicationContext() { ...@@ -16,12 +14,6 @@ function useApplicationContext() {
function reducer(state, { type, payload }) { function reducer(state, { type, payload }) {
switch (type) { switch (type) {
case DISMISS_BETA_MESSAGE: {
return {
...state,
[SHOW_BETA_MESSAGE]: false
}
}
case UPDATE_BLOCK_NUMBER: { case UPDATE_BLOCK_NUMBER: {
const { networkId, blockNumber } = payload const { networkId, blockNumber } = payload
return { return {
...@@ -40,25 +32,15 @@ function reducer(state, { type, payload }) { ...@@ -40,25 +32,15 @@ function reducer(state, { type, payload }) {
export default function Provider({ children }) { export default function Provider({ children }) {
const [state, dispatch] = useReducer(reducer, { const [state, dispatch] = useReducer(reducer, {
[SHOW_BETA_MESSAGE]: true,
[BLOCK_NUMBERS]: {} [BLOCK_NUMBERS]: {}
}) })
const dismissBetaMessage = useCallback(() => {
dispatch({ type: DISMISS_BETA_MESSAGE })
}, [])
const updateBlockNumber = useCallback((networkId, blockNumber) => { const updateBlockNumber = useCallback((networkId, blockNumber) => {
dispatch({ type: UPDATE_BLOCK_NUMBER, payload: { networkId, blockNumber } }) dispatch({ type: UPDATE_BLOCK_NUMBER, payload: { networkId, blockNumber } })
}, []) }, [])
return ( return (
<ApplicationContext.Provider <ApplicationContext.Provider value={useMemo(() => [state, { updateBlockNumber }], [state, updateBlockNumber])}>
value={useMemo(() => [state, { dismissBetaMessage, updateBlockNumber }], [
state,
dismissBetaMessage,
updateBlockNumber
])}
>
{children} {children}
</ApplicationContext.Provider> </ApplicationContext.Provider>
) )
...@@ -101,12 +83,6 @@ export function Updater() { ...@@ -101,12 +83,6 @@ export function Updater() {
return null return null
} }
export function useBetaMessageManager() {
const [state, { dismissBetaMessage }] = useApplicationContext()
return [safeAccess(state, [SHOW_BETA_MESSAGE]), dismissBetaMessage]
}
export function useBlockNumber() { export function useBlockNumber() {
const { networkId } = useWeb3Context() const { networkId } = useWeb3Context()
......
import React, { createContext, useContext, useReducer, useMemo, useCallback, useEffect } from 'react'
const UNISWAP = 'UNISWAP'
const VERSION = 'VERSION'
const CURRENT_VERSION = 0
const LAST_SAVED = 'LAST_SAVED'
const BETA_MESSAGE_DISMISSED = 'BETA_MESSAGE_DISMISSED'
const UPDATABLE_KEYS = [BETA_MESSAGE_DISMISSED]
const UPDATE_KEY = 'UPDATE_KEY'
const LocalStorageContext = createContext()
function useLocalStorageContext() {
return useContext(LocalStorageContext)
}
function reducer(state, { type, payload }) {
switch (type) {
case UPDATE_KEY: {
const { key, value } = payload
if (!UPDATABLE_KEYS.some(k => k === key)) {
throw Error(`Unexpected key in LocalStorageContext reducer: '${key}'.`)
} else {
return {
...state,
[key]: value
}
}
}
default: {
throw Error(`Unexpected action type in LocalStorageContext reducer: '${type}'.`)
}
}
}
function init() {
const defaultLocalStorage = {
[VERSION]: CURRENT_VERSION,
[BETA_MESSAGE_DISMISSED]: false
}
try {
const parsed = JSON.parse(window.localStorage.getItem(UNISWAP))
if (parsed[VERSION] !== CURRENT_VERSION) {
// this is where we could run migration logic
return defaultLocalStorage
} else {
return parsed
}
} catch {
return defaultLocalStorage
}
}
export default function Provider({ children }) {
const [state, dispatch] = useReducer(reducer, undefined, init)
const updateKey = useCallback((key, value) => {
dispatch({ type: UPDATE_KEY, payload: { key, value } })
}, [])
return (
<LocalStorageContext.Provider value={useMemo(() => [state, { updateKey }], [state, updateKey])}>
{children}
</LocalStorageContext.Provider>
)
}
export function Updater() {
const [state] = useLocalStorageContext()
useEffect(() => {
window.localStorage.setItem(UNISWAP, JSON.stringify({ ...state, [LAST_SAVED]: Math.floor(Date.now() / 1000) }))
})
return null
}
export function useBetaMessageManager() {
const [state, { updateKey }] = useLocalStorageContext()
const dismissBetaMessage = useCallback(() => {
updateKey(BETA_MESSAGE_DISMISSED, true)
}, [updateKey])
return [!state[BETA_MESSAGE_DISMISSED], dismissBetaMessage]
}
...@@ -89,6 +89,14 @@ const INITIAL_TOKENS_CONTEXT = { ...@@ -89,6 +89,14 @@ const INITIAL_TOKENS_CONTEXT = {
[DECIMALS]: 9, [DECIMALS]: 9,
[EXCHANGE_ADDRESS]: '0xb92dE8B30584392Af27726D5ce04Ef3c4e5c9924' [EXCHANGE_ADDRESS]: '0xb92dE8B30584392Af27726D5ce04Ef3c4e5c9924'
}, },
'0xc719d010B63E5bbF2C0551872CD5316ED26AcD83': {
[NAME]: 'Decentralized Insurance Protocol',
[SYMBOL]: 'DIP',
[DECIMALS]: 18,
[EXCHANGE_ADDRESS]: '0x61792F290e5100FBBcBb2309F03A1Bab869fb850'
},
'0x4946Fcea7C692606e8908002e55A582af44AC121': { '0x4946Fcea7C692606e8908002e55A582af44AC121': {
[NAME]: 'FOAM Token', [NAME]: 'FOAM Token',
[SYMBOL]: 'FOAM', [SYMBOL]: 'FOAM',
...@@ -191,6 +199,12 @@ const INITIAL_TOKENS_CONTEXT = { ...@@ -191,6 +199,12 @@ const INITIAL_TOKENS_CONTEXT = {
[DECIMALS]: 18, [DECIMALS]: 18,
[EXCHANGE_ADDRESS]: '0x2C4Bd064b998838076fa341A83d007FC2FA50957' [EXCHANGE_ADDRESS]: '0x2C4Bd064b998838076fa341A83d007FC2FA50957'
}, },
'0xec67005c4E498Ec7f55E092bd1d35cbC47C91892': {
[NAME]: 'Melon Token',
[SYMBOL]: 'MLN',
[DECIMALS]: 18,
[EXCHANGE_ADDRESS]: '0xA931F4eB165AC307fD7431b5EC6eADde53E14b0C'
},
'0x957c30aB0426e0C93CD8241E2c60392d08c6aC8e': { '0x957c30aB0426e0C93CD8241E2c60392d08c6aC8e': {
[NAME]: 'Modum Token', [NAME]: 'Modum Token',
[SYMBOL]: 'MOD', [SYMBOL]: 'MOD',
......
...@@ -4,6 +4,7 @@ import ReactGA from 'react-ga' ...@@ -4,6 +4,7 @@ import ReactGA from 'react-ga'
import Web3Provider, { Connectors } from 'web3-react' import Web3Provider, { Connectors } from 'web3-react'
import ThemeProvider, { GlobalStyle } from './theme' import ThemeProvider, { GlobalStyle } from './theme'
import LocalStorageContextProvider, { Updater as LocalStorageContextUpdater } from './contexts/LocalStorage'
import ApplicationContextProvider, { Updater as ApplicationContextUpdater } from './contexts/Application' import ApplicationContextProvider, { Updater as ApplicationContextUpdater } from './contexts/Application'
import TransactionContextProvider, { Updater as TransactionContextUpdater } from './contexts/Transactions' import TransactionContextProvider, { Updater as TransactionContextUpdater } from './contexts/Transactions'
import TokensContextProvider from './contexts/Tokens' import TokensContextProvider from './contexts/Tokens'
...@@ -29,21 +30,24 @@ const connectors = { Injected, Network } ...@@ -29,21 +30,24 @@ const connectors = { Injected, Network }
function ContextProviders({ children }) { function ContextProviders({ children }) {
return ( return (
<ApplicationContextProvider> <LocalStorageContextProvider>
<TransactionContextProvider> <ApplicationContextProvider>
<TokensContextProvider> <TransactionContextProvider>
<BalancesContextProvider> <TokensContextProvider>
<AllowancesContextProvider>{children}</AllowancesContextProvider> <BalancesContextProvider>
</BalancesContextProvider> <AllowancesContextProvider>{children}</AllowancesContextProvider>
</TokensContextProvider> </BalancesContextProvider>
</TransactionContextProvider> </TokensContextProvider>
</ApplicationContextProvider> </TransactionContextProvider>
</ApplicationContextProvider>
</LocalStorageContextProvider>
) )
} }
function Updaters() { function Updaters() {
return ( return (
<> <>
<LocalStorageContextUpdater />
<ApplicationContextUpdater /> <ApplicationContextUpdater />
<TransactionContextUpdater /> <TransactionContextUpdater />
</> </>
......
...@@ -362,6 +362,7 @@ export default function AddLiquidity() { ...@@ -362,6 +362,7 @@ export default function AddLiquidity() {
}) })
const deadline = Math.ceil(Date.now() / 1000) + DEADLINE_FROM_NOW const deadline = Math.ceil(Date.now() / 1000) + DEADLINE_FROM_NOW
const estimatedGasLimit = await exchangeContract.estimate.addLiquidity( const estimatedGasLimit = await exchangeContract.estimate.addLiquidity(
isNewExchange ? ethers.constants.Zero : liquidityTokensMin, isNewExchange ? ethers.constants.Zero : liquidityTokensMin,
isNewExchange ? outputValueParsed : outputValueMax, isNewExchange ? outputValueParsed : outputValueMax,
...@@ -371,6 +372,8 @@ export default function AddLiquidity() { ...@@ -371,6 +372,8 @@ export default function AddLiquidity() {
} }
) )
const gasLimit = calculateGasMargin(estimatedGasLimit, GAS_MARGIN)
exchangeContract exchangeContract
.addLiquidity( .addLiquidity(
isNewExchange ? ethers.constants.Zero : liquidityTokensMin, isNewExchange ? ethers.constants.Zero : liquidityTokensMin,
...@@ -378,7 +381,7 @@ export default function AddLiquidity() { ...@@ -378,7 +381,7 @@ export default function AddLiquidity() {
deadline, deadline,
{ {
value: inputValueParsed, value: inputValueParsed,
gasLimit: calculateGasMargin(estimatedGasLimit, GAS_MARGIN) gasLimit
} }
) )
.then(response => { .then(response => {
......
...@@ -64,7 +64,7 @@ const StyledNavLink = styled(NavLink).attrs({ ...@@ -64,7 +64,7 @@ const StyledNavLink = styled(NavLink).attrs({
&.${activeClassName} { &.${activeClassName} {
background-color: ${({ theme }) => theme.white}; background-color: ${({ theme }) => theme.white};
border-radius: 3rem; border-radius: 3rem;
box-shadow: 0 0 0.5px 0.5px ${({ theme }) => theme.mercuryGray}; box-shadow: 0 0 1px 1px ${({ theme }) => theme.mercuryGray};
font-weight: 500; font-weight: 500;
color: ${({ theme }) => theme.royalBlue}; color: ${({ theme }) => theme.royalBlue};
} }
......
import styled, { keyframes } from 'styled-components' import styled, { keyframes } from 'styled-components'
import { lighten, darken } from 'polished' import { darken } from 'polished'
export const Button = styled.button.attrs(({ warning, theme }) => ({ export const Button = styled.button.attrs(({ warning, theme }) => ({
backgroundColor: warning ? theme.salmonRed : theme.royalBlue backgroundColor: warning ? theme.salmonRed : theme.royalBlue
...@@ -18,11 +18,11 @@ export const Button = styled.button.attrs(({ warning, theme }) => ({ ...@@ -18,11 +18,11 @@ export const Button = styled.button.attrs(({ warning, theme }) => ({
:hover, :hover,
:focus { :focus {
background-color: ${({ backgroundColor }) => lighten(0.05, backgroundColor)}; background-color: ${({ backgroundColor }) => darken(0.05, backgroundColor)};
} }
:active { :active {
background-color: ${({ backgroundColor }) => darken(0.05, backgroundColor)}; background-color: ${({ backgroundColor }) => darken(0.1, backgroundColor)};
} }
:disabled { :disabled {
......
...@@ -38,6 +38,9 @@ const theme = { ...@@ -38,6 +38,9 @@ const theme = {
chaliceGray: '#AEAEAE', chaliceGray: '#AEAEAE',
doveGray: '#737373', doveGray: '#737373',
mineshaftGray: '#2B2B2B', mineshaftGray: '#2B2B2B',
buttonOutlineGrey: '#f2f2f2',
//blacks
charcoalBlack: '#404040',
// blues // blues
zumthorBlue: '#EBF4FF', zumthorBlue: '#EBF4FF',
malibuBlue: '#5CA2FF', malibuBlue: '#5CA2FF',
...@@ -53,6 +56,7 @@ const theme = { ...@@ -53,6 +56,7 @@ const theme = {
// pink // pink
uniswapPink: '#DC6BE5', uniswapPink: '#DC6BE5',
connectedGreen: '#27AE60', connectedGreen: '#27AE60',
// media queries // media queries
mediaWidth: mediaWidthTemplates, mediaWidth: mediaWidthTemplates,
// css snippets // css snippets
......
This diff is collapsed.
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