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}
+
)
}