Refactor safe model
This commit is contained in:
parent
9ba01b3c56
commit
04bfe0a579
10
package.json
10
package.json
|
@ -33,7 +33,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@gnosis.pm/safe-contracts": "^1.0.0",
|
"@gnosis.pm/safe-contracts": "^1.0.0",
|
||||||
"@gnosis.pm/util-contracts": "2.0.4",
|
"@gnosis.pm/util-contracts": "2.0.4",
|
||||||
"@material-ui/core": "4.4.3",
|
"@material-ui/core": "4.5.0",
|
||||||
"@material-ui/icons": "4.4.3",
|
"@material-ui/icons": "4.4.3",
|
||||||
"@testing-library/jest-dom": "4.1.0",
|
"@testing-library/jest-dom": "4.1.0",
|
||||||
"@welldone-software/why-did-you-render": "3.3.5",
|
"@welldone-software/why-did-you-render": "3.3.5",
|
||||||
|
@ -119,7 +119,7 @@
|
||||||
"ethereumjs-abi": "0.6.8",
|
"ethereumjs-abi": "0.6.8",
|
||||||
"extract-text-webpack-plugin": "^4.0.0-beta.0",
|
"extract-text-webpack-plugin": "^4.0.0-beta.0",
|
||||||
"file-loader": "4.2.0",
|
"file-loader": "4.2.0",
|
||||||
"flow-bin": "0.108.0",
|
"flow-bin": "0.109.0",
|
||||||
"fs-extra": "8.1.0",
|
"fs-extra": "8.1.0",
|
||||||
"html-loader": "^0.5.5",
|
"html-loader": "^0.5.5",
|
||||||
"html-webpack-plugin": "^3.2.0",
|
"html-webpack-plugin": "^3.2.0",
|
||||||
|
@ -136,7 +136,7 @@
|
||||||
"storybook-host": "5.1.0",
|
"storybook-host": "5.1.0",
|
||||||
"storybook-router": "^0.3.4",
|
"storybook-router": "^0.3.4",
|
||||||
"style-loader": "1.0.0",
|
"style-loader": "1.0.0",
|
||||||
"truffle": "5.0.38",
|
"truffle": "5.0.39",
|
||||||
"truffle-contract": "4.0.31",
|
"truffle-contract": "4.0.31",
|
||||||
"truffle-solidity-loader": "0.1.32",
|
"truffle-solidity-loader": "0.1.32",
|
||||||
"uglifyjs-webpack-plugin": "2.2.0",
|
"uglifyjs-webpack-plugin": "2.2.0",
|
||||||
|
@ -144,7 +144,7 @@
|
||||||
"webpack": "4.41.0",
|
"webpack": "4.41.0",
|
||||||
"webpack-bundle-analyzer": "3.5.2",
|
"webpack-bundle-analyzer": "3.5.2",
|
||||||
"webpack-cli": "3.3.9",
|
"webpack-cli": "3.3.9",
|
||||||
"webpack-dev-server": "3.8.1",
|
"webpack-dev-server": "3.8.2",
|
||||||
"webpack-manifest-plugin": "2.1.2"
|
"webpack-manifest-plugin": "2.2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,10 +43,12 @@ const filterBy = (filter: string, tokens: List<Token>): List<Token> => tokens.fi
|
||||||
|
|
||||||
// OPTIMIZATION IDEA (Thanks Andre)
|
// OPTIMIZATION IDEA (Thanks Andre)
|
||||||
// Calculate active tokens on component mount, store it in component state
|
// Calculate active tokens on component mount, store it in component state
|
||||||
// After user closes modal, dispatch an action so we dont have 100500 actions
|
// After user closes modal, dispatch an action so we don't have 100500 actions
|
||||||
// And selectors dont recalculate
|
// And selectors don't recalculate
|
||||||
|
|
||||||
class Tokens extends React.Component<Props, State> {
|
class Tokens extends React.Component<Props, State> {
|
||||||
|
renderCount = 0
|
||||||
|
|
||||||
state = {
|
state = {
|
||||||
filter: '',
|
filter: '',
|
||||||
activeTokensAddresses: Set([]),
|
activeTokensAddresses: Set([]),
|
||||||
|
@ -78,7 +80,7 @@ class Tokens extends React.Component<Props, State> {
|
||||||
const { activeTokensAddresses } = this.state
|
const { activeTokensAddresses } = this.state
|
||||||
const { updateActiveTokens, safeAddress } = this.props
|
const { updateActiveTokens, safeAddress } = this.props
|
||||||
|
|
||||||
updateActiveTokens(safeAddress, activeTokensAddresses.toList())
|
updateActiveTokens(safeAddress, activeTokensAddresses)
|
||||||
}
|
}
|
||||||
|
|
||||||
onCancelSearch = () => {
|
onCancelSearch = () => {
|
||||||
|
@ -168,6 +170,7 @@ class Tokens extends React.Component<Props, State> {
|
||||||
<FixedSizeList
|
<FixedSizeList
|
||||||
height={413}
|
height={413}
|
||||||
width={500}
|
width={500}
|
||||||
|
overscanCount={process.env.NODE_ENV === 'test' ? 100 : 10}
|
||||||
itemCount={filteredTokens.size}
|
itemCount={filteredTokens.size}
|
||||||
itemData={itemData}
|
itemData={itemData}
|
||||||
itemSize={51}
|
itemSize={51}
|
||||||
|
|
|
@ -18,7 +18,6 @@ import { safeTransactionsSelector } from '~/routes/safe/store/selectors/index'
|
||||||
import { orderedTokenListSelector, tokensSelector } from '~/logic/tokens/store/selectors'
|
import { orderedTokenListSelector, tokensSelector } from '~/logic/tokens/store/selectors'
|
||||||
import { type Token } from '~/logic/tokens/store/model/token'
|
import { type Token } from '~/logic/tokens/store/model/token'
|
||||||
import { type Transaction, type TransactionStatus } from '~/routes/safe/store/models/transaction'
|
import { type Transaction, type TransactionStatus } from '~/routes/safe/store/models/transaction'
|
||||||
import { type TokenBalance } from '~/routes/safe/store/models/tokenBalance'
|
|
||||||
import { safeParamAddressSelector } from '../store/selectors'
|
import { safeParamAddressSelector } from '../store/selectors'
|
||||||
import { getEthAsToken } from '~/logic/tokens/utils/tokenHelpers'
|
import { getEthAsToken } from '~/logic/tokens/utils/tokenHelpers'
|
||||||
|
|
||||||
|
@ -84,14 +83,14 @@ const extendedSafeTokensSelector: Selector<GlobalState, RouterProps, List<Token>
|
||||||
safeBalancesSelector,
|
safeBalancesSelector,
|
||||||
tokensSelector,
|
tokensSelector,
|
||||||
safeEthAsTokenSelector,
|
safeEthAsTokenSelector,
|
||||||
(safeTokens: List<string>, balances: List<TokenBalance>, tokensList: Map<string, Token>, ethAsToken: Token) => {
|
(safeTokens: List<string>, balances: Map<string, string>, tokensList: Map<string, Token>, ethAsToken: Token) => {
|
||||||
const extendedTokens = Map().withMutations((map) => {
|
const extendedTokens = Map().withMutations((map) => {
|
||||||
safeTokens.forEach((tokenAddress: string) => {
|
safeTokens.forEach((tokenAddress: string) => {
|
||||||
const baseToken = tokensList.get(tokenAddress)
|
const baseToken = tokensList.get(tokenAddress)
|
||||||
const tokenBalance = balances.find((tknBalance) => tknBalance.address === tokenAddress)
|
const tokenBalance = balances.get(tokenAddress)
|
||||||
|
|
||||||
if (baseToken) {
|
if (baseToken) {
|
||||||
map.set(tokenAddress, baseToken.set('balance', tokenBalance ? tokenBalance.balance : '0'))
|
map.set(tokenAddress, baseToken.set('balance', tokenBalance || '0'))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
// @flow
|
// @flow
|
||||||
import type { Dispatch as ReduxDispatch } from 'redux'
|
import type { Dispatch as ReduxDispatch } from 'redux'
|
||||||
import { List } from 'immutable'
|
import { Map, List } from 'immutable'
|
||||||
import { BigNumber } from 'bignumber.js'
|
import { BigNumber } from 'bignumber.js'
|
||||||
import { type GlobalState } from '~/store/index'
|
import { type GlobalState } from '~/store/index'
|
||||||
import { type Token } from '~/logic/tokens/store/model/token'
|
import { type Token } from '~/logic/tokens/store/model/token'
|
||||||
import TokenBalanceRecord from '~/routes/safe/store/models/tokenBalance'
|
|
||||||
import { getStandardTokenContract } from '~/logic/tokens/store/actions/fetchTokens'
|
import { getStandardTokenContract } from '~/logic/tokens/store/actions/fetchTokens'
|
||||||
import updateSafe from './updateSafe'
|
import updateSafe from './updateSafe'
|
||||||
import { ETH_ADDRESS } from '~/logic/tokens/utils/tokenHelpers'
|
import { ETH_ADDRESS } from '~/logic/tokens/utils/tokenHelpers'
|
||||||
|
@ -36,13 +35,20 @@ const fetchTokenBalances = (safeAddress: string, tokens: List<Token>) => async (
|
||||||
const withBalances = await Promise.all(
|
const withBalances = await Promise.all(
|
||||||
tokens.map(async (token) => {
|
tokens.map(async (token) => {
|
||||||
const balance = await calculateBalanceOf(token.address, safeAddress, token.decimals)
|
const balance = await calculateBalanceOf(token.address, safeAddress, token.decimals)
|
||||||
return TokenBalanceRecord({
|
return {
|
||||||
address: token.address,
|
address: token.address,
|
||||||
balance,
|
balance,
|
||||||
})
|
}
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
dispatch(updateSafe({ address: safeAddress, balances: List(withBalances) }))
|
|
||||||
|
const balances = Map().withMutations((map) => {
|
||||||
|
withBalances.forEach(({ address, balance }) => {
|
||||||
|
map.set(address, balance)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
dispatch(updateSafe({ address: safeAddress, balances }))
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
console.error('Error when fetching token balances:', err)
|
console.error('Error when fetching token balances:', err)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// @flow
|
// @flow
|
||||||
import { List } from 'immutable'
|
import { Set } from 'immutable'
|
||||||
import type { Dispatch as ReduxDispatch } from 'redux'
|
import type { Dispatch as ReduxDispatch } from 'redux'
|
||||||
import { type GlobalState } from '~/store'
|
import { type GlobalState } from '~/store'
|
||||||
import updateSafe from './updateSafe'
|
import updateSafe from './updateSafe'
|
||||||
|
@ -14,7 +14,7 @@ import updateSafe from './updateSafe'
|
||||||
// },
|
// },
|
||||||
// })
|
// })
|
||||||
|
|
||||||
const updateActiveTokens = (safeAddress: string, activeTokens: List<string>) => async (
|
const updateActiveTokens = (safeAddress: string, activeTokens: Set<string>) => async (
|
||||||
dispatch: ReduxDispatch<GlobalState>,
|
dispatch: ReduxDispatch<GlobalState>,
|
||||||
) => {
|
) => {
|
||||||
dispatch(updateSafe({ address: safeAddress, activeTokens }))
|
dispatch(updateSafe({ address: safeAddress, activeTokens }))
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
// @flow
|
// @flow
|
||||||
import { List, Record } from 'immutable'
|
import {
|
||||||
|
List, Record, Map, Set,
|
||||||
|
} from 'immutable'
|
||||||
import type { RecordFactory, RecordOf } from 'immutable'
|
import type { RecordFactory, RecordOf } from 'immutable'
|
||||||
import type { Owner } from '~/routes/safe/store/models/owner'
|
import type { Owner } from '~/routes/safe/store/models/owner'
|
||||||
import TokenBalance from '~/routes/safe/store/models/tokenBalance'
|
|
||||||
|
|
||||||
export type SafeProps = {
|
export type SafeProps = {
|
||||||
name: string,
|
name: string,
|
||||||
address: string,
|
address: string,
|
||||||
threshold: number,
|
threshold: number,
|
||||||
owners: List<Owner>,
|
owners: List<Owner>,
|
||||||
balances?: List<TokenBalance>,
|
balances: Map<string, string>,
|
||||||
activeTokens?: List<string>,
|
activeTokens: Set<string>,
|
||||||
ethBalance?: string,
|
ethBalance?: string,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,8 +21,8 @@ const SafeRecord: RecordFactory<SafeProps> = Record({
|
||||||
threshold: 0,
|
threshold: 0,
|
||||||
ethBalance: 0,
|
ethBalance: 0,
|
||||||
owners: List([]),
|
owners: List([]),
|
||||||
activeTokens: List([]),
|
activeTokens: new Set([]),
|
||||||
balances: List([]),
|
balances: Map({}),
|
||||||
})
|
})
|
||||||
|
|
||||||
export type Safe = RecordOf<SafeProps>
|
export type Safe = RecordOf<SafeProps>
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
// @flow
|
|
||||||
import { Record } from 'immutable'
|
|
||||||
import type { RecordFactory, RecordOf } from 'immutable'
|
|
||||||
|
|
||||||
export type TokenBalanceProps = {
|
|
||||||
address: string,
|
|
||||||
balance: string,
|
|
||||||
}
|
|
||||||
|
|
||||||
const TokenBalanceRecord: RecordFactory<TokenBalanceProps> = Record({
|
|
||||||
address: '',
|
|
||||||
balance: '0',
|
|
||||||
})
|
|
||||||
|
|
||||||
export type TokenBalance = RecordOf<TokenBalanceProps>
|
|
||||||
|
|
||||||
export default TokenBalanceRecord
|
|
|
@ -1,9 +1,8 @@
|
||||||
// @flow
|
// @flow
|
||||||
import { Map, List } from 'immutable'
|
import { Map, Set } from 'immutable'
|
||||||
import { handleActions, type ActionType } from 'redux-actions'
|
import { handleActions, type ActionType } from 'redux-actions'
|
||||||
import { ADD_SAFE, buildOwnersFrom } from '~/routes/safe/store/actions/addSafe'
|
import { ADD_SAFE, buildOwnersFrom } from '~/routes/safe/store/actions/addSafe'
|
||||||
import SafeRecord, { type SafeProps } from '~/routes/safe/store/models/safe'
|
import SafeRecord, { type SafeProps } from '~/routes/safe/store/models/safe'
|
||||||
import TokenBalance from '~/routes/safe/store/models/tokenBalance'
|
|
||||||
import { makeOwner, type OwnerProps } from '~/routes/safe/store/models/owner'
|
import { makeOwner, type OwnerProps } from '~/routes/safe/store/models/owner'
|
||||||
import { UPDATE_SAFE } from '~/routes/safe/store/actions/updateSafe'
|
import { UPDATE_SAFE } from '~/routes/safe/store/actions/updateSafe'
|
||||||
import { ACTIVATE_TOKEN_FOR_ALL_SAFES } from '~/routes/safe/store/actions/activateTokenForAllSafes'
|
import { ACTIVATE_TOKEN_FOR_ALL_SAFES } from '~/routes/safe/store/actions/activateTokenForAllSafes'
|
||||||
|
@ -22,8 +21,8 @@ export const buildSafe = (storedSafe: SafeProps) => {
|
||||||
const names = storedSafe.owners.map((owner: OwnerProps) => owner.name)
|
const names = storedSafe.owners.map((owner: OwnerProps) => owner.name)
|
||||||
const addresses = storedSafe.owners.map((owner: OwnerProps) => owner.address)
|
const addresses = storedSafe.owners.map((owner: OwnerProps) => owner.address)
|
||||||
const owners = buildOwnersFrom(Array.from(names), Array.from(addresses))
|
const owners = buildOwnersFrom(Array.from(names), Array.from(addresses))
|
||||||
const activeTokens = List(storedSafe.activeTokens)
|
const activeTokens = Set(storedSafe.activeTokens)
|
||||||
const balances = storedSafe.balances.map((balance) => TokenBalance(balance))
|
const balances = Map(storedSafe.balances)
|
||||||
|
|
||||||
const safe: SafeProps = {
|
const safe: SafeProps = {
|
||||||
...storedSafe,
|
...storedSafe,
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
// @flow
|
// @flow
|
||||||
import { waitForElement } from '@testing-library/react'
|
import { waitForElement } from '@testing-library/react'
|
||||||
import { List } from 'immutable'
|
import { Set, Map } from 'immutable'
|
||||||
import { aNewStore } from '~/store'
|
import { aNewStore } from '~/store'
|
||||||
import { sleep } from '~/utils/timer'
|
import { sleep } from '~/utils/timer'
|
||||||
import { aMinedSafe } from '~/test/builder/safe.redux.builder'
|
import { aMinedSafe } from '~/test/builder/safe.redux.builder'
|
||||||
import { sendTokenTo, sendEtherTo } from '~/test/utils/tokenMovements'
|
import { sendTokenTo, sendEtherTo } from '~/test/utils/tokenMovements'
|
||||||
import { renderSafeView } from '~/test/builder/safe.dom.utils'
|
import { renderSafeView } from '~/test/builder/safe.dom.utils'
|
||||||
import { dispatchAddTokenToList } from '~/test/utils/transactions/moveTokens.helper'
|
import { dispatchAddTokenToList } from '~/test/utils/transactions/moveTokens.helper'
|
||||||
import TokenBalanceRecord from '~/routes/safe/store/models/tokenBalance'
|
|
||||||
import { calculateBalanceOf } from '~/routes/safe/store/actions/fetchTokenBalances'
|
import { calculateBalanceOf } from '~/routes/safe/store/actions/fetchTokenBalances'
|
||||||
import updateActiveTokens from '~/routes/safe/store/actions/updateActiveTokens'
|
import updateActiveTokens from '~/routes/safe/store/actions/updateActiveTokens'
|
||||||
import '@testing-library/jest-dom/extend-expect'
|
import '@testing-library/jest-dom/extend-expect'
|
||||||
|
@ -34,12 +33,11 @@ describe('DOM > Feature > Balances', () => {
|
||||||
const safeTokenBalance = await calculateBalanceOf(tokenAddress, safeAddress, 18)
|
const safeTokenBalance = await calculateBalanceOf(tokenAddress, safeAddress, 18)
|
||||||
expect(safeTokenBalance).toBe(tokensAmount)
|
expect(safeTokenBalance).toBe(tokensAmount)
|
||||||
|
|
||||||
const balanceAsRecord = TokenBalanceRecord({
|
const balances = Map({
|
||||||
address: tokenAddress,
|
[tokenAddress]: safeTokenBalance,
|
||||||
balance: safeTokenBalance,
|
|
||||||
})
|
})
|
||||||
store.dispatch(updateActiveTokens(safeAddress, List([tokenAddress])))
|
store.dispatch(updateActiveTokens(safeAddress, Set([tokenAddress])))
|
||||||
store.dispatch(updateSafe({ address: safeAddress, balances: List([balanceAsRecord]) }))
|
store.dispatch(updateSafe({ address: safeAddress, balances }))
|
||||||
await sleep(1000)
|
await sleep(1000)
|
||||||
|
|
||||||
const balanceRows = SafeDom.getAllByTestId(BALANCE_ROW_TEST_ID)
|
const balanceRows = SafeDom.getAllByTestId(BALANCE_ROW_TEST_ID)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// @flow
|
// @flow
|
||||||
import { fireEvent } from '@testing-library/react'
|
import { fireEvent } from '@testing-library/react'
|
||||||
import { List } from 'immutable'
|
import { Map, Set } from 'immutable'
|
||||||
import { aNewStore } from '~/store'
|
import { aNewStore } from '~/store'
|
||||||
import { aMinedSafe } from '~/test/builder/safe.redux.builder'
|
import { aMinedSafe } from '~/test/builder/safe.redux.builder'
|
||||||
import { sendTokenTo, sendEtherTo } from '~/test/utils/tokenMovements'
|
import { sendTokenTo, sendEtherTo } from '~/test/utils/tokenMovements'
|
||||||
|
@ -8,7 +8,6 @@ import { renderSafeView } from '~/test/builder/safe.dom.utils'
|
||||||
import { getWeb3, getBalanceInEtherOf } from '~/logic/wallets/getWeb3'
|
import { getWeb3, getBalanceInEtherOf } from '~/logic/wallets/getWeb3'
|
||||||
import { dispatchAddTokenToList } from '~/test/utils/transactions/moveTokens.helper'
|
import { dispatchAddTokenToList } from '~/test/utils/transactions/moveTokens.helper'
|
||||||
import { sleep } from '~/utils/timer'
|
import { sleep } from '~/utils/timer'
|
||||||
import TokenBalanceRecord from '~/routes/safe/store/models/tokenBalance'
|
|
||||||
import { calculateBalanceOf } from '~/routes/safe/store/actions/fetchTokenBalances'
|
import { calculateBalanceOf } from '~/routes/safe/store/actions/fetchTokenBalances'
|
||||||
import updateActiveTokens from '~/routes/safe/store/actions/updateActiveTokens'
|
import updateActiveTokens from '~/routes/safe/store/actions/updateActiveTokens'
|
||||||
import '@testing-library/jest-dom/extend-expect'
|
import '@testing-library/jest-dom/extend-expect'
|
||||||
|
@ -78,12 +77,12 @@ describe('DOM > Feature > Sending Funds', () => {
|
||||||
const safeTokenBalance = await calculateBalanceOf(tokenAddress, safeAddress, 18)
|
const safeTokenBalance = await calculateBalanceOf(tokenAddress, safeAddress, 18)
|
||||||
expect(safeTokenBalance).toBe(tokensAmount)
|
expect(safeTokenBalance).toBe(tokensAmount)
|
||||||
|
|
||||||
const balanceAsRecord = TokenBalanceRecord({
|
const balances = Map({
|
||||||
address: tokenAddress,
|
[tokenAddress]: safeTokenBalance,
|
||||||
balance: safeTokenBalance,
|
|
||||||
})
|
})
|
||||||
store.dispatch(updateActiveTokens(safeAddress, List([tokenAddress])))
|
|
||||||
store.dispatch(updateSafe({ address: safeAddress, balances: List([balanceAsRecord]) }))
|
store.dispatch(updateActiveTokens(safeAddress, Set([tokenAddress])))
|
||||||
|
store.dispatch(updateSafe({ address: safeAddress, balances }))
|
||||||
await sleep(1000)
|
await sleep(1000)
|
||||||
|
|
||||||
// Open send funds modal
|
// Open send funds modal
|
||||||
|
|
|
@ -39,17 +39,19 @@ describe('DOM > Feature > Sidebar', () => {
|
||||||
fireEvent.click(SafeDom.getByTestId(TOGGLE_SIDEBAR_BTN_TESTID))
|
fireEvent.click(SafeDom.getByTestId(TOGGLE_SIDEBAR_BTN_TESTID))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
await sleep(400)
|
||||||
|
|
||||||
const safes = SafeDom.getAllByTestId(SIDEBAR_SAFELIST_ROW_TESTID)
|
const safes = SafeDom.getAllByTestId(SIDEBAR_SAFELIST_ROW_TESTID)
|
||||||
expect(safes.length).toBe(2)
|
expect(safes.length).toBe(2)
|
||||||
|
|
||||||
expect(safes[1]).toContainElement(SafeDom.getByText('default'))
|
expect(safes[0]).toContainElement(SafeDom.getByText('default'))
|
||||||
expect(safes[0]).toContainElement(SafeDom.getByText('Make default'))
|
expect(safes[1]).toContainElement(SafeDom.getByText('Make default'))
|
||||||
|
|
||||||
act(() => {
|
act(() => {
|
||||||
fireEvent.click(SafeDom.getByText('Make default'))
|
fireEvent.click(SafeDom.getByText('Make default'))
|
||||||
})
|
})
|
||||||
|
|
||||||
expect(safes[0]).toContainElement(SafeDom.getByText('default'))
|
expect(safes[1]).toContainElement(SafeDom.getByText('default'))
|
||||||
expect(safes[1]).toContainElement(SafeDom.getByText('Make default'))
|
expect(safes[0]).toContainElement(SafeDom.getByText('Make default'))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// @flow
|
// @flow
|
||||||
|
import { waitForElement } from '@testing-library/react'
|
||||||
import { List } from 'immutable'
|
import { List } from 'immutable'
|
||||||
import { getWeb3 } from '~/logic/wallets/getWeb3'
|
import { getWeb3 } from '~/logic/wallets/getWeb3'
|
||||||
import { getFirstTokenContract, getSecondTokenContract } from '~/test/utils/tokenMovements'
|
import { getFirstTokenContract, getSecondTokenContract } from '~/test/utils/tokenMovements'
|
||||||
|
@ -52,26 +53,25 @@ describe('DOM > Feature > Enable and disable default tokens', () => {
|
||||||
|
|
||||||
// WHEN
|
// WHEN
|
||||||
const TokensDom = await renderSafeView(store, safeAddress)
|
const TokensDom = await renderSafeView(store, safeAddress)
|
||||||
await sleep(400)
|
|
||||||
|
|
||||||
// Check if only ETH is enabled
|
// Check if only ETH is enabled
|
||||||
let balanceRows = TokensDom.getAllByTestId(BALANCE_ROW_TEST_ID)
|
let balanceRows = await waitForElement(() => TokensDom.getAllByTestId(BALANCE_ROW_TEST_ID))
|
||||||
expect(balanceRows.length).toBe(1)
|
expect(balanceRows.length).toBe(1)
|
||||||
|
|
||||||
// THEN
|
// THEN
|
||||||
clickOnManageTokens(TokensDom)
|
clickOnManageTokens(TokensDom)
|
||||||
toggleToken(TokensDom, 'FTE')
|
await toggleToken(TokensDom, 'FTE')
|
||||||
toggleToken(TokensDom, 'STE')
|
await toggleToken(TokensDom, 'STE')
|
||||||
closeManageTokensModal(TokensDom)
|
closeManageTokensModal(TokensDom)
|
||||||
|
|
||||||
|
// Wait for active tokens to save
|
||||||
|
await sleep(1500)
|
||||||
|
|
||||||
// Check if tokens were enabled
|
// Check if tokens were enabled
|
||||||
balanceRows = TokensDom.getAllByTestId(BALANCE_ROW_TEST_ID)
|
balanceRows = TokensDom.getAllByTestId(BALANCE_ROW_TEST_ID)
|
||||||
expect(balanceRows.length).toBe(3)
|
expect(balanceRows.length).toBe(3)
|
||||||
expect(balanceRows[1]).toHaveTextContent('FTE')
|
expect(balanceRows[1]).toHaveTextContent('FTE')
|
||||||
expect(balanceRows[2]).toHaveTextContent('STE')
|
expect(balanceRows[2]).toHaveTextContent('STE')
|
||||||
|
|
||||||
await sleep(1000)
|
|
||||||
|
|
||||||
const tokensFromStorage = await getActiveTokens()
|
const tokensFromStorage = await getActiveTokens()
|
||||||
|
|
||||||
expect(Object.keys(tokensFromStorage)).toContain(firstErc20Token.address)
|
expect(Object.keys(tokensFromStorage)).toContain(firstErc20Token.address)
|
||||||
|
@ -79,9 +79,10 @@ describe('DOM > Feature > Enable and disable default tokens', () => {
|
||||||
|
|
||||||
// disable tokens
|
// disable tokens
|
||||||
clickOnManageTokens(TokensDom)
|
clickOnManageTokens(TokensDom)
|
||||||
toggleToken(TokensDom, 'FTE')
|
await toggleToken(TokensDom, 'FTE')
|
||||||
toggleToken(TokensDom, 'STE')
|
await toggleToken(TokensDom, 'STE')
|
||||||
closeManageTokensModal(TokensDom)
|
closeManageTokensModal(TokensDom)
|
||||||
|
await sleep(1500)
|
||||||
|
|
||||||
// check if tokens were disabled
|
// check if tokens were disabled
|
||||||
balanceRows = TokensDom.getAllByTestId(BALANCE_ROW_TEST_ID)
|
balanceRows = TokensDom.getAllByTestId(BALANCE_ROW_TEST_ID)
|
||||||
|
|
|
@ -1,32 +1,38 @@
|
||||||
// @flow
|
// @flow
|
||||||
import { fireEvent } from '@testing-library/react'
|
import { fireEvent, waitForElement, act } from '@testing-library/react'
|
||||||
import { MANAGE_TOKENS_BUTTON_TEST_ID } from '~/routes/safe/components/Balances'
|
import { MANAGE_TOKENS_BUTTON_TEST_ID } from '~/routes/safe/components/Balances'
|
||||||
import {
|
import { ADD_CUSTOM_TOKEN_BUTTON_TEST_ID } from '~/routes/safe/components/Balances/Tokens/screens/TokenList'
|
||||||
ADD_CUSTOM_TOKEN_BUTTON_TEST_ID,
|
import { TOGGLE_TOKEN_TEST_ID } from '~/routes/safe/components/Balances/Tokens/screens/TokenList/TokenRow'
|
||||||
TOGGLE_TOKEN_TEST_ID,
|
|
||||||
} from '~/routes/safe/components/Balances/Tokens/screens/TokenList'
|
|
||||||
import { MANAGE_TOKENS_MODAL_CLOSE_BUTTON_TEST_ID } from '~/routes/safe/components/Balances/Tokens'
|
import { MANAGE_TOKENS_MODAL_CLOSE_BUTTON_TEST_ID } from '~/routes/safe/components/Balances/Tokens'
|
||||||
|
|
||||||
export const clickOnManageTokens = (dom: any): void => {
|
export const clickOnManageTokens = (dom: any): void => {
|
||||||
const btn = dom.getByTestId(MANAGE_TOKENS_BUTTON_TEST_ID)
|
const btn = dom.getByTestId(MANAGE_TOKENS_BUTTON_TEST_ID)
|
||||||
|
|
||||||
|
act(() => {
|
||||||
fireEvent.click(btn)
|
fireEvent.click(btn)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const clickOnAddCustomToken = (dom: any): void => {
|
export const clickOnAddCustomToken = (dom: any): void => {
|
||||||
const btn = dom.getByTestId(ADD_CUSTOM_TOKEN_BUTTON_TEST_ID)
|
const btn = dom.getByTestId(ADD_CUSTOM_TOKEN_BUTTON_TEST_ID)
|
||||||
|
|
||||||
|
act(() => {
|
||||||
fireEvent.click(btn)
|
fireEvent.click(btn)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const toggleToken = (dom: any, symbol: string): void => {
|
export const toggleToken = async (dom: any, symbol: string): Promise<void> => {
|
||||||
const btn = dom.getByTestId(`${symbol}_${TOGGLE_TOKEN_TEST_ID}`)
|
const btn = await waitForElement(() => dom.getByTestId(`${symbol}_${TOGGLE_TOKEN_TEST_ID}`))
|
||||||
|
|
||||||
|
act(() => {
|
||||||
fireEvent.click(btn)
|
fireEvent.click(btn)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const closeManageTokensModal = (dom: any) => {
|
export const closeManageTokensModal = (dom: any) => {
|
||||||
const btn = dom.getByTestId(MANAGE_TOKENS_MODAL_CLOSE_BUTTON_TEST_ID)
|
const btn = dom.getByTestId(MANAGE_TOKENS_MODAL_CLOSE_BUTTON_TEST_ID)
|
||||||
|
|
||||||
|
act(() => {
|
||||||
fireEvent.click(btn)
|
fireEvent.click(btn)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
198
yarn.lock
198
yarn.lock
|
@ -1760,14 +1760,14 @@
|
||||||
"@types/istanbul-reports" "^1.1.1"
|
"@types/istanbul-reports" "^1.1.1"
|
||||||
"@types/yargs" "^13.0.0"
|
"@types/yargs" "^13.0.0"
|
||||||
|
|
||||||
"@material-ui/core@4.4.3":
|
"@material-ui/core@4.5.0":
|
||||||
version "4.4.3"
|
version "4.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.4.3.tgz#65665d2c4e9cb84e018774e1471f6d0417f4535e"
|
resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.5.0.tgz#7e57cc40988c71b6340e3b2569b47dbac1820351"
|
||||||
integrity sha512-Lz8sMFeCrtq5/pbhqClWFHpveL0huixjca0tw7uvh9xKKB7VyyYOyTu7RamSZLxb34UCSMPlobR+KK25Nqzkqw==
|
integrity sha512-UHVAjU+1uDtA+OMBNBHb4RlCZOu514XeYPafNJv+GTdXBDr1SCPK7yqRE6TV1/bulxlDusTgu5Q6BAUgpmO4MA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.4.4"
|
"@babel/runtime" "^7.4.4"
|
||||||
"@material-ui/styles" "^4.4.3"
|
"@material-ui/styles" "^4.5.0"
|
||||||
"@material-ui/system" "^4.4.3"
|
"@material-ui/system" "^4.5.0"
|
||||||
"@material-ui/types" "^4.1.1"
|
"@material-ui/types" "^4.1.1"
|
||||||
"@material-ui/utils" "^4.4.0"
|
"@material-ui/utils" "^4.4.0"
|
||||||
"@types/react-transition-group" "^4.2.0"
|
"@types/react-transition-group" "^4.2.0"
|
||||||
|
@ -1788,10 +1788,10 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.4.4"
|
"@babel/runtime" "^7.4.4"
|
||||||
|
|
||||||
"@material-ui/styles@^4.4.3":
|
"@material-ui/styles@^4.5.0":
|
||||||
version "4.4.3"
|
version "4.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.4.3.tgz#78239177723660093cc9a277db5759c01c693c2a"
|
resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.5.0.tgz#4e591b8d44c7ecce318634bd8ac652499b6c277a"
|
||||||
integrity sha512-kNUdHFWsrvWKIEPx8Xy2/qayqsGMrYmCMq+FIiJiYczVZl5hiS8j5+KayonnpVta/O+Dktk+cxWkVcgwtxMrHg==
|
integrity sha512-O0NSAECHK9f3DZK6wy56PZzp8b/7KSdfpJs8DSC7vnXUAoMPCTtchBKLzMtUsNlijiJFeJjSxNdQfjWXgyur5A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.4.4"
|
"@babel/runtime" "^7.4.4"
|
||||||
"@emotion/hash" "^0.7.1"
|
"@emotion/hash" "^0.7.1"
|
||||||
|
@ -1801,20 +1801,20 @@
|
||||||
csstype "^2.5.2"
|
csstype "^2.5.2"
|
||||||
deepmerge "^4.0.0"
|
deepmerge "^4.0.0"
|
||||||
hoist-non-react-statics "^3.2.1"
|
hoist-non-react-statics "^3.2.1"
|
||||||
jss "10.0.0-alpha.25"
|
jss "^10.0.0"
|
||||||
jss-plugin-camel-case "10.0.0-alpha.25"
|
jss-plugin-camel-case "^10.0.0"
|
||||||
jss-plugin-default-unit "10.0.0-alpha.25"
|
jss-plugin-default-unit "^10.0.0"
|
||||||
jss-plugin-global "10.0.0-alpha.25"
|
jss-plugin-global "^10.0.0"
|
||||||
jss-plugin-nested "10.0.0-alpha.25"
|
jss-plugin-nested "^10.0.0"
|
||||||
jss-plugin-props-sort "10.0.0-alpha.25"
|
jss-plugin-props-sort "^10.0.0"
|
||||||
jss-plugin-rule-value-function "10.0.0-alpha.25"
|
jss-plugin-rule-value-function "^10.0.0"
|
||||||
jss-plugin-vendor-prefixer "10.0.0-alpha.25"
|
jss-plugin-vendor-prefixer "^10.0.0"
|
||||||
prop-types "^15.7.2"
|
prop-types "^15.7.2"
|
||||||
|
|
||||||
"@material-ui/system@^4.4.3":
|
"@material-ui/system@^4.5.0":
|
||||||
version "4.4.3"
|
version "4.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.4.3.tgz#68ca8cf83614255fcd5b9d3a72ce8ee58a43a5c7"
|
resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.5.0.tgz#3235f5d7da8b8af4df425e4f065990c16dee8097"
|
||||||
integrity sha512-Cb05vLXsaCzssXD/iZKa0/qC6YOwbFWnYdnOEdkXZ3Fn2Ytz7rsnMgFejUSQV1luVhUBlEIm8DVz40N25WwW7w==
|
integrity sha512-vR0PbMTzLnuuVCoYNQ13zyhLa/4s/UA9P9JbNuHBOOkfrHn53ShINiG0v05EgfwizfULLtc7mNvsGAgIyyp/hQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.4.4"
|
"@babel/runtime" "^7.4.4"
|
||||||
deepmerge "^4.0.0"
|
deepmerge "^4.0.0"
|
||||||
|
@ -8513,10 +8513,10 @@ flatted@^2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
|
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
|
||||||
integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
|
integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
|
||||||
|
|
||||||
flow-bin@0.108.0:
|
flow-bin@0.109.0:
|
||||||
version "0.108.0"
|
version "0.109.0"
|
||||||
resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.108.0.tgz#6a42c85fd664d23dd937d925851e8e6ab5d71393"
|
resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.109.0.tgz#dcdcb7402dd85b58200392d8716ccf14e5a8c24c"
|
||||||
integrity sha512-hPEyCP1J8rdhNDfCAA5w7bN6HUNBDcHVg/ABU5JVo0gUFMx+uRewpyEH8LlLBGjVQuIpbaPpaqpoaQhAVyaYww==
|
integrity sha512-tpcMTpAGIRivYhFV3KJq+zHI2HzcXo8MoGe9pXS4G/UZuey2Faq/e8/gdph2WF0erRlML5hmwfwiq7v9c25c7w==
|
||||||
|
|
||||||
flow-stoplight@^1.0.0:
|
flow-stoplight@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
|
@ -9744,7 +9744,7 @@ http-https@^1.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4"
|
resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4"
|
||||||
integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=
|
integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=
|
||||||
|
|
||||||
http-proxy-middleware@^0.19.1:
|
http-proxy-middleware@0.19.1:
|
||||||
version "0.19.1"
|
version "0.19.1"
|
||||||
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
|
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
|
||||||
integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==
|
integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==
|
||||||
|
@ -10070,10 +10070,10 @@ is-absolute-url@^2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
|
resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
|
||||||
integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
|
integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
|
||||||
|
|
||||||
is-absolute-url@^3.0.2:
|
is-absolute-url@^3.0.3:
|
||||||
version "3.0.2"
|
version "3.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.2.tgz#554f2933e7385cc46e94351977ca2081170a206e"
|
resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698"
|
||||||
integrity sha512-+5g/wLlcm1AcxSP7014m6GvbPHswDx980vD/3bZaap8aGV9Yfs7Q6y6tfaupgZ5O74Byzc8dGrSCJ+bFXx0KdA==
|
integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==
|
||||||
|
|
||||||
is-absolute@^1.0.0:
|
is-absolute@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
|
@ -11290,69 +11290,69 @@ jsqr@^1.2.0:
|
||||||
resolved "https://registry.yarnpkg.com/jsqr/-/jsqr-1.2.0.tgz#f93fc65fa7d1ded78b1bcb020fa044352b04261a"
|
resolved "https://registry.yarnpkg.com/jsqr/-/jsqr-1.2.0.tgz#f93fc65fa7d1ded78b1bcb020fa044352b04261a"
|
||||||
integrity sha512-wKcQS9QC2VHGk7aphWCp1RrFyC0CM6fMgC5prZZ2KV/Lk6OKNoCod9IR6bao+yx3KPY0gZFC5dc+h+KFzCI0Wg==
|
integrity sha512-wKcQS9QC2VHGk7aphWCp1RrFyC0CM6fMgC5prZZ2KV/Lk6OKNoCod9IR6bao+yx3KPY0gZFC5dc+h+KFzCI0Wg==
|
||||||
|
|
||||||
jss-plugin-camel-case@10.0.0-alpha.25:
|
jss-plugin-camel-case@^10.0.0:
|
||||||
version "10.0.0-alpha.25"
|
version "10.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.0-alpha.25.tgz#ea4389de47ccf3b4757f76e62cbb2e8b96b7a2c2"
|
resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.0.tgz#d601bae2e8e2041cc526add289dcd7062db0a248"
|
||||||
integrity sha512-J5ZEGDTy9ddqdTUPAF4SJQ25u5kiG1ORP8F+ZPEZAkkiMQJp+/Aol4I7xhTS2aW1Lhg8xNxdhdRfBi5yU7wOvg==
|
integrity sha512-yALDL00+pPR4FJh+k07A8FeDvfoPPuXU48HLy63enAubcVd3DnS+2rgqPXglHDGixIDVkCSXecl/l5GAMjzIbA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.3.1"
|
"@babel/runtime" "^7.3.1"
|
||||||
hyphenate-style-name "^1.0.3"
|
hyphenate-style-name "^1.0.3"
|
||||||
jss "10.0.0-alpha.25"
|
jss "10.0.0"
|
||||||
|
|
||||||
jss-plugin-default-unit@10.0.0-alpha.25:
|
jss-plugin-default-unit@^10.0.0:
|
||||||
version "10.0.0-alpha.25"
|
version "10.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.0-alpha.25.tgz#df5b39bbc0114146101bb3cf8bc7e281e3d0f454"
|
resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.0.tgz#601caf5f576fc0c66986fbe8a9aa37307a3a3ea3"
|
||||||
integrity sha512-auOG459B+yEqkojgaXH02SYO9+xjmAxlmP+WbzhVpXqOFJ2CN/kaxd8P4NJZLdj3BQxHiM7WIyMVh786StE+EA==
|
integrity sha512-sURozIOdCtGg9ap18erQ+ijndAfEGtTaetxfU3H4qwC18Bi+fdvjlY/ahKbuu0ASs7R/+WKCP7UaRZOjUDMcdQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.3.1"
|
"@babel/runtime" "^7.3.1"
|
||||||
jss "10.0.0-alpha.25"
|
jss "10.0.0"
|
||||||
|
|
||||||
jss-plugin-global@10.0.0-alpha.25:
|
jss-plugin-global@^10.0.0:
|
||||||
version "10.0.0-alpha.25"
|
version "10.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.0.0-alpha.25.tgz#2b6a6a14ef6cdb9994dbadf709e480d5c871b5f6"
|
resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.0.0.tgz#0fed1b6461e0d57d6e394f877529009bc1cb3cb6"
|
||||||
integrity sha512-cS98Q8X8jwltuaBZd9eYuxMXxkUL+mJGl2Ok3/nmJzH9nLzj6i7kLxSoDtuJNqsRmbP7ogIXVozJUq9lUu2hlQ==
|
integrity sha512-80ofWKSQUo62bxLtRoTNe0kFPtHgUbAJeOeR36WEGgWIBEsXLyXOnD5KNnjPqG4heuEkz9eSLccjYST50JnI7Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.3.1"
|
"@babel/runtime" "^7.3.1"
|
||||||
jss "10.0.0-alpha.25"
|
jss "10.0.0"
|
||||||
|
|
||||||
jss-plugin-nested@10.0.0-alpha.25:
|
jss-plugin-nested@^10.0.0:
|
||||||
version "10.0.0-alpha.25"
|
version "10.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.0.0-alpha.25.tgz#b8e29d336e1850047914511681d56330e3ea24ac"
|
resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.0.0.tgz#d37ecc013c3b0d0e4acc2b48f6b62da6ae53948b"
|
||||||
integrity sha512-7sk7/6mX1YTgXe+AyeD1zEyKTgIGbbhYtg+wWQcHJlE1flW2JHfcQ5mw84FgHcHQRQ8Dq3l9I3aEY51ev0J1Wg==
|
integrity sha512-waxxwl/po1hN3azTyixKnr8ReEqUv5WK7WsO+5AWB0bFndML5Yqnt8ARZ90HEg8/P6WlqE/AB2413TkCRZE8bA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.3.1"
|
"@babel/runtime" "^7.3.1"
|
||||||
jss "10.0.0-alpha.25"
|
jss "10.0.0"
|
||||||
tiny-warning "^1.0.2"
|
tiny-warning "^1.0.2"
|
||||||
|
|
||||||
jss-plugin-props-sort@10.0.0-alpha.25:
|
jss-plugin-props-sort@^10.0.0:
|
||||||
version "10.0.0-alpha.25"
|
version "10.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.0-alpha.25.tgz#dfaa1a6bf9863ae9593b99bf51cd26caea2fe0ec"
|
resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.0.tgz#38a13407384c2a4a7c026659488350669b953b18"
|
||||||
integrity sha512-8B/6QLQuUX8cIlZbXdjEm5l0jCX4EgacYMcFJhdKwDKEZYeAghpgQQrCKl0/CYHW7iFge5wim67P+uL6QxMzyw==
|
integrity sha512-41mf22CImjwNdtOG3r+cdC8+RhwNm616sjHx5YlqTwtSJLyLFinbQC/a4PIFk8xqf1qpFH1kEAIw+yx9HaqZ3g==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.3.1"
|
"@babel/runtime" "^7.3.1"
|
||||||
jss "10.0.0-alpha.25"
|
jss "10.0.0"
|
||||||
|
|
||||||
jss-plugin-rule-value-function@10.0.0-alpha.25:
|
jss-plugin-rule-value-function@^10.0.0:
|
||||||
version "10.0.0-alpha.25"
|
version "10.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.0-alpha.25.tgz#35350da52334a6031808e197526227434c194277"
|
resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.0.tgz#3ec1b781b7c86080136dbef6c36e91f20244b72e"
|
||||||
integrity sha512-CQQtWO+/OZRGaFRBSGQUgAci9YlVtdoXcWQKBNo70tmpp+kaXKlFNCYaL3jmHbJHMiwKQYG2RYFQNIrwJ9SGmA==
|
integrity sha512-Jw+BZ8JIw1f12V0SERqGlBT1JEPWax3vuZpMym54NAXpPb7R1LYHiCTIlaJUyqvIfEy3kiHMtgI+r2whGgRIxQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.3.1"
|
"@babel/runtime" "^7.3.1"
|
||||||
jss "10.0.0-alpha.25"
|
jss "10.0.0"
|
||||||
|
|
||||||
jss-plugin-vendor-prefixer@10.0.0-alpha.25:
|
jss-plugin-vendor-prefixer@^10.0.0:
|
||||||
version "10.0.0-alpha.25"
|
version "10.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.0-alpha.25.tgz#bc0c4b6dcb28d4801775cbad70ad9bc7e0c7707b"
|
resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.0.tgz#400280535b0f483a9c78105afe4eee61b70018eb"
|
||||||
integrity sha512-5FXpB/TiwckbrkoDCmd27YsWCESl1K4hAX/oro2/geEXgnVQvDgQOf2eWCsjYO2K1lYPPXtskMfws/Q3eKmbYg==
|
integrity sha512-qslqvL0MUbWuzXJWdUxpj6mdNUX8jr4FFTo3aZnAT65nmzWL7g8oTr9ZxmTXXgdp7ANhS1QWE7036/Q2isFBpw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.3.1"
|
"@babel/runtime" "^7.3.1"
|
||||||
css-vendor "^2.0.6"
|
css-vendor "^2.0.6"
|
||||||
jss "10.0.0-alpha.25"
|
jss "10.0.0"
|
||||||
|
|
||||||
jss@10.0.0-alpha.25:
|
jss@10.0.0, jss@^10.0.0:
|
||||||
version "10.0.0-alpha.25"
|
version "10.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/jss/-/jss-10.0.0-alpha.25.tgz#20a506d8159e3f6bd91e133d54ffd3df0ffd3010"
|
resolved "https://registry.yarnpkg.com/jss/-/jss-10.0.0.tgz#998d5026c02accae15708de83bd6ba57bac977d2"
|
||||||
integrity sha512-zqKnXv181B9vue2yYhmVhc+6ggbbxHF/33rjXfXEjaa22nOvknTI21QDfq3oZ8uCC50kcFp3Z8KU1ghUXdFvIA==
|
integrity sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.3.1"
|
"@babel/runtime" "^7.3.1"
|
||||||
csstype "^2.6.5"
|
csstype "^2.6.5"
|
||||||
|
@ -12650,10 +12650,10 @@ node-fetch@^2.6.0:
|
||||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
|
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
|
||||||
integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
|
integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
|
||||||
|
|
||||||
node-forge@0.8.2:
|
node-forge@0.9.0:
|
||||||
version "0.8.2"
|
version "0.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.8.2.tgz#b4bcc59fb12ce77a8825fc6a783dfe3182499c5a"
|
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
|
||||||
integrity sha512-mXQ9GBq1N3uDCyV1pdSzgIguwgtVpM7f5/5J4ipz12PKWElmPpVWLDuWl8iXmhysr21+WmX/OJ5UKx82wjomgg==
|
integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==
|
||||||
|
|
||||||
node-int64@^0.4.0:
|
node-int64@^0.4.0:
|
||||||
version "0.4.0"
|
version "0.4.0"
|
||||||
|
@ -15958,12 +15958,12 @@ select@^1.1.2:
|
||||||
resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
|
resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
|
||||||
integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
|
integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
|
||||||
|
|
||||||
selfsigned@^1.10.6:
|
selfsigned@^1.10.7:
|
||||||
version "1.10.6"
|
version "1.10.7"
|
||||||
resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.6.tgz#7b3cd37ed9c2034261a173af1a1aae27d8169b67"
|
resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b"
|
||||||
integrity sha512-i3+CeqxL7DpAazgVpAGdKMwHuL63B5nhJMh9NQ7xmChGkA3jNFflq6Jyo1LLJYcr3idWiNOPWHCrm4zMayLG4w==
|
integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==
|
||||||
dependencies:
|
dependencies:
|
||||||
node-forge "0.8.2"
|
node-forge "0.9.0"
|
||||||
|
|
||||||
semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0:
|
semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
|
@ -17865,10 +17865,10 @@ truffle-workflow-compile@^2.1.3:
|
||||||
truffle-external-compile "^1.0.15"
|
truffle-external-compile "^1.0.15"
|
||||||
truffle-resolver "^5.0.15"
|
truffle-resolver "^5.0.15"
|
||||||
|
|
||||||
truffle@5.0.38:
|
truffle@5.0.39:
|
||||||
version "5.0.38"
|
version "5.0.39"
|
||||||
resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.0.38.tgz#f306ad1bddea7ad87b795783da2ca9f19a8345dc"
|
resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.0.39.tgz#5710ba8f60a7184d9eb51d632308f2af0a2e8aff"
|
||||||
integrity sha512-RmbhEFROg+SGyQRM0tWk4NHUrS/uqHDTcc/ZY0k3JFd4cbr2vGD2csdWCfVW2/+SQ2qufXymurt9aRNvkpYQDA==
|
integrity sha512-2a17t4o6r0rNMpeQXBc51nXigtIaP9/sU8N2zflaazvzYgDgLMZfqh/dir2mTfyybOsrR47NL310p+6+c8u8VA==
|
||||||
dependencies:
|
dependencies:
|
||||||
app-module-path "^2.2.0"
|
app-module-path "^2.2.0"
|
||||||
mocha "5.2.0"
|
mocha "5.2.0"
|
||||||
|
@ -19623,10 +19623,10 @@ webpack-dev-middleware@^3.7.0:
|
||||||
range-parser "^1.2.1"
|
range-parser "^1.2.1"
|
||||||
webpack-log "^2.0.0"
|
webpack-log "^2.0.0"
|
||||||
|
|
||||||
webpack-dev-middleware@^3.7.1:
|
webpack-dev-middleware@^3.7.2:
|
||||||
version "3.7.1"
|
version "3.7.2"
|
||||||
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.1.tgz#1167aea02afa034489869b8368fe9fed1aea7d09"
|
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3"
|
||||||
integrity sha512-5MWu9SH1z3hY7oHOV6Kbkz5x7hXbxK56mGHNqHTe6d+ewxOwKUxoUJBs7QIaJb33lPjl9bJZ3X0vCoooUzC36A==
|
integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==
|
||||||
dependencies:
|
dependencies:
|
||||||
memory-fs "^0.4.1"
|
memory-fs "^0.4.1"
|
||||||
mime "^2.4.4"
|
mime "^2.4.4"
|
||||||
|
@ -19634,10 +19634,10 @@ webpack-dev-middleware@^3.7.1:
|
||||||
range-parser "^1.2.1"
|
range-parser "^1.2.1"
|
||||||
webpack-log "^2.0.0"
|
webpack-log "^2.0.0"
|
||||||
|
|
||||||
webpack-dev-server@3.8.1:
|
webpack-dev-server@3.8.2:
|
||||||
version "3.8.1"
|
version "3.8.2"
|
||||||
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.8.1.tgz#485b64c4aadc23f601e72114b40c1b1fea31d9f1"
|
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.8.2.tgz#3292427bf6510da9a3ac2d500b924a4197667ff9"
|
||||||
integrity sha512-9F5DnfFA9bsrhpUCAfQic/AXBVHvq+3gQS+x6Zj0yc1fVVE0erKh2MV4IV12TBewuTrYeeTIRwCH9qLMvdNvTw==
|
integrity sha512-0xxogS7n5jHDQWy0WST0q6Ykp7UGj4YvWh+HVN71JoE7BwPxMZrwgraBvmdEMbDVMBzF0u+mEzn8TQzBm5NYJQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
ansi-html "0.0.7"
|
ansi-html "0.0.7"
|
||||||
bonjour "^3.5.0"
|
bonjour "^3.5.0"
|
||||||
|
@ -19648,18 +19648,18 @@ webpack-dev-server@3.8.1:
|
||||||
del "^4.1.1"
|
del "^4.1.1"
|
||||||
express "^4.17.1"
|
express "^4.17.1"
|
||||||
html-entities "^1.2.1"
|
html-entities "^1.2.1"
|
||||||
http-proxy-middleware "^0.19.1"
|
http-proxy-middleware "0.19.1"
|
||||||
import-local "^2.0.0"
|
import-local "^2.0.0"
|
||||||
internal-ip "^4.3.0"
|
internal-ip "^4.3.0"
|
||||||
ip "^1.1.5"
|
ip "^1.1.5"
|
||||||
is-absolute-url "^3.0.2"
|
is-absolute-url "^3.0.3"
|
||||||
killable "^1.0.1"
|
killable "^1.0.1"
|
||||||
loglevel "^1.6.4"
|
loglevel "^1.6.4"
|
||||||
opn "^5.5.0"
|
opn "^5.5.0"
|
||||||
p-retry "^3.0.1"
|
p-retry "^3.0.1"
|
||||||
portfinder "^1.0.24"
|
portfinder "^1.0.24"
|
||||||
schema-utils "^1.0.0"
|
schema-utils "^1.0.0"
|
||||||
selfsigned "^1.10.6"
|
selfsigned "^1.10.7"
|
||||||
semver "^6.3.0"
|
semver "^6.3.0"
|
||||||
serve-index "^1.9.1"
|
serve-index "^1.9.1"
|
||||||
sockjs "0.3.19"
|
sockjs "0.3.19"
|
||||||
|
@ -19668,7 +19668,7 @@ webpack-dev-server@3.8.1:
|
||||||
strip-ansi "^3.0.1"
|
strip-ansi "^3.0.1"
|
||||||
supports-color "^6.1.0"
|
supports-color "^6.1.0"
|
||||||
url "^0.11.0"
|
url "^0.11.0"
|
||||||
webpack-dev-middleware "^3.7.1"
|
webpack-dev-middleware "^3.7.2"
|
||||||
webpack-log "^2.0.0"
|
webpack-log "^2.0.0"
|
||||||
ws "^6.2.1"
|
ws "^6.2.1"
|
||||||
yargs "12.0.5"
|
yargs "12.0.5"
|
||||||
|
@ -19691,10 +19691,10 @@ webpack-log@^2.0.0:
|
||||||
ansi-colors "^3.0.0"
|
ansi-colors "^3.0.0"
|
||||||
uuid "^3.3.2"
|
uuid "^3.3.2"
|
||||||
|
|
||||||
webpack-manifest-plugin@2.1.2:
|
webpack-manifest-plugin@2.2.0:
|
||||||
version "2.1.2"
|
version "2.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.1.2.tgz#990c448b4cfe1cf0b2dfad4a422264aabc4c98eb"
|
resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz#19ca69b435b0baec7e29fbe90fb4015de2de4f16"
|
||||||
integrity sha512-XWjPY0NXXJ1tGQZgtOMZtEsm8mST23nvO7q5e5H26NH4pv7wfYbHaX9Uwogve+IF6Ilv4j1e3hPr9N3JGZdilA==
|
integrity sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
fs-extra "^7.0.0"
|
fs-extra "^7.0.0"
|
||||||
lodash ">=3.5 <5"
|
lodash ">=3.5 <5"
|
||||||
|
|
Loading…
Reference in New Issue