コード例 #1
0
function getTopTwoCandidates(raceData) {

	const candidates = raceData.reportingUnits[0].candidates

	// filter out not real candidates
	const filtered = candidates.filter(c => primaries2016Candidates.find(c2 => c2.last === c.last.toLowerCase()))

	// sort by votes, ballot order, active
	const withActive = filtered.map(c => {
		const cand = primaries2016Candidates.find(c2 => c2.last === c.last.toLowerCase())

		c.active = cand.suspendedDate ? 0 : 1
		return c

	})

	const ordered = orderBy(withActive, ['voteCount', 'active', 'ballotOrder'], ['desc', 'desc', 'asc'])

	const totalVotes = Candidates.getVoteCount(candidates)

	// return top two with percents 
	return ordered.map(candidate => {

		const { first, last, voteCount } = candidate

		const percent = `${toPercent(voteCount / totalVotes)}%`
		const isWinner = Candidate.isWinner(candidate)

		return { first, last, percent, isWinner }

	}).slice(0, 2)

}
コード例 #2
0
export default function stateResults({ race, show, prioritize }) {

	// get state-level reporting unit
	const stateUnit = race.reportingUnits.find(x => x.level === 'state')

	// augment candidate with 'isMainAndRunning' boolean flag
	const candidates = stateUnit.candidates.map(candidate => {

		// try to find this candidate in primaries2016Candidates
		const mainCandidate = primaries2016Candidates.find(c =>
			compareStringsIgnoreCase(c.last, candidate.last))

		const isMainAndRunning = !!mainCandidate && !mainCandidate.suspendedDate

		return {
			...candidate,
			isMainAndRunning
		}

	})

	// sort candidates
	const sortedCandidates = orderBy(candidates,
		['isMainAndRunning', 'voteCount', 'ballotOrder'],
		['desc', 'desc', 'asc']
	)

	// get the total vote count
	const totalVoteCount = Candidates.getVoteCount(sortedCandidates)

	const party = standardize.expandParty(race.party)

	const stateAbbr = stateUnit.statePostal
	const state = standardize.expandState(stateAbbr)

	const raceType = standardize.raceType(race.raceType)

	const raceInfo = primaries2016Dates.find(d => {

		const sameState = compareStringsIgnoreCase(d.stateAbbr, stateAbbr)
		const sameParty = compareStringsIgnoreCase(d.party, party)
		return sameState && sameParty

	})

	const note = raceInfo.resultsNote ? `<div class="results-note">Note: ${raceInfo.resultsNote}</div>` : ''

	return `

	<div class='title-and-updater ${party}'>
		<div class='title'><span class='iota'>${party} ${raceType}</span></div>
	</div>

	<div class='results ${party}'>
		${sortedCandidates.slice(0, show).map((candidate, index) => candidateRow({ candidate, index, totalVoteCount, party, prioritize })).join('')}
	</div>

	${note}

	<div class='precincts-and-more'>
		<div class='precincts'><span class='iota'>${+stateUnit.precinctsReportingPct}% <span class='extra'>precincts</span> reporting</span></div>
	</div>

	`

}