diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7d49230eb..33a05143d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -80,6 +80,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Improvements
+- [#996](https://github.com/alleslabs/celatone-frontend/pull/996) Allow disable voting period tally config
- [#960](https://github.com/alleslabs/celatone-frontend/pull/960) Adjust UI in contract and account detail page
- [#983](https://github.com/alleslabs/celatone-frontend/pull/983) Add fallback for collection names that are empty string
- [#982](https://github.com/alleslabs/celatone-frontend/pull/982) Support Icns in account osmosis lite version
diff --git a/src/config/chain/initia.ts b/src/config/chain/initia.ts
index d40275d24..fc11e1532 100644
--- a/src/config/chain/initia.ts
+++ b/src/config/chain/initia.ts
@@ -87,6 +87,7 @@ export const INITIA_CHAIN_CONFIGS: ChainConfigs = {
enabled: true,
version: "v1",
hideOpenProposal: true,
+ disableVotingPeriodTally: true,
},
nft: {
enabled: true,
diff --git a/src/config/chain/types.ts b/src/config/chain/types.ts
index 178474cf1..c9f068ed4 100644
--- a/src/config/chain/types.ts
+++ b/src/config/chain/types.ts
@@ -44,6 +44,7 @@ type GovConfig =
hideOpenProposal?: boolean;
disableWhitelistProposal?: boolean;
disableStoreCodeProposal?: boolean;
+ disableVotingPeriodTally?: boolean;
}
| {
enabled: false;
diff --git a/src/lib/pages/proposal-details/components/NoVotingPeriodTally.tsx b/src/lib/pages/proposal-details/components/NoVotingPeriodTally.tsx
new file mode 100644
index 000000000..5c2d716d3
--- /dev/null
+++ b/src/lib/pages/proposal-details/components/NoVotingPeriodTally.tsx
@@ -0,0 +1,26 @@
+import { Alert, AlertDescription } from "@chakra-ui/react";
+
+import { useCurrentChain } from "lib/app-provider";
+import { CustomIcon } from "lib/components/icon";
+
+export const NoVotingPeriodTallyExplanation = () => {
+ const {
+ chain: { chain_id: chainId },
+ } = useCurrentChain();
+ return (
+ <>
+ The proposal tally information during voting period is unavailable in{" "}
+ {chainId}. It will be available
+ after voting period ends.
+ >
+ );
+};
+
+export const NoVotingPeriodTallyAlert = () => (
+
+
+
+
+
+
+);
diff --git a/src/lib/pages/proposal-details/components/ResultExplanation.tsx b/src/lib/pages/proposal-details/components/ResultExplanation.tsx
index 45d042b20..c5e9d0cdc 100644
--- a/src/lib/pages/proposal-details/components/ResultExplanation.tsx
+++ b/src/lib/pages/proposal-details/components/ResultExplanation.tsx
@@ -2,6 +2,7 @@
import { SkeletonText, Text } from "@chakra-ui/react";
import { isNull } from "lodash";
+import { useGovConfig } from "lib/app-provider";
import {
extractParams,
mapDeposit,
@@ -20,6 +21,7 @@ import { ProposalStatus } from "lib/types";
import { formatPrettyPercent, formatTokenWithValueList } from "lib/utils";
import { ErrorFetchingProposalInfos } from "./ErrorFetchingProposalInfos";
+import { NoVotingPeriodTallyExplanation } from "./NoVotingPeriodTally";
import { ViewFailedReason } from "./ViewFailedReason";
const Passed = () => (
@@ -66,12 +68,25 @@ export interface ResultExplanationProps {
isLoading: boolean;
}
+// eslint-disable-next-line complexity
export const ResultExplanation = ({
proposalData,
params,
votesInfo,
isLoading,
}: ResultExplanationProps) => {
+ const gov = useGovConfig({ shouldRedirect: false });
+ if (
+ gov.enabled &&
+ gov.disableVotingPeriodTally &&
+ proposalData.status === ProposalStatus.VOTING_PERIOD
+ )
+ return (
+
+
+
+ );
+
if (proposalData.status === ProposalStatus.DEPOSIT_FAILED)
return (
diff --git a/src/lib/pages/proposal-details/components/proposal-overview/proposal-period-overview/VotingOverview.tsx b/src/lib/pages/proposal-details/components/proposal-overview/proposal-period-overview/VotingOverview.tsx
index 5bb4fd578..2ce02ab48 100644
--- a/src/lib/pages/proposal-details/components/proposal-overview/proposal-period-overview/VotingOverview.tsx
+++ b/src/lib/pages/proposal-details/components/proposal-overview/proposal-period-overview/VotingOverview.tsx
@@ -2,7 +2,8 @@ import { Button, Flex, Text } from "@chakra-ui/react";
import type { ProposalOverviewProps } from "..";
import { ErrorFetchingProposalInfos } from "../../ErrorFetchingProposalInfos";
-import { useInternalNavigate } from "lib/app-provider";
+import { NoVotingPeriodTallyAlert } from "../../NoVotingPeriodTally";
+import { useGovConfig, useInternalNavigate } from "lib/app-provider";
import { CustomIcon } from "lib/components/icon";
import { Loading } from "lib/components/Loading";
import { TabIndex } from "lib/pages/proposal-details/types";
@@ -20,6 +21,15 @@ const VotingOverviewBody = ({
}: ProposalOverviewProps) => {
const navigate = useInternalNavigate();
+ const gov = useGovConfig({ shouldRedirect: false });
+ const disableVotingPeriodTally = gov.enabled && gov.disableVotingPeriodTally;
+
+ if (
+ proposalData.status === ProposalStatus.VOTING_PERIOD &&
+ disableVotingPeriodTally
+ )
+ return ;
+
if (proposalData.status === ProposalStatus.DEPOSIT_PERIOD)
return (
diff --git a/src/lib/pages/proposal-details/components/proposal-overview/status-summary/index.tsx b/src/lib/pages/proposal-details/components/proposal-overview/status-summary/index.tsx
index dd7ce0632..b42abaf41 100644
--- a/src/lib/pages/proposal-details/components/proposal-overview/status-summary/index.tsx
+++ b/src/lib/pages/proposal-details/components/proposal-overview/status-summary/index.tsx
@@ -4,6 +4,8 @@ import type { CSSProperties } from "react";
import type { ProposalOverviewProps } from "..";
import { ActiveDot } from "../../ActiveDot";
import { ResultExplanation } from "../../ResultExplanation";
+import { useGovConfig } from "lib/app-provider";
+import { StatusChip } from "lib/components/table";
import { ProposalStatus } from "lib/types";
import { SummaryStatusChip } from "./SummaryStatusChip";
@@ -34,6 +36,8 @@ export const StatusSummary = ({
proposalData,
...props
}: ProposalOverviewProps) => {
+ const gov = useGovConfig({ shouldRedirect: false });
+ const disableVotingPeriodTally = gov.enabled && gov.disableVotingPeriodTally;
const isDepositOrVoting =
proposalData.status === ProposalStatus.DEPOSIT_PERIOD ||
proposalData.status === ProposalStatus.VOTING_PERIOD;
@@ -55,10 +59,22 @@ export const StatusSummary = ({
>
{isDepositOrVoting && }
-
- {isDepositOrVoting ? "Current" : "Final"} proposal result:
-
-
+ {disableVotingPeriodTally &&
+ proposalData.status === ProposalStatus.VOTING_PERIOD ? (
+ <>
+
+ Current proposal status:
+
+
+ >
+ ) : (
+ <>
+
+ {isDepositOrVoting ? "Current" : "Final"} proposal result:
+
+
+ >
+ )}
diff --git a/src/lib/pages/proposal-details/components/vote-details/voting-period/index.tsx b/src/lib/pages/proposal-details/components/vote-details/voting-period/index.tsx
index afa4cb98a..ca3c00776 100644
--- a/src/lib/pages/proposal-details/components/vote-details/voting-period/index.tsx
+++ b/src/lib/pages/proposal-details/components/vote-details/voting-period/index.tsx
@@ -11,11 +11,13 @@ import { isNull } from "lodash";
import type { ReactNode } from "react";
import type { VoteDetailsProps } from "..";
+import { NoVotingPeriodTallyAlert } from "../../NoVotingPeriodTally";
import { AmpEvent, track } from "lib/amplitude";
-import { useMobile, useTierConfig } from "lib/app-provider";
+import { useGovConfig, useMobile, useTierConfig } from "lib/app-provider";
import { CustomIcon } from "lib/components/icon";
import { TableTitle } from "lib/components/table";
import { useProposalAnswerCounts } from "lib/services/proposal";
+import { ProposalStatus } from "lib/types";
import { scrollToComponent, scrollYPosition } from "lib/utils";
import { ProposalVotesPanel } from "./ProposalVotesPanel";
@@ -50,9 +52,11 @@ const ContentContainer = ({
const scrollComponentId = "voting-period";
export const VotingPeriod = ({ proposalData, ...props }: VoteDetailsProps) => {
+ const isMobile = useMobile();
const isFullTier = useTierConfig() === "full";
+ const gov = useGovConfig({ shouldRedirect: false });
+ const disableVotingPeriodTally = gov.enabled && gov.disableVotingPeriodTally;
- const isMobile = useMobile();
const validatorVoteDisclosure = useDisclosure();
const allVoteDisclosure = useDisclosure();
@@ -111,14 +115,21 @@ export const VotingPeriod = ({ proposalData, ...props }: VoteDetailsProps) => {
transition="all 0.25s ease-in-out"
gap={4}
>
- {/* Voting Participations */}
-
-
-
- {/* Voting Results */}
-
-
-
+ {proposalData.status === ProposalStatus.VOTING_PERIOD &&
+ disableVotingPeriodTally ? (
+
+ ) : (
+ <>
+ {/* Voting Participations */}
+
+
+
+ {/* Voting Results */}
+
+
+
+ >
+ )}
{isFullTier && (
{/* Validator Votes */}
diff --git a/src/lib/pages/proposal-details/data.ts b/src/lib/pages/proposal-details/data.ts
index 16948d40b..7c23a9bcf 100644
--- a/src/lib/pages/proposal-details/data.ts
+++ b/src/lib/pages/proposal-details/data.ts
@@ -1,4 +1,4 @@
-import { useTierConfig } from "lib/app-provider";
+import { useGovConfig, useTierConfig } from "lib/app-provider";
import { useAssetInfos } from "lib/services/assetService";
import { useMovePoolInfos } from "lib/services/move/poolService";
import {
@@ -124,10 +124,16 @@ export const useDerivedProposalVotesInfo = (
proposalData: DerivedProposalDataResponse["data"],
isProposalDataLoading: boolean
): DerivedProposalVotesInfoResponse => {
+ const gov = useGovConfig({ shouldRedirect: false });
+ const disableVotingPeriodTally = gov.enabled && gov.disableVotingPeriodTally;
+
const isVotingPeriod =
proposalData?.info?.status === ProposalStatus.VOTING_PERIOD;
- const { data, isLoading } = useProposalVotesInfo(id, isVotingPeriod);
+ const { data, isFetching } = useProposalVotesInfo(
+ id,
+ isVotingPeriod && !disableVotingPeriodTally
+ );
if (!isVotingPeriod) {
return {
@@ -138,6 +144,6 @@ export const useDerivedProposalVotesInfo = (
return {
data,
- isLoading,
+ isLoading: isFetching,
};
};