diff --git a/packages/website/ts/index.tsx b/packages/website/ts/index.tsx index b8fb926268..9438d8f557 100644 --- a/packages/website/ts/index.tsx +++ b/packages/website/ts/index.tsx @@ -123,8 +123,8 @@ render( {/* TODO: Uncomment the VoteIndex route */} - - {/* */} + {/* */} + > { }; private async _fetchVoteStatusAsync(): Promise { try { - const voteDomain = utils.isProduction() ? `https://${configs.DOMAIN_VOTE}` : 'http://localhost:3000'; + const voteDomain = utils.isProduction() ? `https://${configs.DOMAIN_VOTE}` : `https://${configs.DOMAIN_VOTE}/staging`; const voteEndpoint = `${voteDomain}/v1/tally/${this._proposalData.zeipId}`; const response = await fetch(voteEndpoint, { method: 'get', diff --git a/packages/website/ts/pages/governance/vote_index.tsx b/packages/website/ts/pages/governance/vote_index.tsx index 6dcbf4f81e..06ea8a4e4b 100644 --- a/packages/website/ts/pages/governance/vote_index.tsx +++ b/packages/website/ts/pages/governance/vote_index.tsx @@ -10,7 +10,9 @@ import { Heading, Paragraph } from 'ts/components/text'; import { Proposal, proposals } from 'ts/pages/governance/data'; import { VoteIndexCard } from 'ts/pages/governance/vote_index_card'; import { TallyInterface } from 'ts/types'; +import { configs } from 'ts/utils/configs'; import { documentConstants } from 'ts/utils/document_meta_constants'; +import { utils } from 'ts/utils/utils'; const ZEIP_IDS = Object.keys(proposals).map(idString => parseInt(idString, 10)); const ZEIP_PROPOSALS: Proposal[] = ZEIP_IDS.map(id => proposals[id]).sort( @@ -60,26 +62,49 @@ export class VoteIndex extends React.Component { ); } + private async _fetchVoteStatusAsync(zeipId: number): Promise { + try { + const voteDomain = utils.isProduction() ? `https://${configs.DOMAIN_VOTE}` : `https://${configs.DOMAIN_VOTE}/staging`; + const voteEndpoint = `${voteDomain}/v1/tally/${zeipId}`; + const response = await fetch(voteEndpoint, { + method: 'get', + mode: 'cors', + credentials: 'same-origin', + headers: { + 'content-type': 'application/json; charset=utf-8', + }, + }); + + if (!response.ok) { + throw new Error('Request failed'); + } + + const responseData = await response.json(); + let { no, yes } = responseData; + yes = new BigNumber(yes); + no = new BigNumber(no); + const totalBalance = yes.plus(no); + const tally = { + ...responseData, + yes: new BigNumber(yes), + no: new BigNumber(no), + totalBalance, + }; + return tally; + } catch (e) { + // Empty block + return { + yes: new BigNumber(0), + no: new BigNumber(0), + }; + } + } private async _fetchTallysAsync(): Promise { - // TODO: Real implementation - const getRandomInt = (max: string): BigNumber => { - return new BigNumber(max).times(Math.random()); - }; - const bigNumber = '100000000000000000000000000'; - const generateRandomTally = (): TallyInterface => ({ - yes: getRandomInt(bigNumber), - no: getRandomInt(bigNumber), - }); - setTimeout(() => { - const tallys = { - 23: generateRandomTally(), - 39: generateRandomTally(), - 24: generateRandomTally(), - 25: generateRandomTally(), - }; - this.setState({ tallys }); - }, 1000); + const tallyResponses = await Promise.all(ZEIP_IDS.map(async zeipId => this._fetchVoteStatusAsync(zeipId))); + const tallys: {[key: number]: TallyInterface} = {}; + ZEIP_IDS.map((zeipId, i) => tallys[zeipId] = tallyResponses[i]); + this.setState({ tallys }); } } diff --git a/packages/website/ts/pages/governance/vote_index_card.tsx b/packages/website/ts/pages/governance/vote_index_card.tsx index ff9d49ff3f..b5a3c63d29 100644 --- a/packages/website/ts/pages/governance/vote_index_card.tsx +++ b/packages/website/ts/pages/governance/vote_index_card.tsx @@ -47,7 +47,7 @@ const getDateString = (voteStartDate: moment.Moment, voteEndDate: moment.Moment) const voteTime = getVoteTime(voteStartDate, voteEndDate); const pstOffset = '-0800'; const endDate = voteEndDate.utcOffset(pstOffset); - const startDate = voteEndDate.utcOffset(pstOffset); + const startDate = voteStartDate.utcOffset(pstOffset); if (voteTime === 'happening') { return `Ends ${endDate.format('MMMM Do YYYY, h:mm a')} PST`; }