Merge pull request #219 from poanetwork/increase-ballots-loading-speed
Increase ballots loading speed
This commit is contained in:
commit
89feb07a88
|
@ -242,12 +242,26 @@ class ContractsStore {
|
||||||
console.log(e.message)
|
console.log(e.message)
|
||||||
}
|
}
|
||||||
|
|
||||||
const allKeysPromise = this.getCards(keysNextBallotId, 'votingToChangeKeys')
|
const [keysBallots, minThresholdBallots, proxyBallots, emissionFundsBallots] = await Promise.all([
|
||||||
const allMinThresholdPromise = this.getCards(minThresholdNextBallotId, 'votingToChangeMinThreshold')
|
this.getBallots(keysNextBallotId, 'votingToChangeKeys'),
|
||||||
const allProxyPromise = this.getCards(proxyNextBallotId, 'votingToChangeProxy')
|
this.getBallots(minThresholdNextBallotId, 'votingToChangeMinThreshold'),
|
||||||
const allEmissionFundsPromise = this.getCards(emissionFundsNextBallotId, 'votingToManageEmissionFunds')
|
this.getBallots(proxyNextBallotId, 'votingToChangeProxy'),
|
||||||
|
this.getBallots(emissionFundsNextBallotId, 'votingToManageEmissionFunds')
|
||||||
|
])
|
||||||
|
|
||||||
await Promise.all([allKeysPromise, allMinThresholdPromise, allProxyPromise, allEmissionFundsPromise])
|
const ballots = [...keysBallots, ...minThresholdBallots, ...proxyBallots, ...emissionFundsBallots]
|
||||||
|
ballotsStore.ballotCards = this.mapBallotsToCards(ballots)
|
||||||
|
|
||||||
|
const finalizedOrCancelled = item => item.isFinalized || item.isCanceled
|
||||||
|
window.localStorage.setItem(
|
||||||
|
`ballots-${this.netId}`,
|
||||||
|
JSON.stringify({
|
||||||
|
votingToChangeKeys: keysBallots.filter(finalizedOrCancelled),
|
||||||
|
votingToChangeMinThreshold: minThresholdBallots.filter(finalizedOrCancelled),
|
||||||
|
votingToChangeProxy: proxyBallots.filter(finalizedOrCancelled),
|
||||||
|
votingToManageEmissionFunds: emissionFundsBallots.filter(finalizedOrCancelled)
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
const allBallotsIDsLength =
|
const allBallotsIDsLength =
|
||||||
keysNextBallotId + minThresholdNextBallotId + proxyNextBallotId + emissionFundsNextBallotId
|
keysNextBallotId + minThresholdNextBallotId + proxyNextBallotId + emissionFundsNextBallotId
|
||||||
|
@ -334,72 +348,59 @@ class ContractsStore {
|
||||||
return votingState
|
return votingState
|
||||||
}
|
}
|
||||||
|
|
||||||
getCard = async (id, contractType) => {
|
mapBallotsToCards = ballots => {
|
||||||
|
return ballots.map((ballot, pos) => {
|
||||||
|
let component
|
||||||
|
let params = {
|
||||||
|
id: ballot.id,
|
||||||
|
key: ballot.type + ballot.id,
|
||||||
|
pos,
|
||||||
|
votingState: ballot
|
||||||
|
}
|
||||||
|
switch (ballot.type) {
|
||||||
|
case 'votingToChangeKeys':
|
||||||
|
component = <BallotKeysCard {...params} type={ballotStore.BallotType.keys} />
|
||||||
|
break
|
||||||
|
case 'votingToChangeMinThreshold':
|
||||||
|
component = <BallotMinThresholdCard {...params} type={ballotStore.BallotType.minThreshold} />
|
||||||
|
break
|
||||||
|
case 'votingToChangeProxy':
|
||||||
|
component = <BallotProxyCard {...params} type={ballotStore.BallotType.proxy} />
|
||||||
|
break
|
||||||
|
case 'votingToManageEmissionFunds':
|
||||||
|
component = <BallotEmissionFundsCard {...params} type={ballotStore.BallotType.emissionFunds} />
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
return component
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
getBallot = async (id, contractType) => {
|
||||||
let votingState
|
let votingState
|
||||||
try {
|
try {
|
||||||
votingState = await this[contractType].getBallotInfo(id, this.votingKey)
|
votingState = await this[contractType].getBallotInfo(id, this.votingKey)
|
||||||
votingState = this.fillCardVotingState(votingState, contractType)
|
votingState = this.fillCardVotingState(votingState, contractType)
|
||||||
|
votingState.type = contractType
|
||||||
|
votingState.id = id
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e.message)
|
console.log(e.message)
|
||||||
}
|
}
|
||||||
|
return votingState
|
||||||
let card
|
|
||||||
switch (contractType) {
|
|
||||||
case 'votingToChangeKeys':
|
|
||||||
card = (
|
|
||||||
<BallotKeysCard
|
|
||||||
id={id}
|
|
||||||
type={ballotStore.BallotType.keys}
|
|
||||||
key={ballotsStore.ballotCards.length}
|
|
||||||
pos={ballotsStore.ballotCards.length}
|
|
||||||
votingState={votingState}
|
|
||||||
/>
|
|
||||||
)
|
|
||||||
break
|
|
||||||
case 'votingToChangeMinThreshold':
|
|
||||||
card = (
|
|
||||||
<BallotMinThresholdCard
|
|
||||||
id={id}
|
|
||||||
type={ballotStore.BallotType.minThreshold}
|
|
||||||
key={ballotsStore.ballotCards.length}
|
|
||||||
pos={ballotsStore.ballotCards.length}
|
|
||||||
votingState={votingState}
|
|
||||||
/>
|
|
||||||
)
|
|
||||||
break
|
|
||||||
case 'votingToChangeProxy':
|
|
||||||
card = (
|
|
||||||
<BallotProxyCard
|
|
||||||
id={id}
|
|
||||||
type={ballotStore.BallotType.proxy}
|
|
||||||
key={ballotsStore.ballotCards.length}
|
|
||||||
pos={ballotsStore.ballotCards.length}
|
|
||||||
votingState={votingState}
|
|
||||||
/>
|
|
||||||
)
|
|
||||||
break
|
|
||||||
case 'votingToManageEmissionFunds':
|
|
||||||
card = (
|
|
||||||
<BallotEmissionFundsCard
|
|
||||||
id={id}
|
|
||||||
type={ballotStore.BallotType.emissionFunds}
|
|
||||||
key={ballotsStore.ballotCards.length}
|
|
||||||
pos={ballotsStore.ballotCards.length}
|
|
||||||
votingState={votingState}
|
|
||||||
/>
|
|
||||||
)
|
|
||||||
break
|
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
return card
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getCards = async (nextBallotId, contractType) => {
|
getBallots = async (nextBallotId, contractType) => {
|
||||||
for (let id = nextBallotId - 1; id >= 0; id--) {
|
const ballotsObject = JSON.parse(window.localStorage.getItem(`ballots-${this.netId}`) || '{}')
|
||||||
ballotsStore.ballotCards.push(await this.getCard(id, contractType))
|
const existingBallots = ballotsObject[contractType] || []
|
||||||
}
|
const existingBallotsIds = existingBallots.map(item => item.id)
|
||||||
|
const allBallotsIds = Array(nextBallotId)
|
||||||
|
.fill(undefined)
|
||||||
|
.map((item, index) => index)
|
||||||
|
const newBallotsIds = allBallotsIds.filter(item => !existingBallotsIds.includes(item))
|
||||||
|
const promises = newBallotsIds.map(id => this.getBallot(id, contractType))
|
||||||
|
const newBallots = await Promise.all(promises)
|
||||||
|
return existingBallots.concat(newBallots)
|
||||||
}
|
}
|
||||||
|
|
||||||
@action('Get all keys next ballot ids')
|
@action('Get all keys next ballot ids')
|
||||||
|
|
Loading…
Reference in New Issue