/ packages / DApp / src / hooks / useRoomAggregateVotes.ts
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  }