useRoomAggregateVotes.ts
1 import { useEffect, useState } from 'react' 2 import { DetailedVotingRoom } from '../models/smartContract' 3 import { useVotesAggregate } from './useVotesAggregate' 4 5 export function useRoomAggregateVotes(room: DetailedVotingRoom, showConfirmModal: boolean) { 6 const { votesToSend } = useVotesAggregate(room.roomNumber, room.verificationStartAt, room.startAt) 7 8 const [returnRoom, setReturnRoom] = useState(room) 9 10 useEffect(() => { 11 if (room.endAt.toNumber() > Date.now() / 1000 && showConfirmModal === false) { 12 const reducedVotes = votesToSend.reduce( 13 (accumulator, vote) => { 14 if (vote[1].mod(2).toNumber()) { 15 return { for: accumulator.for.add(vote[2]), against: accumulator.against } 16 } 17 return { for: accumulator.for, against: accumulator.against.add(vote[2]) } 18 }, 19 { for: room.totalVotesFor, against: room.totalVotesAgainst }, 20 ) 21 setReturnRoom({ ...room, totalVotesAgainst: reducedVotes.against, totalVotesFor: reducedVotes.for }) 22 } 23 }, [JSON.stringify(votesToSend), JSON.stringify(room), showConfirmModal]) 24 25 return returnRoom 26 }