/ packages / DApp / src / hooks / useGetCurrentVoting.ts
useGetCurrentVoting.ts
 1  import { useContractCall } from '@usedapp/core'
 2  import { useEffect, useState } from 'react'
 3  import { votingFromRoom } from '../helpers/voting'
 4  import { CurrentVoting } from '../models/community'
 5  import { VotingRoom } from '../models/smartContract'
 6  import { useContracts } from './useContracts'
 7  
 8  export function useGetCurrentVoting(publicKey: string | undefined) {
 9    const [currentVoting, setCurrentVoting] = useState<undefined | CurrentVoting>(undefined)
10    const [votingRoomState, setVotingRoomState] = useState<undefined | VotingRoom>(undefined)
11    const { votingContract } = useContracts()
12  
13    const [roomList] = useContractCall({
14      abi: votingContract.interface,
15      address: votingContract.address,
16      method: 'getActiveVotingRooms',
17      args: [],
18    }) ?? [[]]
19  
20    useEffect(() => {
21      const hasPublicKey = roomList.some((room: any) => room.community === publicKey)
22      if (hasPublicKey) {
23        const votingRoom = useContractCall({
24          abi: votingContract.interface,
25          address: votingContract.address,
26          method: 'getActiveVotingRoom',
27          args: [publicKey],
28        }) as any
29  
30        if (votingRoom && !votingRoom.finalized) {
31          setVotingRoomState(votingRoom)
32          setCurrentVoting(votingFromRoom(votingRoom))
33        } else {
34          setCurrentVoting(undefined)
35          setVotingRoomState(undefined)
36        }
37      } else {
38        setCurrentVoting(undefined)
39        setVotingRoomState(undefined)
40      }
41    }, [roomList, publicKey])
42  
43    return { currentVoting, votingRoom: votingRoomState }
44  }