From ea5d79d4c290d123effe4990161444e2a4704d23 Mon Sep 17 00:00:00 2001 From: Rihards Gravis <31288628+rihardsgravis@users.noreply.github.com> Date: Thu, 3 Jan 2019 08:39:32 +0200 Subject: [PATCH] Desktop: Realm Database implementation Desktop fixes (#874) * Desktop related fixes: - Fix balance setting in `Balance` and `Sidebar` components - Fix latest address retrieval - Fix notification function - Fix List component transaction list retrieval * Remove `reverse` from account address list * Mobile: Resolve lint errors * Revert 5291972 and fix eslint config (see eslint/eslint#11231) --- .eslintrc.yml | 1 + src/desktop/native/preload/Electron.js | 8 +- src/desktop/src/ui/components/Balance.js | 18 +++-- src/desktop/src/ui/components/List.js | 78 +++++++++---------- src/desktop/src/ui/global/Alerts.js | 2 +- .../ui/views/settings/account/Addresses.js | 17 ++-- .../ui/views/settings/account/addresses.scss | 6 ++ src/desktop/src/ui/views/wallet/Receive.js | 5 +- src/desktop/src/ui/views/wallet/Sidebar.js | 16 +++- src/shared/actions/accounts.js | 4 +- src/shared/actions/polling.js | 3 + src/shared/containers/components/List.js | 25 ++++-- src/shared/libs/iota/accounts.js | 9 ++- 13 files changed, 117 insertions(+), 75 deletions(-) diff --git a/.eslintrc.yml b/.eslintrc.yml index 88b0fa04bf..6fdbde3d7d 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -78,6 +78,7 @@ rules: no-throw-literal: 2 no-unmodified-loop-condition: 2 no-unused-expressions: [2, { "allowShortCircuit": true, "allowTernary": true }] + no-unused-vars: ["error", { "vars": "all", "args": "after-used", "ignoreRestSiblings": true, "argsIgnorePattern": "^_" }] no-useless-call: 2 no-useless-concat: 2 no-var: 2 diff --git a/src/desktop/native/preload/Electron.js b/src/desktop/native/preload/Electron.js index c6d6005f26..e69413d098 100644 --- a/src/desktop/native/preload/Electron.js +++ b/src/desktop/native/preload/Electron.js @@ -438,16 +438,14 @@ const Electron = { * @param {string} accountName - target account name * @param {array} transactions - new transactions * @param {array} confirmations - recently confirmed transactions + * @param {object} settings - wallet settings */ - notify: (accountName, transactions, confirmations) => { + notify: (accountName, transactions, confirmations, settings) => { if (!transactions.length && !confirmations.length) { return; } - const data = electronSettings.get('reduxPersist:settings'); - const settings = JSON.parse(data); - - if (!settings.notifications.general) { + if (!settings.notifications || !settings.notifications.general) { return; } diff --git a/src/desktop/src/ui/components/Balance.js b/src/desktop/src/ui/components/Balance.js index ce5d34c461..a576f36b39 100644 --- a/src/desktop/src/ui/components/Balance.js +++ b/src/desktop/src/ui/components/Balance.js @@ -6,6 +6,7 @@ import { withI18n } from 'react-i18next'; import { getAccountNamesFromState } from 'selectors/accounts'; import { formatValue, formatUnit } from 'libs/iota/utils'; +import { accumulateBalance } from 'libs/iota/addresses'; import { round, roundDown } from 'libs/utils'; import { getCurrencySymbol } from 'libs/currency'; @@ -77,15 +78,22 @@ class Balance extends React.PureComponent { const accountName = summary && index === -1 ? t('totalBalance') : accountNames[summary ? index : seedIndex]; - const accountBalance = + const balances = summary && index === -1 - ? Object.entries(accounts.accountInfo).reduce((total, account) => total + account[1].balance, 0) - : accounts.accountInfo[accountName].balance; + ? Object.entries(accounts.accountInfo).reduce( + (total, [_accountName, accountData]) => + total.concat(accountData.addressData.map((addressData) => addressData.balance)), + [], + ) + : accounts.accountInfo[accountName].addressData.map((addressData) => addressData.balance); + + const accountBalance = accumulateBalance(balances); const currencySymbol = getCurrencySymbol(settings.currency); - const fiatBalance = round(accountBalance * marketData.usdPrice / 1000000 * settings.conversionRate, 2).toFixed( + const fiatBalance = round( + ((accountBalance * marketData.usdPrice) / 1000000) * settings.conversionRate, 2, - ); + ).toFixed(2); const balance = !balanceIsShort ? formatValue(accountBalance) diff --git a/src/desktop/src/ui/components/List.js b/src/desktop/src/ui/components/List.js index 67f6095843..d06edfe43c 100644 --- a/src/desktop/src/ui/components/List.js +++ b/src/desktop/src/ui/components/List.js @@ -42,7 +42,7 @@ class List extends React.PureComponent { /** Toggle hide empty transactions */ toggleEmptyTransactions: PropTypes.func.isRequired, /** Transaction history */ - transfers: PropTypes.array.isRequired, + transactions: PropTypes.array.isRequired, /** Promotes bundle * @param {string} bundle - bundle hash * @param {func} powFn - local Proof of Work function @@ -147,7 +147,7 @@ class List extends React.PureComponent { hideEmptyTransactions, toggleEmptyTransactions, updateAccount, - transfers, + transactions, setItem, currentItem, t, @@ -163,19 +163,19 @@ class List extends React.PureComponent { Pending: 0, }; - const historyTx = orderBy(transfers, 'timestamp', ['desc']).filter((transfer) => { - const isReceived = transfer.incoming; - const isConfirmed = transfer.persistence; + const filteredTransactions = orderBy(transactions, 'timestamp', ['desc']).filter((transaction) => { + const isReceived = transaction.incoming; + const isConfirmed = transaction.persistence; - if (hideEmptyTransactions && transfer.transferValue === 0) { + if (hideEmptyTransactions && transaction.transferValue === 0) { return false; } if ( search.length && - transfer.message.toLowerCase().indexOf(search.toLowerCase()) < 0 && - transfer.bundle.toLowerCase().indexOf(search.toLowerCase()) !== 0 && - (!/^\+?\d+$/.test(search) || transfer.transferValue < parseInt(search)) + transaction.message.toLowerCase().indexOf(search.toLowerCase()) < 0 && + transaction.bundle.toLowerCase().indexOf(search.toLowerCase()) !== 0 && + (!/^\+?\d+$/.test(search) || transaction.transferValue < parseInt(search)) ) { return false; } @@ -202,15 +202,15 @@ class List extends React.PureComponent { return filter === 'All'; }); - const activeTransfer = currentItem ? historyTx.filter((tx) => tx.bundle === currentItem)[0] : null; - const isActiveFailed = activeTransfer && activeTransfer.broadcasted === false; + const activeTx = currentItem ? filteredTransactions.filter((tx) => tx.bundle === currentItem)[0] : null; + const isActiveFailed = activeTx && activeTx.broadcasted === false; return (