import { ProgramAccount, Proposal, ProposalState } from '@solana/spl-governance' import GovernanceStore from '@store/governanceStore' import mangoStore from '@store/mangoStore' import { useEffect, useState } from 'react' import { isInCoolOffTime } from 'utils/governance/proposals' import { RawMint } from '@solana/spl-token' import { MANGO_MINT } from 'utils/constants' import { PublicKey } from '@solana/web3.js' import dynamic from 'next/dynamic' import { tryGetMint } from 'utils/governance/tools' import { BN } from '@coral-xyz/anchor' import { useTranslation } from 'next-i18next' import SheenLoader from '@components/shared/SheenLoader' import { NoSymbolIcon } from '@heroicons/react/20/solid' import VotingPower from './VotingPower' const ProposalCard = dynamic(() => import('./ProposalCard')) const OnBoarding = dynamic(() => import('../OnBoarding')) const Vote = () => { const { t } = useTranslation('governance') const connection = mangoStore((s) => s.connection) const governances = GovernanceStore((s) => s.governances) const proposals = GovernanceStore((s) => s.proposals) const loadingProposals = GovernanceStore((s) => s.loadingProposals) const loadingVoter = GovernanceStore((s) => s.loadingVoter) const loadingRealm = GovernanceStore((s) => s.loadingRealm) const [mangoMint, setMangoMint] = useState(null) const [votingProposals, setVotingProposals] = useState< ProgramAccount[] >([]) useEffect(() => { if (proposals) { const activeProposals = Object.values(proposals).filter((x) => { const governance = governances && governances[x.account.governance.toBase58()] const votingEnded = governance && x.account.getTimeToVoteEnd(governance.account) < 0 const coolOff = isInCoolOffTime(x.account, governance?.account) return ( !coolOff && !votingEnded && x.account.state === ProposalState.Voting ) }) setVotingProposals(activeProposals) } else { setVotingProposals([]) } }, [governances, proposals]) useEffect(() => { const handleGetMangoMint = async () => { const mangoMint = await tryGetMint(connection, new PublicKey(MANGO_MINT)) setMangoMint(mangoMint!.account) } handleGetMangoMint() }, []) return (

{t('active-proposals')}

{loadingProposals || loadingRealm ? (
) : ( <> {!loadingVoter ? ( ) : null}
{votingProposals.length ? ( votingProposals.map( (x) => mangoMint && ( ) ) ) : (

{t('no-active-proposals')}

)}
)}
) } export default Vote