diff --git a/components/RealmHeader.tsx b/components/RealmHeader.tsx index f319c8d8cb..10c13ba991 100644 --- a/components/RealmHeader.tsx +++ b/components/RealmHeader.tsx @@ -10,7 +10,11 @@ import { getRealmExplorerHost } from 'tools/routing' import { tryParsePublicKey } from '@tools/core/pubkey' import { useRealmQuery } from '@hooks/queries/realm' import { useRealmConfigQuery } from '@hooks/queries/realmConfig' -import { NFT_PLUGINS_PKS } from '@constants/plugins' +import { GoverningTokenType } from '@solana/spl-governance' +import { determineVotingPowerType } from '@hooks/queries/governancePower' +import { useAsync } from 'react-async-hook' +import useSelectedRealmPubkey from '@hooks/selectedRealm/useSelectedRealmPubkey' +import { useConnection } from '@solana/wallet-adapter-react' const RealmHeader = () => { const { fmtUrlWithCluster } = useQueryContext() @@ -25,6 +29,18 @@ const RealmHeader = () => { const [isBackNavVisible, setIsBackNavVisible] = useState(true) + const { connection } = useConnection() + const realmPk = useSelectedRealmPubkey() + + const { result: kind } = useAsync(async () => { + if (realmPk === undefined) return undefined + return determineVotingPowerType(connection, realmPk, 'community') + }, [connection, realmPk]) + const membersTabIsCouncilOnly = !(kind === 'vanilla' || kind === 'NFT') + const councilExists = + realm?.account.config.councilMint !== undefined && + config?.account.councilTokenConfig?.tokenType !== GoverningTokenType.Dormant + useEffect(() => { setIsBackNavVisible(realmInfo?.symbol !== REALM) }, [realmInfo?.symbol, REALM]) @@ -68,17 +84,6 @@ const RealmHeader = () => {
)}
- {(!config?.account.communityTokenConfig.voterWeightAddin || - NFT_PLUGINS_PKS.includes( - config?.account.communityTokenConfig.voterWeightAddin.toBase58() - )) && ( - - - - Members - - - )} {vsrMode === 'default' && ( @@ -90,6 +95,14 @@ const RealmHeader = () => { )} + {(!membersTabIsCouncilOnly || councilExists) && ( + + + + {membersTabIsCouncilOnly ? 'Council' : 'Members'} + + + )} diff --git a/pages/dao/[symbol]/members/Members.tsx b/pages/dao/[symbol]/members/Members.tsx index ef230c195b..7ae9cadf49 100644 --- a/pages/dao/[symbol]/members/Members.tsx +++ b/pages/dao/[symbol]/members/Members.tsx @@ -1,5 +1,5 @@ import useRealm from '@hooks/useRealm' -import { useEffect, useRef, useState } from 'react' +import { useEffect, useMemo, useRef, useState } from 'react' import MemberOverview from '@components/Members/MemberOverview' import { PlusCircleIcon, SearchIcon, UsersIcon } from '@heroicons/react/outline' import useGovernanceAssets from '@hooks/useGovernanceAssets' @@ -15,6 +15,10 @@ import { Member } from '@utils/uiTypes/members' import PaginationComponent from '@components/Pagination' import useWalletOnePointOh from '@hooks/useWalletOnePointOh' import { useMembersQuery } from '@components/Members/useMembers' +import { useConnection } from '@solana/wallet-adapter-react' +import useSelectedRealmPubkey from '@hooks/selectedRealm/useSelectedRealmPubkey' +import { determineVotingPowerType } from '@hooks/queries/governancePower' +import { useAsync } from 'react-async-hook' const Members = () => { const { @@ -25,7 +29,6 @@ const Members = () => { const pagination = useRef<{ setPage: (val) => void }>(null) const membersPerPage = 10 - const { data: activeMembers } = useMembersQuery() const wallet = useWalletOnePointOh() const connected = !!wallet?.connected const { @@ -38,6 +41,25 @@ const Members = () => { const [searchString, setSearchString] = useState('') const [filteredMembers, setFilteredMembers] = useState([]) + const { connection } = useConnection() + const realmPk = useSelectedRealmPubkey() + const { data: activeMembersData } = useMembersQuery() + + const { result: kind } = useAsync(async () => { + if (realmPk === undefined) return undefined + return determineVotingPowerType(connection, realmPk, 'community') + }, [connection, realmPk]) + + // if this is not vanilla or NFT, this view is used only to show council. filter accordingly. + const councilOnly = !(kind === 'vanilla' || kind === 'NFT') + const activeMembers = useMemo( + () => + councilOnly + ? activeMembersData?.filter((x) => x.councilVotes.gtn(0)) + : activeMembersData, + [activeMembersData, councilOnly] + ) + const filterMembers = (v) => { if (activeMembers !== undefined) { setSearchString(v) @@ -98,7 +120,7 @@ const Members = () => { ) : null}

{realmInfo?.displayName}

-

Members

+

{councilOnly ? 'Council ' : ''}Members

diff --git a/pages/dao/[symbol]/members/index.tsx b/pages/dao/[symbol]/members/index.tsx index 27f1b06c3d..5a84af1007 100644 --- a/pages/dao/[symbol]/members/index.tsx +++ b/pages/dao/[symbol]/members/index.tsx @@ -1,18 +1,8 @@ -import { NFT_PLUGINS_PKS } from '@constants/plugins' import Members from './Members' -import { useRealmConfigQuery } from '@hooks/queries/realmConfig' const MembersPage = () => { - const config = useRealmConfigQuery().data?.result - const currentPluginPk = config?.account.communityTokenConfig.voterWeightAddin - const isNftMode = - (currentPluginPk && - NFT_PLUGINS_PKS.includes(currentPluginPk?.toBase58())) || - false return (
- {!config?.account.communityTokenConfig.voterWeightAddin || isNftMode ? ( - - ) : null} +
) }