diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1e8b9f81b..101a6893a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,8 @@ As a minor extension, we also keep a semantic version for the `UNRELEASED`
changes.
## [Unreleased]
+- Add possibility to vote on behalf of myself - Sole Voter [Issue 119](https://github.com/IntersectMBO/govtool/issues/119)
+- Create DRep registration page about roles [Issue 205](https://github.com/IntersectMBO/govtool/issues/205)
- Create Checkbox component. Improve Field and ControlledField [Issue 177](https://github.com/IntersectMBO/govtool/pull/177)
- Vitest unit tests added for utils functions [Issue 81](https://github.com/IntersectMBO/govtool/issues/81)
- i18next library added to FE [Issue 80](https://github.com/IntersectMBO/govtool/issues/80)
@@ -17,13 +19,16 @@ changes.
- Added `isRegisteredAsSoleVoter` and `wasRegisteredAsSoleVoter` fields to the drep/info response [Issue 212](https://github.com/IntersectMBO/govtool/issues/212)
### Fixed
+- Fix make button disble when wallet tries connect [Issue 265](https://github.com/IntersectMBO/govtool/issues/265)
- Fix drep voting power calculation [Issue 231](https://github.com/IntersectMBO/govtool/issues/231)
- Fix proposal/list and network/metrics bug that appeared when noone has delegated their funds either to drep_always_abstain or drep_always_no_confidence [Issue 231](https://github.com/IntersectMBO/govtool/issues/231)
+- Fix GA details [Issue 272](https://github.com/IntersectMBO/govtool/issues/272)
- Fix copy for maintenance page [Issue 180](https://github.com/IntersectMBO/govtool/issues/180)
- Fix misleading metadata hash text [Issue 90](https://github.com/IntersectMBO/govtool/issues/90)
- Fixed vote calculation problems related to NoConfidence DRep [Issue 59](https://github.com/IntersectMBO/govtool/issues/59)
- Fixed ada-holder/get-current-delegation error when delegated to NoConfidence or AlwaysAbstain dreps. [Issue 82](https://github.com/IntersectMBO/govtool/issues/82)
- Fixed deployment scripts to address [Issue 171](https://github.com/IntersectMBO/govtool/issues/171).
+- Fixed get drep voting power incorrectly executed endpoint [Issue 280](https://github.com/IntersectMBO/govtool/issues/280)
### Changed
- `isRegistered` and `wasRegistered` fields in the drep/info endpoint changed to `isRegisteredAsDRep` and `wasRegisteredAsDRep` respectively [Issue 212](https://github.com/IntersectMBO/govtool/issues/212)
diff --git a/govtool/backend/Dockerfile b/govtool/backend/Dockerfile
index d51a9307e..75600043c 100644
--- a/govtool/backend/Dockerfile
+++ b/govtool/backend/Dockerfile
@@ -1,5 +1,6 @@
-FROM haskell:9.2-buster
+ARG BASE_IMAGE_TAG
+FROM 733019650473.dkr.ecr.eu-west-1.amazonaws.com/backend-base:$BASE_IMAGE_TAG
WORKDIR /src
COPY . .
-RUN cabal update && cabal configure && cabal build
+RUN cabal build
RUN cp dist-newstyle/build/x86_64-linux/ghc-9.2.8/vva-be-0.1.0.0/x/vva-be/build/vva-be/vva-be /usr/local/bin
diff --git a/govtool/backend/Dockerfile.base b/govtool/backend/Dockerfile.base
new file mode 100644
index 000000000..e9b93f093
--- /dev/null
+++ b/govtool/backend/Dockerfile.base
@@ -0,0 +1,10 @@
+# NOTE: This Dockerfile sets up an environment with precompiled dependencies for
+# the GovTool Haskell backend project, streamlining the project's compilation
+# process by ensuring it only needs to compile against these dependencies. This
+# is a common practice in Haskell projects, as it can significantly reduce the
+# time it takes to build the project.
+
+FROM haskell:9.2-buster
+WORKDIR /src
+COPY . .
+RUN cabal update && cabal configure && cabal install --only-dependencies && rm -rf /src/*
diff --git a/govtool/backend/sql/get-drep-info.sql b/govtool/backend/sql/get-drep-info.sql
index e1bfcbbc6..210803c08 100644
--- a/govtool/backend/sql/get-drep-info.sql
+++ b/govtool/backend/sql/get-drep-info.sql
@@ -9,6 +9,7 @@ WITH DRepId AS (
CROSS JOIN DRepId
WHERE drep_hash.raw = DRepId.raw
and deposit is not null
+ and drep_registration.voting_anchor_id is not null
ORDER BY drep_registration.tx_id DESC
LIMIT 1
), WasRegisteredAsDRep AS (
diff --git a/govtool/frontend/public/icons/ArrowLeftThin.svg b/govtool/frontend/public/icons/ArrowLeftThin.svg
new file mode 100644
index 000000000..38c648693
--- /dev/null
+++ b/govtool/frontend/public/icons/ArrowLeftThin.svg
@@ -0,0 +1,5 @@
+
diff --git a/govtool/frontend/public/images/GovActionsSoleVoter.png b/govtool/frontend/public/images/GovActionsSoleVoter.png
new file mode 100644
index 000000000..69048a4c3
Binary files /dev/null and b/govtool/frontend/public/images/GovActionsSoleVoter.png differ
diff --git a/govtool/frontend/src/App.tsx b/govtool/frontend/src/App.tsx
index 91dab6356..a282b9e74 100644
--- a/govtool/frontend/src/App.tsx
+++ b/govtool/frontend/src/App.tsx
@@ -21,6 +21,7 @@ import {
UpdatedRepMetadata,
GovernanceActionsCategory,
DashboardGovernanceActionsCategory,
+ RetireAsSoleVoter,
} from "@pages";
import {
callAll,
@@ -30,9 +31,10 @@ import {
} from "@utils";
import { SetupInterceptors } from "./services";
import { useGetDRepInfo, useWalletConnectionListener } from "./hooks";
+import { RegisterAsSoleVoter } from "./pages/RegisterAsSoleVoter";
export default function App() {
- const { enable, setDRep, setIsDrepLoading } = useCardano();
+ const { enable, setVoter, setIsDrepLoading } = useCardano();
const navigate = useNavigate();
const { data } = useGetDRepInfo();
const { modal, openModal, modals } = useModal();
@@ -45,11 +47,11 @@ export default function App() {
useEffect(() => {
setIsDrepLoading(true);
- setDRep(data);
+ setVoter(data);
const timer = setTimeout(() => setIsDrepLoading(false), 1000);
return () => clearTimeout(timer);
- }, [data?.isRegistered]);
+ }, [data?.isRegisteredAsDRep, data?.isRegisteredAsSoleVoter]);
const checkTheWalletIsActive = useCallback(() => {
const hrefCondition =
@@ -115,6 +117,11 @@ export default function App() {
} />
} />
+ }
+ />
+ } />
} />
} />
} />
diff --git a/govtool/frontend/src/components/atoms/VotingPowerChips.tsx b/govtool/frontend/src/components/atoms/VotingPowerChips.tsx
index 897ec0ce8..ad707be93 100644
--- a/govtool/frontend/src/components/atoms/VotingPowerChips.tsx
+++ b/govtool/frontend/src/components/atoms/VotingPowerChips.tsx
@@ -13,7 +13,7 @@ import { correctAdaFormat } from "@utils";
import { Tooltip } from "@atoms";
export const VotingPowerChips = () => {
- const { dRep, stakeKey, isDrepLoading } = useCardano();
+ const { voter, stakeKey, isDrepLoading } = useCardano();
const { dRepVotingPower, isDRepVotingPowerLoading } =
useGetDRepVotingPowerQuery();
const { votingPower, powerIsLoading } =
@@ -33,7 +33,7 @@ export const VotingPowerChips = () => {
alignItems="center"
maxHeight={isMobile ? undefined : 48}
>
- {dRep?.isRegistered && (
+ {voter?.isRegisteredAsDRep && (
{
{t("votingPower")}
)}
- {(dRep?.isRegistered && isDRepVotingPowerLoading) ||
- (!dRep?.isRegistered && powerIsLoading) ||
+ {(voter?.isRegisteredAsDRep && isDRepVotingPowerLoading) ||
+ (!voter?.isRegisteredAsDRep && powerIsLoading) ||
isDrepLoading ? (
) : (
@@ -67,7 +67,7 @@ export const VotingPowerChips = () => {
sx={{ whiteSpace: "nowrap" }}
>
₳{" "}
- {dRep?.isRegistered
+ {voter?.isRegisteredAsDRep
? correctAdaFormat(dRepVotingPower) ?? 0
: correctAdaFormat(votingPower) ?? 0}
diff --git a/govtool/frontend/src/components/molecules/ActionCard.tsx b/govtool/frontend/src/components/molecules/ActionCard.tsx
index 63fc9eb03..3418c6471 100644
--- a/govtool/frontend/src/components/molecules/ActionCard.tsx
+++ b/govtool/frontend/src/components/molecules/ActionCard.tsx
@@ -94,7 +94,6 @@ export const ActionCard: FC = ({ ...props }) => {