UNPKG

burst-whale-watch

Version:

An account watcher for Burstcoin

79 lines 2.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const blessed = require("neo-blessed"); const account_view_1 = require("./account.view"); const selectors_1 = require("../state/selectors"); const constants_1 = require("../constants"); class AccountListView { constructor(config) { this.config = config; this.accountViews = []; this.box = blessed.box({ top: 7, left: 'center', width: '100%', height: '80%', tags: true, label: { text: `{bold}Accounts{/}`, side: 'left' }, border: { type: 'line' }, style: { bg: 'black', border: { fg: 'white', bold: true, }, } }); this.numberOfAccounts = this.config.accounts.length; this.config.accounts.forEach((accountId, index) => { this.accountViews.push(new account_view_1.AccountView(this.box, index, Math.min(this.config.accounts.length, constants_1.MAX_VISIBLE_ACCOUNTS))); }); } get element() { return this.box; } mapAccountViewData(state) { const currentAccountIndex = selectors_1.selectCurrentAccountIndex(state); const accountBalancesMap = selectors_1.selectGetAccountBalances(state); const accountsArray = Object .keys(accountBalancesMap) .map(accountId => ({ accountId, balance: accountBalancesMap[accountId] })); const startIndex = currentAccountIndex; const endIndex = startIndex + constants_1.MAX_VISIBLE_ACCOUNTS; const visibleAccounts = accountsArray.slice(startIndex, endIndex); return visibleAccounts.map((account, i) => ({ index: startIndex + i + 1, id: account.accountId, balance: account.balance, transactions: [] })); } renderNavArrows(state) { const currentAccountIndex = selectors_1.selectCurrentAccountIndex(state); let line; if (currentAccountIndex === 0 && constants_1.MAX_VISIBLE_ACCOUNTS < this.numberOfAccounts) { line = ' '.repeat(Math.max(0, this.box.width - 5)) + '->'; } else if (0 < currentAccountIndex && currentAccountIndex < this.numberOfAccounts - constants_1.MAX_VISIBLE_ACCOUNTS) { line = ' <-' + ' '.repeat(this.box.width - 8) + '->'; } else if (0 < currentAccountIndex) { line = ' <-' + ' '.repeat(this.box.width - 4); } this.box.setLine(0, line); } update(state) { const accountData = this.mapAccountViewData(state); this.renderNavArrows(state); this.accountViews.forEach((view, i) => { view.update(state, accountData[i]); }); } } exports.AccountListView = AccountListView; //# sourceMappingURL=accountList.view.js.map