@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
48 lines • 2.47 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.groupAccountsByAsset = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const logic_1 = require("@ledgerhq/live-countervalues/logic");
const groupAccountsByAsset = (accounts, counterValuesState, targetCurrency) => {
const initialGroupedAccounts = {};
return accounts.reduce((groupedAccounts, account) => {
const assetId = account.type === "Account" ? account.currency.id : account.token.id;
let assetGroup = groupedAccounts[assetId];
if (!assetGroup) {
const currency = account.type === "Account" ? account.currency : account.token;
assetGroup = groupedAccounts[assetId] = {
totalBalance: new bignumber_js_1.default(0),
totalFiatValue: new bignumber_js_1.default(0),
accounts: [],
referenceCurrency: currency, // First currency becomes the reference
};
}
const currency = account.type === "Account" ? account.currency : account.token;
const balance = account.balance;
// Convert balance to reference currency magnitude before summing
const referenceMagnitude = assetGroup.referenceCurrency.units[0].magnitude || 0;
const currentMagnitude = currency.units[0].magnitude || 0;
const magnitudeDiff = referenceMagnitude - currentMagnitude;
const normalizedBalance = balance.shiftedBy(magnitudeDiff);
const fiatValue = calculateFiatValue(account, counterValuesState, targetCurrency);
assetGroup.totalBalance = assetGroup.totalBalance.plus(normalizedBalance);
assetGroup.totalFiatValue = assetGroup.totalFiatValue.plus(fiatValue || 0);
assetGroup.accounts.push(account);
return groupedAccounts;
}, initialGroupedAccounts);
};
exports.groupAccountsByAsset = groupAccountsByAsset;
function calculateFiatValue(account, state, toCurrency) {
const currency = account.type === "Account" ? account.currency : account.token;
const balanceNumber = account.balance.toNumber();
const fiatValue = (0, logic_1.calculate)(state, {
from: currency,
to: toCurrency,
value: balanceNumber,
});
return fiatValue || 0;
}
//# sourceMappingURL=groupAccountsByAsset.js.map