From be116ecfbd687dffd5a1dfd2987a027b606e09cd Mon Sep 17 00:00:00 2001 From: sdtsui Date: Wed, 9 Aug 2017 21:40:01 -0700 Subject: Add new selectors for addresses, identities, and accounts --- ui/app/selectors.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 ui/app/selectors.js (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js new file mode 100644 index 000000000..749f18d3b --- /dev/null +++ b/ui/app/selectors.js @@ -0,0 +1,27 @@ +const selectors = { + getSelectedAddress, + getSelectedIdentity, + getSelectedAccount, +} + +module.exports = selectors + +function getSelectedAddress(state) { + const selectedAddress = state.metamask.selectedAddress || Object.keys(accounts)[0] + + return selectedAddress +} + +function getSelectedIdentity(state) { + const selectedAddress = getSelectedAddress(state) + const identities = state.metamask.identities + + return identities[selectedAddress] +} + +function getSelectedAccount(state) { + const accounts = state.metamask.accounts + const selectedAddress = getSelectedAddress(state) + + return accounts[selectedAddress] +} \ No newline at end of file -- cgit From 77b72ee33f1a8384a673b03969426a94d07914ee Mon Sep 17 00:00:00 2001 From: sdtsui Date: Thu, 10 Aug 2017 19:35:01 -0700 Subject: Add selectors for txsToRender and conversionRate --- ui/app/selectors.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index 749f18d3b..fd203dbb4 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -1,7 +1,11 @@ +const valuesFor = require('./util').valuesFor + const selectors = { getSelectedAddress, getSelectedIdentity, getSelectedAccount, + conversionRateSelector, + transactionsSelector, } module.exports = selectors @@ -24,4 +28,18 @@ function getSelectedAccount(state) { const selectedAddress = getSelectedAddress(state) return accounts[selectedAddress] +} + +function conversionRateSelector(state) { + return state.metamask.conversionRate +} + +function transactionsSelector(state) { + const { network } = state.metamask + const unapprovedMsgs = valuesFor(state.metamask.unapprovedMsgs) + const shapeShiftTxList = (network === '1') ? state.metamask.shapeShiftTxList : undefined + const transactions = state.metamask.selectedAddressTxList || [] + const txsToRender = !shapeShiftTxList ? transactions.concat(unapprovedMsgs) : transactions.concat(unapprovedMsgs, shapeShiftTxList) + + return txsToRender.sort((a, b) => b.time - a.time) } \ No newline at end of file -- cgit From e7b3ef0708290a81dad5c469adaa6fab3f1c45b5 Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 29 Aug 2017 12:20:48 -0230 Subject: Lint fixes --- ui/app/selectors.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index fd203dbb4..4ff3e33f2 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -10,31 +10,32 @@ const selectors = { module.exports = selectors -function getSelectedAddress(state) { +function getSelectedAddress (state) { + // TODO: accounts is not defined. Is it needed? const selectedAddress = state.metamask.selectedAddress || Object.keys(accounts)[0] return selectedAddress } -function getSelectedIdentity(state) { +function getSelectedIdentity (state) { const selectedAddress = getSelectedAddress(state) const identities = state.metamask.identities return identities[selectedAddress] } -function getSelectedAccount(state) { +function getSelectedAccount (state) { const accounts = state.metamask.accounts const selectedAddress = getSelectedAddress(state) return accounts[selectedAddress] } -function conversionRateSelector(state) { +function conversionRateSelector (state) { return state.metamask.conversionRate } -function transactionsSelector(state) { +function transactionsSelector (state) { const { network } = state.metamask const unapprovedMsgs = valuesFor(state.metamask.unapprovedMsgs) const shapeShiftTxList = (network === '1') ? state.metamask.shapeShiftTxList : undefined @@ -42,4 +43,4 @@ function transactionsSelector(state) { const txsToRender = !shapeShiftTxList ? transactions.concat(unapprovedMsgs) : transactions.concat(unapprovedMsgs, shapeShiftTxList) return txsToRender.sort((a, b) => b.time - a.time) -} \ No newline at end of file +} -- cgit From f1fb9e10a06d1811d97f61b6369684979b7ecf70 Mon Sep 17 00:00:00 2001 From: Chi Kei Chan Date: Wed, 6 Sep 2017 03:17:49 -0700 Subject: Adding Token transaction detail screen --- ui/app/selectors.js | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index 4ff3e33f2..400f5cd45 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -4,6 +4,7 @@ const selectors = { getSelectedAddress, getSelectedIdentity, getSelectedAccount, + getSelectedToken, conversionRateSelector, transactionsSelector, } @@ -31,6 +32,14 @@ function getSelectedAccount (state) { return accounts[selectedAddress] } +function getSelectedToken (state) { + const tokens = state.metamask.tokens || [] + const selectedTokenAddress = state.metamask.selectedTokenAddress + const selectedToken = tokens.filter(({ address }) => address === selectedTokenAddress)[0] + + return selectedToken || null +} + function conversionRateSelector (state) { return state.metamask.conversionRate } -- cgit From 983fa2a11721aa7d1307ef76d516e25a50d0eedf Mon Sep 17 00:00:00 2001 From: Chi Kei Chan Date: Thu, 7 Sep 2017 03:14:53 -0700 Subject: Add Contract Tx List Item; Update Token Tx on select --- ui/app/selectors.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index 400f5cd45..d8764b488 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -45,11 +45,16 @@ function conversionRateSelector (state) { } function transactionsSelector (state) { - const { network } = state.metamask + const { network, selectedTokenAddress } = state.metamask const unapprovedMsgs = valuesFor(state.metamask.unapprovedMsgs) const shapeShiftTxList = (network === '1') ? state.metamask.shapeShiftTxList : undefined const transactions = state.metamask.selectedAddressTxList || [] const txsToRender = !shapeShiftTxList ? transactions.concat(unapprovedMsgs) : transactions.concat(unapprovedMsgs, shapeShiftTxList) - return txsToRender.sort((a, b) => b.time - a.time) + return selectedTokenAddress + ? txsToRender + .filter(({ to }) => to === selectedTokenAddress) + .sort((a, b) => b.time - a.time) + : txsToRender + .sort((a, b) => b.time - a.time) } -- cgit From 272ade0f66e9513ceb242a3a14d52cb8bcb7b38e Mon Sep 17 00:00:00 2001 From: Chi Kei Chan Date: Thu, 7 Sep 2017 11:46:05 -0700 Subject: Fix .filter token tx --- ui/app/selectors.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index d8764b488..9a8bf5c7e 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -51,9 +51,10 @@ function transactionsSelector (state) { const transactions = state.metamask.selectedAddressTxList || [] const txsToRender = !shapeShiftTxList ? transactions.concat(unapprovedMsgs) : transactions.concat(unapprovedMsgs, shapeShiftTxList) + console.log({txsToRender, selectedTokenAddress}) return selectedTokenAddress ? txsToRender - .filter(({ to }) => to === selectedTokenAddress) + .filter(({ txParams: { to } }) => to === selectedTokenAddress) .sort((a, b) => b.time - a.time) : txsToRender .sort((a, b) => b.time - a.time) -- cgit From 45dbd017e65e5698db4580c77d723bface0e9b63 Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 2 Oct 2017 21:58:15 -0230 Subject: Add needed iterator in tx-list and path to account in selectors. --- ui/app/selectors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index 9a8bf5c7e..fdbc5fcde 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -13,7 +13,7 @@ module.exports = selectors function getSelectedAddress (state) { // TODO: accounts is not defined. Is it needed? - const selectedAddress = state.metamask.selectedAddress || Object.keys(accounts)[0] + const selectedAddress = state.metamask.selectedAddress || Object.keys(state.metamask.accounts)[0] return selectedAddress } -- cgit From 803eaaf968161f16aaf72d59b979dfbb7fb9b352 Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Fri, 13 Oct 2017 16:19:22 -0400 Subject: [NewUI] SendV2-#8: Send container handles tokens; gas info dynamic from state (#2364) * Adds memo field to send-v2. * Vertical align transaction with flexbox. * Customize Gas UI * Remove internal state from InputNumber and fix use in gastooltip. * Move customize-gas-modal to its own folder and minor cleanup * Create send container, get account info from state, and make currency display more reusable * Adjusts send-v2 and container for send-token. Dynamically getting suggested gas prices. --- ui/app/selectors.js | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index fdbc5fcde..951161510 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -5,14 +5,16 @@ const selectors = { getSelectedIdentity, getSelectedAccount, getSelectedToken, + getSelectedTokenExchangeRate, conversionRateSelector, transactionsSelector, + accountsWithSendEtherInfoSelector, + getCurrentAccountWithSendEtherInfo, } module.exports = selectors function getSelectedAddress (state) { - // TODO: accounts is not defined. Is it needed? const selectedAddress = state.metamask.selectedAddress || Object.keys(state.metamask.accounts)[0] return selectedAddress @@ -40,10 +42,41 @@ function getSelectedToken (state) { return selectedToken || null } +function getSelectedTokenExchangeRate (state) { + const tokenExchangeRates = state.metamask.tokenExchangeRates + const selectedToken = getSelectedToken(state) || {} + const { symbol = '' } = selectedToken + + const pair = `${symbol.toLowerCase()}_eth` + const { rate: tokenExchangeRate = 0 } = tokenExchangeRates[pair] || {} + + return tokenExchangeRate +} + function conversionRateSelector (state) { return state.metamask.conversionRate } +function accountsWithSendEtherInfoSelector (state) { + const { + accounts, + identities, + } = state.metamask + + const accountsWithSendEtherInfo = Object.entries(accounts).map(([key, account]) => { + return Object.assign({}, account, identities[key]) + }) + + return accountsWithSendEtherInfo +} + +function getCurrentAccountWithSendEtherInfo (state) { + const currentAddress = getSelectedAddress(state) + const accounts = accountsWithSendEtherInfoSelector(state) + + return accounts.find(({ address }) => address === currentAddress) +} + function transactionsSelector (state) { const { network, selectedTokenAddress } = state.metamask const unapprovedMsgs = valuesFor(state.metamask.unapprovedMsgs) -- cgit From a9244f5e426d6572ef135e07ab75a49c00e84942 Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 12 Oct 2017 14:12:14 -0230 Subject: Customize Gas connected to state --- ui/app/selectors.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index 951161510..bf3d3399e 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -10,6 +10,8 @@ const selectors = { transactionsSelector, accountsWithSendEtherInfoSelector, getCurrentAccountWithSendEtherInfo, + getGasPrice, + getGasLimit, } module.exports = selectors @@ -46,7 +48,7 @@ function getSelectedTokenExchangeRate (state) { const tokenExchangeRates = state.metamask.tokenExchangeRates const selectedToken = getSelectedToken(state) || {} const { symbol = '' } = selectedToken - + const pair = `${symbol.toLowerCase()}_eth` const { rate: tokenExchangeRate = 0 } = tokenExchangeRates[pair] || {} @@ -92,3 +94,11 @@ function transactionsSelector (state) { : txsToRender .sort((a, b) => b.time - a.time) } + +function getGasPrice (state) { + return state.metamask.send.gasPrice +} + +function getGasLimit (state) { + return state.metamask.send.gasLimit +} -- cgit From 4f9ac1c4fe67ec4c196ce1891ecc1743552d45ce Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 17 Oct 2017 13:16:36 -0230 Subject: Get from and update addressBook in send-v2 --- ui/app/selectors.js | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index bf3d3399e..fffe7dd61 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -12,6 +12,7 @@ const selectors = { getCurrentAccountWithSendEtherInfo, getGasPrice, getGasLimit, + getAddressBook, } module.exports = selectors @@ -59,6 +60,10 @@ function conversionRateSelector (state) { return state.metamask.conversionRate } +function getAddressBook (state) { + return state.metamask.addressBook +} + function accountsWithSendEtherInfoSelector (state) { const { accounts, -- cgit From f81226fbe9f98d5a6c408e289fa0ea61a467e7dc Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 17 Oct 2017 14:52:23 -0230 Subject: Move all of send state to metamask state. --- ui/app/selectors.js | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index fffe7dd61..9d4e6eb67 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -13,6 +13,7 @@ const selectors = { getGasPrice, getGasLimit, getAddressBook, + getSendFrom, } module.exports = selectors @@ -107,3 +108,7 @@ function getGasPrice (state) { function getGasLimit (state) { return state.metamask.send.gasLimit } + +function getSendFrom (state) { + return state.metamask.send.from +} -- cgit From 332c7441b656ec82ebfba863e3feb4dbf365d67b Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 18 Oct 2017 23:39:26 -0230 Subject: Get currency from state in account details, send and confirm screens. --- ui/app/selectors.js | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index 9d4e6eb67..1cfbc3975 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -14,6 +14,7 @@ const selectors = { getGasLimit, getAddressBook, getSendFrom, + getCurrentCurrency, } module.exports = selectors @@ -112,3 +113,7 @@ function getGasLimit (state) { function getSendFrom (state) { return state.metamask.send.from } + +function getCurrentCurrency (state) { + return state.metamask.currentCurrency +} -- cgit From 89af385a352daf66ad1a6fb3bba75676fd3b9e7f Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 18 Oct 2017 15:38:53 -0230 Subject: Fix handling of arithmetic on token gas in confirm-send-token. --- ui/app/selectors.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index 9d4e6eb67..8806a516f 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -6,6 +6,7 @@ const selectors = { getSelectedAccount, getSelectedToken, getSelectedTokenExchangeRate, + getTokenExchangeRate, conversionRateSelector, transactionsSelector, accountsWithSendEtherInfoSelector, @@ -57,7 +58,15 @@ function getSelectedTokenExchangeRate (state) { return tokenExchangeRate } -function conversionRateSelector (state) { +function getTokenExchangeRate (state, tokenSymbol) { + const pair = `${tokenSymbol.toLowerCase()}_eth` + const tokenExchangeRates = state.metamask.tokenExchangeRates + const { rate: tokenExchangeRate = 0 } = tokenExchangeRates[pair] || {} + + return tokenExchangeRate +} + +function conversionRateSelector (state) { return state.metamask.conversionRate } -- cgit From 376ae032fedb99d22b7c71438ec9482d2013c78e Mon Sep 17 00:00:00 2001 From: Chi Kei Chan Date: Thu, 19 Oct 2017 12:47:44 -0700 Subject: Fix selectors --- ui/app/selectors.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index 66b7c00e4..4c3d21d33 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -67,7 +67,7 @@ function getTokenExchangeRate (state, tokenSymbol) { return tokenExchangeRate } -function conversionRateSelector (state) { +function conversionRateSelector (state) { return state.metamask.conversionRate } @@ -102,7 +102,7 @@ function transactionsSelector (state) { const transactions = state.metamask.selectedAddressTxList || [] const txsToRender = !shapeShiftTxList ? transactions.concat(unapprovedMsgs) : transactions.concat(unapprovedMsgs, shapeShiftTxList) - console.log({txsToRender, selectedTokenAddress}) + // console.log({txsToRender, selectedTokenAddress}) return selectedTokenAddress ? txsToRender .filter(({ txParams: { to } }) => to === selectedTokenAddress) -- cgit From e737a9565a6b78639b74511d026339c1b54bca1a Mon Sep 17 00:00:00 2001 From: Dan Date: Sun, 22 Oct 2017 17:44:03 -0230 Subject: Improve customize gas modal error handling --- ui/app/selectors.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index 4c3d21d33..3a15cef4c 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -1,5 +1,9 @@ const valuesFor = require('./util').valuesFor +const { + multiplyCurrencies, +} = require('./conversion-util') + const selectors = { getSelectedAddress, getSelectedIdentity, @@ -16,6 +20,8 @@ const selectors = { getAddressBook, getSendFrom, getCurrentCurrency, + getSendAmount, + getSelectedTokenToFiatRate, } module.exports = selectors @@ -123,6 +129,23 @@ function getSendFrom (state) { return state.metamask.send.from } +function getSendAmount (state) { + return state.metamask.send.amount +} + function getCurrentCurrency (state) { return state.metamask.currentCurrency } + +function getSelectedTokenToFiatRate (state) { + const selectedTokenExchangeRate = getSelectedTokenExchangeRate(state) + const conversionRate = conversionRateSelector(state) + + const tokenToFiatRate = multiplyCurrencies( + conversionRate, + selectedTokenExchangeRate, + { toNumericBase: 'dec' } + ) + + return tokenToFiatRate +} -- cgit From 67bdfe87e31e695f8c4beab1659a3a4b764ccf24 Mon Sep 17 00:00:00 2001 From: Dan Date: Mon, 30 Oct 2017 15:18:50 -0230 Subject: Token balance in send state; validating sufficient tokens, validation updates on 'from' switching. --- ui/app/selectors.js | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index 3a15cef4c..a5f9a75d8 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -1,4 +1,5 @@ const valuesFor = require('./util').valuesFor +const abi = require('human-standard-token-abi') const { multiplyCurrencies, @@ -22,6 +23,7 @@ const selectors = { getCurrentCurrency, getSendAmount, getSelectedTokenToFiatRate, + getSelectedTokenContract, } module.exports = selectors @@ -149,3 +151,10 @@ function getSelectedTokenToFiatRate (state) { return tokenToFiatRate } + +function getSelectedTokenContract (state) { + const selectedToken = getSelectedToken(state) + return selectedToken + ? global.eth.contract(abi).at(selectedToken.address) + : null +} -- cgit From bd5ce9461e5119c13ab8be29db5cdfc57228bac8 Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 6 Dec 2017 20:49:45 -0330 Subject: User is automatically added to new UI if they meet conditions at time of login. --- ui/app/selectors.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index a5f9a75d8..8aea7864a 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -24,6 +24,7 @@ const selectors = { getSendAmount, getSelectedTokenToFiatRate, getSelectedTokenContract, + autoAddToBetaUI, } module.exports = selectors @@ -158,3 +159,20 @@ function getSelectedTokenContract (state) { ? global.eth.contract(abi).at(selectedToken.address) : null } + +function autoAddToBetaUI (state) { + const autoAddTransactionThreshold = 12 + const autoAddAccountsThreshold = 2 + const autoAddTokensThreshold = 1 + + const numberOfTransactions = state.metamask.selectedAddressTxList.length + const numberOfAccounts = Object.keys(state.metamask.accounts).length + const numberOfTokensAdded = state.metamask.tokens.length + + const userPassesThreshold = (numberOfTransactions > autoAddTransactionThreshold) && + (numberOfAccounts > autoAddAccountsThreshold) && + (numberOfTokensAdded > autoAddTokensThreshold) + const userIsNotInBeta = !state.metamask.featureFlags.betaUI + + return userIsNotInBeta && userPassesThreshold +} \ No newline at end of file -- cgit From 2e9137dddd4abd07cc45caa670f09bdc9559bbbb Mon Sep 17 00:00:00 2001 From: Dan Date: Thu, 16 Nov 2017 14:44:25 -0330 Subject: Update max amount behaviour to meet new specs. --- ui/app/selectors.js | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'ui/app/selectors.js') diff --git a/ui/app/selectors.js b/ui/app/selectors.js index a5f9a75d8..f891f70c0 100644 --- a/ui/app/selectors.js +++ b/ui/app/selectors.js @@ -24,6 +24,7 @@ const selectors = { getSendAmount, getSelectedTokenToFiatRate, getSelectedTokenContract, + getSendMaxModeState, } module.exports = selectors @@ -135,6 +136,10 @@ function getSendAmount (state) { return state.metamask.send.amount } +function getSendMaxModeState (state) { + return state.metamask.send.maxModeOn +} + function getCurrentCurrency (state) { return state.metamask.currentCurrency } -- cgit