@radixdlt/atom-transaction-mapping
Version:
55 lines • 2.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.tokenBalancesPerAccountReducer = exports.emptyTokenBalancesPerAccount = exports.tokenBalancesPerAccount = void 0;
const atom_1 = require("@radixdlt/atom");
const util_1 = require("@radixdlt/util");
const neverthrow_1 = require("neverthrow");
const particleReducer_1 = require("./particleReducer");
const tokenBalancesForOneAccountReducer_1 = require("./tokenBalancesForOneAccountReducer");
const _types_1 = require("./_types");
const tokenBalancesPerAccount = (balances) => ({
stateType: _types_1.ApplicationStateType.TOKEN_BALANCES_PER_ACCOUNT,
balances: balances,
size: balances.size,
balancesFor: (owner) => { var _a; return (_a = balances.get(owner)) !== null && _a !== void 0 ? _a : tokenBalancesForOneAccountReducer_1.emptyTokenBalancesForOneAccount(owner); },
});
exports.tokenBalancesPerAccount = tokenBalancesPerAccount;
const tokenBalancesPerAccountFromParticle = (particle) => {
const tokenBalancesForOneAccount_ = tokenBalancesForOneAccountReducer_1.tokenBalancesForOneAccountFromParticle(particle);
return exports.tokenBalancesPerAccount(new Map([[particle.address, tokenBalancesForOneAccount_]]));
};
const emptyTokenBalancesPerAccount = () => exports.tokenBalancesPerAccount(new Map());
exports.emptyTokenBalancesPerAccount = emptyTokenBalancesPerAccount;
const tokenBalancesPerAccountReducer = () => {
const combine = (input) => {
const currentBalancesMap = input.current.balances;
const newBalancesMap = input.newState.balances;
if (util_1.mapEquals(currentBalancesMap, newBalancesMap))
return neverthrow_1.ok(input.current);
return tokenBalancesForOneAccountReducer_1.mergeMaps({
first: currentBalancesMap,
second: newBalancesMap,
onDuplicates: (a, b, _) => tokenBalancesForOneAccountReducer_1.tokenBalancesForOneAccountReducer(a.owner).combine({
current: a,
newState: b,
}),
}).map((balances) => exports.tokenBalancesPerAccount(balances));
};
return particleReducer_1.makeParticleReducer({
applicationStateType: _types_1.ApplicationStateType.TOKEN_BALANCES_PER_ACCOUNT,
initialState: exports.emptyTokenBalancesPerAccount(),
reduce: (input) => {
const particle = input.upParticle.particle;
if (!atom_1.isTransferrableTokensParticle(particle))
return neverthrow_1.ok(input.state);
const tokenBalancesPerAccount_ = tokenBalancesPerAccountFromParticle(particle);
return combine({
current: input.state,
newState: tokenBalancesPerAccount_,
});
},
combine: combine,
});
};
exports.tokenBalancesPerAccountReducer = tokenBalancesPerAccountReducer;
//# sourceMappingURL=tokenBalancesPerAccountReducer.js.map