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 }