From 6f45eddc93ec38794e4cadd8d9b014a1280b9090 Mon Sep 17 00:00:00 2001 From: bosko-m <88723596+bosko-m@users.noreply.github.com> Date: Fri, 25 Jul 2025 02:23:29 +0200 Subject: [PATCH 01/11] Update DashboardGovernanceActions.tsx - removes double filtering of proposals Signed-off-by: bosko-m <88723596+bosko-m@users.noreply.github.com> --- .../organisms/DashboardGovernanceActions.tsx | 24 +------------------ 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx b/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx index 878527c02..d7d7092db 100644 --- a/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx +++ b/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx @@ -111,29 +111,7 @@ export const DashboardGovernanceActions = () => { const shouldFilter = voter?.isRegisteredAsDRep || voter?.isRegisteredAsSoleVoter; -const filteredProposals = useMemo(() => { - if (!shouldFilter || !proposals || !votes) return proposals; - - return proposals - .map((proposalCategory) => { - const filteredActions = proposalCategory.actions.filter((action) => { - const hasVote = votes.some((voteCategory) => - voteCategory.actions.some( - (voteAction) => - voteAction.proposal.txHash === action.txHash && - voteAction.proposal.index === action.index, - ), - ); - return !hasVote; - }); - - return { - ...proposalCategory, - actions: filteredActions, - }; - }) - .filter((category) => category.actions.length > 0); -}, [proposals, votes, shouldFilter]); +const filteredProposals = proposals; const { state } = useLocation(); const [content, setContent] = useState( From 74f6b97806f65c507de15ed436f6eac89387c6f5 Mon Sep 17 00:00:00 2001 From: bosko-m <88723596+bosko-m@users.noreply.github.com> Date: Fri, 25 Jul 2025 02:45:30 +0200 Subject: [PATCH 02/11] Update DashboardGovernanceActions.tsx - lint checks fix Signed-off-by: bosko-m <88723596+bosko-m@users.noreply.github.com> --- .../src/components/organisms/DashboardGovernanceActions.tsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx b/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx index d7d7092db..b2e6e6fa4 100644 --- a/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx +++ b/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect, useCallback, useMemo } from "react"; +import { useState, useEffect, useCallback } from "react"; import { Box, CircularProgress, Tab, Tabs, styled } from "@mui/material"; import { useLocation, useNavigate } from "react-router-dom"; @@ -107,10 +107,6 @@ export const DashboardGovernanceActions = () => { debouncedSearchText, ); - // White Magic :) - const shouldFilter = - voter?.isRegisteredAsDRep || voter?.isRegisteredAsSoleVoter; - const filteredProposals = proposals; const { state } = useLocation(); From baf494d315a303fa8a931b781daaa0003f8c2c2e Mon Sep 17 00:00:00 2001 From: Miro Date: Fri, 25 Jul 2025 08:52:07 +0200 Subject: [PATCH 03/11] Clening search input on start dRepDirectory --- govtool/frontend/src/pages/DRepDirectoryContent.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/govtool/frontend/src/pages/DRepDirectoryContent.tsx b/govtool/frontend/src/pages/DRepDirectoryContent.tsx index bf2d132d6..47b1b1006 100644 --- a/govtool/frontend/src/pages/DRepDirectoryContent.tsx +++ b/govtool/frontend/src/pages/DRepDirectoryContent.tsx @@ -50,15 +50,24 @@ export const DRepDirectoryContent: FC = ({ }) => { const { dRepID: myDRepId, pendingTransaction, stakeKey } = useCardano(); const { t } = useTranslation(); - const { debouncedSearchText, ...dataActionsBarProps } = useDataActionsBar(); + + const { + searchText, + debouncedSearchText, + setSearchText, + ...dataActionsBarProps + } = useDataActionsBar(); + const { chosenFilters, chosenSorting, setChosenFilters, setChosenSorting } = dataActionsBarProps; const [inProgressDelegationDRepData, setInProgressDelegationDRepData] = useState(undefined); + // Set initial filters and sort useEffect(() => { setChosenFilters([DRepStatus.Active]); + setSearchText(""); // <--- Clear the search field on mount }, []); useEffect(() => { @@ -198,6 +207,8 @@ export const DRepDirectoryContent: FC = ({ Date: Fri, 25 Jul 2025 11:02:48 +0200 Subject: [PATCH 04/11] P0 - GA index in the URL is not considered as a parameter but an html anchor --- .../components/organisms/DashboardGovernanceActionDetails.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx b/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx index 48eafadd2..00beac7d3 100644 --- a/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx +++ b/govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx @@ -60,7 +60,8 @@ export const DashboardGovernanceActionDetails = () => { ); useEffect(() => { - if (data?.proposal && typeof isMetadataValid !== "boolean") { + const extendedProposalIndex = extendedProposal ? extendedProposal.index : -1; + if (data?.proposal && data?.proposal.index !== extendedProposalIndex) { setExtendedProposal(data.proposal); } }, [data?.proposal, isMetadataValid]); From 75f616185db9eb93bde20e8cca7753ae0b141b7a Mon Sep 17 00:00:00 2001 From: Aaron Boyle Date: Fri, 25 Jul 2025 14:45:21 +0100 Subject: [PATCH 05/11] Revert "Update DashboardGovernanceActions.tsx - lint checks fix" This reverts commit 74f6b97806f65c507de15ed436f6eac89387c6f5. --- .../src/components/organisms/DashboardGovernanceActions.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx b/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx index b2e6e6fa4..d7d7092db 100644 --- a/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx +++ b/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect, useCallback } from "react"; +import { useState, useEffect, useCallback, useMemo } from "react"; import { Box, CircularProgress, Tab, Tabs, styled } from "@mui/material"; import { useLocation, useNavigate } from "react-router-dom"; @@ -107,6 +107,10 @@ export const DashboardGovernanceActions = () => { debouncedSearchText, ); + // White Magic :) + const shouldFilter = + voter?.isRegisteredAsDRep || voter?.isRegisteredAsSoleVoter; + const filteredProposals = proposals; const { state } = useLocation(); From bbbcc939eb1d0c2587e58dec252b36da34a75eee Mon Sep 17 00:00:00 2001 From: Aaron Boyle Date: Fri, 25 Jul 2025 14:45:41 +0100 Subject: [PATCH 06/11] Revert "Update DashboardGovernanceActions.tsx - removes double filtering of proposals" This reverts commit 6f45eddc93ec38794e4cadd8d9b014a1280b9090. --- .../organisms/DashboardGovernanceActions.tsx | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx b/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx index d7d7092db..878527c02 100644 --- a/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx +++ b/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx @@ -111,7 +111,29 @@ export const DashboardGovernanceActions = () => { const shouldFilter = voter?.isRegisteredAsDRep || voter?.isRegisteredAsSoleVoter; -const filteredProposals = proposals; +const filteredProposals = useMemo(() => { + if (!shouldFilter || !proposals || !votes) return proposals; + + return proposals + .map((proposalCategory) => { + const filteredActions = proposalCategory.actions.filter((action) => { + const hasVote = votes.some((voteCategory) => + voteCategory.actions.some( + (voteAction) => + voteAction.proposal.txHash === action.txHash && + voteAction.proposal.index === action.index, + ), + ); + return !hasVote; + }); + + return { + ...proposalCategory, + actions: filteredActions, + }; + }) + .filter((category) => category.actions.length > 0); +}, [proposals, votes, shouldFilter]); const { state } = useLocation(); const [content, setContent] = useState( From 23a4cec991a5520ae27f001df8e4ed22e178596b Mon Sep 17 00:00:00 2001 From: bosko-m <88723596+bosko-m@users.noreply.github.com> Date: Fri, 25 Jul 2025 15:48:56 +0200 Subject: [PATCH 07/11] Update API.hs - test getvotes filtering with txhash+index Signed-off-by: bosko-m <88723596+bosko-m@users.noreply.github.com> --- govtool/backend/src/VVA/API.hs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/govtool/backend/src/VVA/API.hs b/govtool/backend/src/VVA/API.hs index ca7660358..baf1fd344 100644 --- a/govtool/backend/src/VVA/API.hs +++ b/govtool/backend/src/VVA/API.hs @@ -296,22 +296,22 @@ getVotes (unHexText -> dRepId) selectedTypes sortMode mSearch = do CacheEnv {dRepGetVotesCache} <- asks vvaCache (votes, proposals) <- cacheRequest dRepGetVotesCache dRepId $ DRep.getVotes dRepId [] - let voteMapByTxHash = Map.fromList $ - map (\vote -> (pack $ Prelude.takeWhile (/= '#') (unpack $ Types.voteGovActionId vote), vote)) votes + let voteMapById = Map.fromList $ + map (\vote -> (Types.voteGovActionId vote, vote)) votes processedProposals <- filter (isProposalSearchedFor mSearch) <$> mapSortAndFilterProposals selectedTypes sortMode proposals - return $ + return [ VoteResponse { voteResponseVote = voteToResponse vote , voteResponseProposal = proposalResponse } | proposalResponse <- processedProposals - , let txHash = unHexText (proposalResponseTxHash proposalResponse) - , Just vote <- [Map.lookup txHash voteMapByTxHash] + , let govActionId = unHexText (proposalResponseTxHash proposalResponse) <> "#" <> pack (show $ proposalResponseIndex proposalResponse) + , Just vote <- [Map.lookup govActionId voteMapById] ] - + drepInfo :: App m => HexText -> m DRepInfoResponse drepInfo (unHexText -> dRepId) = do CacheEnv {dRepInfoCache} <- asks vvaCache From 3ff45798a8460da2eb588b5f679f8f8d05e2ef14 Mon Sep 17 00:00:00 2001 From: bosko-m <88723596+bosko-m@users.noreply.github.com> Date: Fri, 25 Jul 2025 15:55:55 +0200 Subject: [PATCH 08/11] Update API.hs Signed-off-by: bosko-m <88723596+bosko-m@users.noreply.github.com> --- govtool/backend/src/VVA/API.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/govtool/backend/src/VVA/API.hs b/govtool/backend/src/VVA/API.hs index baf1fd344..5a3b88991 100644 --- a/govtool/backend/src/VVA/API.hs +++ b/govtool/backend/src/VVA/API.hs @@ -297,7 +297,7 @@ getVotes (unHexText -> dRepId) selectedTypes sortMode mSearch = do (votes, proposals) <- cacheRequest dRepGetVotesCache dRepId $ DRep.getVotes dRepId [] let voteMapById = Map.fromList $ - map (\vote -> (Types.voteGovActionId vote, vote)) votes + map (\vote -> (Types.voteGovActionId vote, vote)) votes processedProposals <- filter (isProposalSearchedFor mSearch) <$> mapSortAndFilterProposals selectedTypes sortMode proposals From 1069058417e6a16bfbc6571d9ab7321000582672 Mon Sep 17 00:00:00 2001 From: bosko-m <88723596+bosko-m@users.noreply.github.com> Date: Fri, 25 Jul 2025 16:03:24 +0200 Subject: [PATCH 09/11] Update API.hs - #3 Signed-off-by: bosko-m <88723596+bosko-m@users.noreply.github.com> --- govtool/backend/src/VVA/API.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/govtool/backend/src/VVA/API.hs b/govtool/backend/src/VVA/API.hs index 5a3b88991..06b9fd39f 100644 --- a/govtool/backend/src/VVA/API.hs +++ b/govtool/backend/src/VVA/API.hs @@ -297,7 +297,7 @@ getVotes (unHexText -> dRepId) selectedTypes sortMode mSearch = do (votes, proposals) <- cacheRequest dRepGetVotesCache dRepId $ DRep.getVotes dRepId [] let voteMapById = Map.fromList $ - map (\vote -> (Types.voteGovActionId vote, vote)) votes + map (\vote -> (Types.voteGovActionId vote, vote)) votes processedProposals <- filter (isProposalSearchedFor mSearch) <$> mapSortAndFilterProposals selectedTypes sortMode proposals From 3e12e746d155664229bd9a99c1eca2060f49abae Mon Sep 17 00:00:00 2001 From: bosko-m <88723596+bosko-m@users.noreply.github.com> Date: Fri, 25 Jul 2025 20:26:35 +0200 Subject: [PATCH 10/11] Update DashboardGovernanceActions.tsx - fetch proposals with voter status Signed-off-by: bosko-m <88723596+bosko-m@users.noreply.github.com> --- .../src/components/organisms/DashboardGovernanceActions.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx b/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx index 878527c02..b720ec2f4 100644 --- a/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx +++ b/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx @@ -99,7 +99,7 @@ export const DashboardGovernanceActions = () => { filters: stableFilters, sorting: stableSorting, searchPhrase: debouncedSearchText, - enabled: true, + enabled: voter?.isRegisteredAsDRep || voter?.isRegisteredAsSoleVoter, }); const { data: votes, areDRepVotesLoading } = useGetDRepVotesQuery( queryFilters, From a79972248d842289fc76d8f0fd9cf9a6d2adb6dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Sza=C5=82owski?= Date: Fri, 25 Jul 2025 21:40:34 +0200 Subject: [PATCH 11/11] fix: refetching proposal list on voter update --- .../organisms/GovernanceActionsToVote.tsx | 2 +- .../src/hooks/queries/useGetProposalsQuery.ts | 27 ++++++++++++------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx b/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx index 332aaa0ab..95729b3fa 100644 --- a/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx +++ b/govtool/frontend/src/components/organisms/GovernanceActionsToVote.tsx @@ -48,7 +48,7 @@ export const GovernanceActionsToVote = ({ data={item.actions.slice(0, 6).map((action) => (
proposal.elements); }; - const { data, isLoading } = useQuery( - [QUERY_KEYS.useGetProposalsKey, filters, searchPhrase, sorting, dRepID], - fetchProposals, - { - enabled, - refetchOnWindowFocus: true, - keepPreviousData: true, - staleTime: 2000, - }, - ); + const { data, isLoading } = useQuery( + [ + QUERY_KEYS.useGetProposalsKey, + filters, + searchPhrase, + sorting, + dRepID, + voter?.isRegisteredAsDRep, + voter?.isRegisteredAsSoleVoter, + ], + fetchProposals, + { + enabled, + refetchOnWindowFocus: true, + keepPreviousData: true, + }, + ); const proposals = Object.values(groupByType(data) ?? []);