class LiquidPledgingState { constructor(liquidPledging) { this.$lp = liquidPledging; } $getPledge(idPledge) { const pledge = { delegates: [], }; return this.$lp.getPledge(idPledge) .then((res) => { pledge.amount = res.amount; pledge.owner = res.owner; pledge.token = res.token; if (res.intendedProject) { pledge.intendedProject = res.intendedProject; pledge.commmitTime = res.commitTime; } if (res.oldPledge) { pledge.oldPledge = res.oldPledge; } if (res.pledgeState === '0') { pledge.pledgeState = 'Pledged'; } else if (res.pledgeState === '1') { pledge.pledgeState = 'Paying'; } else if (res.pledgeState === '2') { pledge.pledgeState = 'Paid'; } else { pledge.pledgeState = 'Unknown'; } const promises = []; for (let i = 1; i <= res.nDelegates; i += 1) { promises.push( this.$lp.getPledgeDelegate(idPledge, i) .then(r => ({ id: r.idDelegate, addr: r.addr, name: r.name, url: r.url, })), ); } return Promise.all(promises); }) .then((delegates) => { pledge.delegates = delegates; return pledge; }); } $getAdmin(idAdmin) { const admin = {}; return this.$lp.getPledgeAdmin(idAdmin) .then((res) => { if (res.adminType === '0') { admin.type = 'Giver'; } else if (res.adminType === '1') { admin.type = 'Delegate'; } else if (res.adminType === '2') { admin.type = 'Project'; } else { admin.type = 'Unknown'; } admin.addr = res.addr; admin.name = res.name; admin.url = res.url; admin.commitTime = res.commitTime; if (admin.type === 'Project') { admin.parentProject = res.parentProject; admin.canceled = res.canceled; } admin.plugin = res.plugin; return admin; }); } getState() { const getPledges = () => this.$lp.numberOfPledges() .then((nPledges) => { const promises = []; for (let i = 1; i <= nPledges; i += 1) { promises.push(this.$getPledge(i)); } return Promise.all(promises); }); const getAdmins = () => this.$lp.numberOfPledgeAdmins() .then((nAdmins) => { const promises = []; for (let i = 1; i <= nAdmins; i += 1) { promises.push(this.$getAdmin(i)); } return Promise.all(promises); }); return Promise.all([getPledges(), getAdmins()]) .then(([pledges, admins]) => ({ pledges: [null, ...pledges], admins: [null, ...admins], })); } } module.exports = LiquidPledgingState;