diff --git a/.github/workflows/build-from-main.yml b/.github/workflows/build-from-main.yml index 53e033180..48d283cdb 100644 --- a/.github/workflows/build-from-main.yml +++ b/.github/workflows/build-from-main.yml @@ -4,7 +4,6 @@ on: push: branches: - main - - staging workflow_dispatch: permissions: @@ -83,90 +82,6 @@ jobs: dockerfile: ./govtool/metadata-validation/Dockerfile image: ghcr.io/${{ github.repository }}-metadata-validation qovery_container_name: govtool-metadata-validation - - branch: staging - network: preview-govtool - workdir: ./govtool/backend - name: govtool-backend - dockerfile: ./govtool/backend/Dockerfile.qovery - image: ghcr.io/${{ github.repository }}-backend - qovery_container_name: govtool-backend - - branch: staging - network: preview-govtool - workdir: ./govtool/frontend - name: govtool-frontend - dockerfile: ./govtool/frontend/Dockerfile.qovery - image: ghcr.io/${{ github.repository }}-frontend - qovery_container_name: govtool-frontend - - branch: staging - network: preview-govtool - workdir: ./govtool/metadata-validation - name: govtool-metadata-validation - dockerfile: ./govtool/metadata-validation/Dockerfile - image: ghcr.io/${{ github.repository }}-metadata-validation - qovery_container_name: govtool-metadata-validation - - branch: staging - network: pre-prod-govtool - workdir: ./govtool/backend - name: govtool-backend - dockerfile: ./govtool/backend/Dockerfile.qovery - image: ghcr.io/${{ github.repository }}-backend - qovery_container_name: govtool-backend - - branch: staging - network: pre-prod-govtool - workdir: ./govtool/frontend - name: govtool-frontend - dockerfile: ./govtool/frontend/Dockerfile.qovery - image: ghcr.io/${{ github.repository }}-frontend - qovery_container_name: govtool-frontend - - branch: staging - network: pre-prod-govtool - workdir: ./govtool/metadata-validation - name: govtool-metadata-validation - dockerfile: ./govtool/metadata-validation/Dockerfile - image: ghcr.io/${{ github.repository }}-metadata-validation - qovery_container_name: govtool-metadata-validation - - branch: staging - network: prod-govtool - workdir: ./govtool/backend - name: govtool-backend - dockerfile: ./govtool/backend/Dockerfile.qovery - image: ghcr.io/${{ github.repository }}-backend - qovery_container_name: govtool-backend - - branch: staging - network: prod-govtool - workdir: ./govtool/frontend - name: govtool-frontend - dockerfile: ./govtool/frontend/Dockerfile.qovery - image: ghcr.io/${{ github.repository }}-frontend - qovery_container_name: govtool-frontend - - branch: staging - network: prod-govtool - workdir: ./govtool/metadata-validation - name: govtool-metadata-validation - dockerfile: ./govtool/metadata-validation/Dockerfile - image: ghcr.io/${{ github.repository }}-metadata-validation - qovery_container_name: govtool-metadata-validation - - branch: develop - network: dev-govtool - workdir: ./govtool/backend - name: govtool-backend - dockerfile: ./govtool/backend/Dockerfile.qovery - image: ghcr.io/${{ github.repository }}-backend - qovery_container_name: govtool-backend - - branch: develop - network: dev-govtool - workdir: ./govtool/frontend - name: govtool-frontend - dockerfile: ./govtool/frontend/Dockerfile.qovery - image: ghcr.io/${{ github.repository }}-frontend - qovery_container_name: govtool-frontend - - branch: develop - network: dev-govtool - workdir: ./govtool/metadata-validation - name: govtool-metadata-validation - dockerfile: ./govtool/metadata-validation/Dockerfile - image: ghcr.io/${{ github.repository }}-metadata-validation - qovery_container_name: govtool-metadata-validation runs-on: ubuntu-latest steps: diff --git a/.github/workflows/merge.yaml b/.github/workflows/merge.yaml index 5af2282e3..0511b4023 100644 --- a/.github/workflows/merge.yaml +++ b/.github/workflows/merge.yaml @@ -1,7 +1,10 @@ name: Check,Build,Deploy on: - workflow_dispatch + push: + branches: + - develop + workflow_dispatch: permissions: contents: write diff --git a/govtool/backend/src/VVA/API.hs b/govtool/backend/src/VVA/API.hs index ca7660358..06b9fd39f 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 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]); diff --git a/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx b/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx index 878527c02..101ec0f52 100644 --- a/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx +++ b/govtool/frontend/src/components/organisms/DashboardGovernanceActions.tsx @@ -22,7 +22,6 @@ import { DashboardGovernanceActionsVotedOn, } from "@organisms"; import { Button } from "@atoms"; -import usePrevious from "@/hooks/usePrevious"; type TabPanelProps = { children?: React.ReactNode; @@ -85,21 +84,11 @@ export const DashboardGovernanceActions = () => { const queryFilters = chosenFilters.length > 0 ? chosenFilters : defaultCategories; - const prevFilters = usePrevious(queryFilters); - const prevSorting = usePrevious(chosenSorting); - - const stableFilters = isAdjusting - ? prevFilters ?? queryFilters - : queryFilters; - const stableSorting = isAdjusting - ? prevSorting ?? chosenSorting - : chosenSorting; - const { proposals, isProposalsLoading } = useGetProposalsQuery({ - filters: stableFilters, - sorting: stableSorting, + filters: queryFilters, + sorting: chosenSorting, searchPhrase: debouncedSearchText, - enabled: true, + enabled: !isAdjusting, }); const { data: votes, areDRepVotesLoading } = useGetDRepVotesQuery( queryFilters, @@ -109,31 +98,31 @@ export const DashboardGovernanceActions = () => { // White Magic :) 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]); + 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 { state } = useLocation(); const [content, setContent] = useState( 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) ?? []); 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 = ({