diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx index e53aca25e..d1a369b9e 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/[poolId]/[proposalId]/page.tsx @@ -1,12 +1,11 @@ "use client"; -import { useEffect, useState } from "react"; +import { useEffect, useMemo, useState } from "react"; import { Hashicon } from "@emeraldpay/hashicon-react"; import { AdjustmentsHorizontalIcon, InformationCircleIcon, UserIcon, } from "@heroicons/react/24/outline"; -import { ArrowPathIcon } from "@heroicons/react/24/solid"; import { usePathname, useRouter } from "next/navigation"; import { toast } from "react-toastify"; import { Address, encodeAbiParameters, formatUnits } from "viem"; @@ -14,6 +13,8 @@ import { useAccount, useToken } from "wagmi"; import { getProposalDataDocument, getProposalDataQuery, + isMemberDocument, + isMemberQuery, } from "#/subgraph/.graphclient"; import { Badge, @@ -33,7 +34,7 @@ import { usePubSubContext } from "@/contexts/pubsub.context"; import { useChainIdFromPath } from "@/hooks/useChainIdFromPath"; import { useContractWriteWithConfirmations } from "@/hooks/useContractWriteWithConfirmations"; import { useConvictionRead } from "@/hooks/useConvictionRead"; -import { useDisableButtons } from "@/hooks/useDisableButtons"; +import { ConditionObject, useDisableButtons } from "@/hooks/useDisableButtons"; import { useMetadataIpfsFetch } from "@/hooks/useIpfsFetch"; import { useSubgraphQuery } from "@/hooks/useSubgraphQuery"; import { alloABI } from "@/src/generated"; @@ -43,10 +44,11 @@ import { useErrorDetails } from "@/utils/getErrorName"; import { prettyTimestamp } from "@/utils/text"; export default function Page({ - params: { proposalId, garden, poolId }, + params: { proposalId, garden, community: communityAddr, poolId }, }: { params: { proposalId: string; + community: string; poolId: string; chain: string; garden: string; @@ -56,6 +58,7 @@ export default function Page({ const router = useRouter(); const { address } = useAccount(); + const [, proposalNumber] = proposalId.split("-"); const { data } = useSubgraphQuery({ query: getProposalDataDocument, @@ -71,11 +74,26 @@ export default function Page({ }, }); + //query to get member registry in community + const { data: memberData } = useSubgraphQuery({ + query: isMemberDocument, + variables: { + me: address?.toLowerCase(), + comm: communityAddr?.toLowerCase(), + }, + enabled: !!address, + }); + + const isMemberCommunity = + !!memberData?.member?.memberCommunity?.[0]?.isRegistered; + // + const proposalData = data?.cvproposal; const proposalIdNumber = proposalData?.proposalNumber ? BigInt(proposalData.proposalNumber) : undefined; + const poolTokenAddr = proposalData?.strategy.token as Address; const { publish } = usePubSubContext(); @@ -102,7 +120,18 @@ export default function Page({ chainId, }); - const { tooltipMessage, isConnected, missmatchUrl } = useDisableButtons(); + const disableManSupportBtn = useMemo( + () => [ + { + condition: !isMemberCommunity, + message: "Join community to dispute", + }, + ], + [address], + ); + + const { tooltipMessage, isConnected, missmatchUrl } = + useDisableButtons(disableManSupportBtn); const { currentConvictionPct, @@ -262,6 +291,7 @@ export default function Page({ proposalData={{ ...proposalData, ...metadata }} /> : } @@ -285,7 +315,7 @@ export default function Page({