|
@@ -3,6 +3,7 @@ import {
|
|
|
ProposalType,
|
|
|
ProposalTypes,
|
|
|
ProposalVote,
|
|
|
+ ProposalVotes,
|
|
|
ParsedPost,
|
|
|
ParsedDiscussion,
|
|
|
DiscussionContraints
|
|
@@ -20,6 +21,7 @@ import { BalanceOf } from '@polkadot/types/interfaces';
|
|
|
import { includeKeys, bytesToString } from '../functions/misc';
|
|
|
import _ from 'lodash';
|
|
|
import proposalsConsts from '../consts/proposals';
|
|
|
+import { FIRST_MEMBER_ID } from '../consts/members';
|
|
|
|
|
|
import { ApiPromise } from '@polkadot/api';
|
|
|
import MembersTransport from './members';
|
|
@@ -120,17 +122,35 @@ export default class ProposalsTransport extends BaseTransport {
|
|
|
return hasVoted ? vote : null;
|
|
|
}
|
|
|
|
|
|
- async votes (proposalId: ProposalId): Promise<ProposalVote[]> {
|
|
|
- const councilMembers = await this.councilT.councilMembers();
|
|
|
- return Promise.all(
|
|
|
- councilMembers.map(async member => {
|
|
|
- const vote = await this.voteByProposalAndMember(proposalId, member.memberId);
|
|
|
- return {
|
|
|
- vote,
|
|
|
- member
|
|
|
- };
|
|
|
- })
|
|
|
+ async votes (proposalId: ProposalId): Promise<ProposalVotes> {
|
|
|
+ const voteEntries = await this.doubleMapEntries(
|
|
|
+ 'proposalsEngine.voteExistsByProposalByVoter', // Double map of intrest
|
|
|
+ proposalId, // First double-map key value
|
|
|
+ (v) => new VoteKind(v), // Converter from hex
|
|
|
+ async () => (await this.membersT.membersCreated()), // A function that returns the number of iterations to go through when chekcing possible values for the second double-map key (memberId)
|
|
|
+ FIRST_MEMBER_ID.toNumber() // Min. possible value for second double-map key (memberId)
|
|
|
);
|
|
|
+
|
|
|
+ const votesWithMembers: ProposalVote[] = [];
|
|
|
+ for (const voteEntry of voteEntries) {
|
|
|
+ const memberId = voteEntry.secondKey;
|
|
|
+ const vote = voteEntry.value;
|
|
|
+ const parsedMember = (await this.membersT.memberProfile(memberId)).toJSON() as ParsedMember;
|
|
|
+ votesWithMembers.push({
|
|
|
+ vote,
|
|
|
+ member: {
|
|
|
+ memberId: new MemberId(memberId),
|
|
|
+ ...parsedMember
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ const proposal = await this.rawProposalById(proposalId);
|
|
|
+
|
|
|
+ return {
|
|
|
+ councilMembersLength: await this.councilT.councilMembersLength(proposal.createdAt.toNumber()),
|
|
|
+ votes: votesWithMembers
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
async fetchProposalMethodsFromCodex (includeKey: string) {
|