burst-whale-watch
Version:
An account watcher for Burstcoin
79 lines • 2.98 kB
JavaScript
;
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