Skip to content

Commit

Permalink
Merge pull request #2198 from IntersectMBO/develop
Browse files Browse the repository at this point in the history
GovTool v1.0.22-rc
  • Loading branch information
MSzalowski authored Oct 23, 2024
2 parents d259c04 + 571e269 commit 960e4d9
Show file tree
Hide file tree
Showing 53 changed files with 1,077 additions and 980 deletions.
30 changes: 30 additions & 0 deletions .github/workflows/add-issue-to-project.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Add Issue to Projects

on:
issues:
types: [opened]

jobs:
add-to-projects:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Install GitHub CLI
run: sudo apt-get install gh

- name: Authenticate GitHub CLI with default token
run: gh auth login --with-token <<< "$GITHUB_TOKEN"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Add issue to GovTool Project
run: gh project item-add IntersectMBO/30 --content-type Issue --content-id ${{ github.event.issue.node_id }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Add issue to Community Backlog Project
run: gh project item-add IntersectMBO/34 --content-type Issue --content-id ${{ github.event.issue.node_id }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
7 changes: 5 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,14 @@ changes.

### Fixed

-
- Fix unwanted horizontal page scroll on Governance Actions page [Issue 1897](https://github.com/IntersectMBO/govtool/issues/1897)
- Fix duplicate testIds for reference errors and hints in DRep metadata form [Issue 1965](https://github.com/IntersectMBO/govtool/issues/1965)
- Eliminate duplicate DReps in the DRep Directory [Issue 2171](https://github.com/IntersectMBO/govtool/issues/2171)
- Handle script based DReps [Issue 1951](https://github.com/IntersectMBO/govtool/issues/1951)

### Changed

-
- Bump to use Cardano Node `10.0.0-pre`

### Removed

Expand Down
7 changes: 7 additions & 0 deletions govtool/backend/sql/get-current-delegation.sql
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@ select
else encode(drep_hash.raw,'hex')
end as drep_raw,
drep_hash.view as drep_view,
EXISTS (
SELECT dh.has_script
FROM drep_hash as dh
WHERE drep_hash.raw = dh.raw
AND dh.has_script = true
LIMIT 1
) AS has_script,
encode(tx.hash, 'hex')
from delegation_vote
join tx on tx.id = delegation_vote.tx_id
Expand Down
14 changes: 14 additions & 0 deletions govtool/backend/sql/get-drep-info.sql
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,18 @@ LatestRegistrationEntry AS (
drep_registration.tx_id DESC
LIMIT 1
),
IsScriptHash AS (
SELECT EXISTS(
SELECT
drep_hash.has_script
FROM
drep_hash
CROSS JOIN DRepId
WHERE
drep_hash.raw = DRepId.raw
AND
drep_hash.has_script = true
) AS has_script),
IsRegisteredAsDRep AS (
SELECT
(LatestRegistrationEntry.deposit IS NULL
Expand Down Expand Up @@ -165,6 +177,7 @@ SoleVoterRetire AS (
LIMIT 1
)
SELECT
IsScriptHash.has_script,
IsRegisteredAsDRep.value,
WasRegisteredAsDRep.value,
IsRegisteredAsSoleVoter.value,
Expand Down Expand Up @@ -197,5 +210,6 @@ FROM
CROSS JOIN SoleVoterRegister
CROSS JOIN SoleVoterRetire
CROSS JOIN LatestRegistrationEntry
CROSS JOIN IsScriptHash
LEFT JOIN off_chain_vote_data ON off_chain_vote_data.voting_anchor_id = LatestRegistrationEntry.voting_anchor_id
LEFT JOIN off_chain_vote_drep_data ON off_chain_vote_drep_data.off_chain_vote_data_id = off_chain_vote_data.id
17 changes: 13 additions & 4 deletions govtool/backend/sql/list-dreps.sql
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ DRepActivity AS (
SELECT
encode(dh.raw, 'hex'),
dh.view,
dh.has_script,
va.url,
encode(va.data_hash, 'hex'),
dr_deposit.deposit,
Expand All @@ -30,7 +31,7 @@ SELECT
newestRegister.time AS last_register_time,
COALESCE(latestDeposit.deposit, 0),
non_deregister_voting_anchor.url IS NOT NULL AS has_non_deregister_voting_anchor,
off_chain_vote_fetch_error.fetch_error,
fetch_error.message,
off_chain_vote_drep_data.payment_address,
off_chain_vote_drep_data.given_name,
off_chain_vote_drep_data.objectives,
Expand Down Expand Up @@ -96,8 +97,15 @@ FROM
LEFT JOIN DRepDistr ON DRepDistr.hash_id = dh.id
AND DRepDistr.rn = 1
LEFT JOIN voting_anchor va ON va.id = dr_voting_anchor.voting_anchor_id
LEFT JOIN voting_anchor non_deregister_voting_anchor on non_deregister_voting_anchor.id = dr_non_deregister_voting_anchor.voting_anchor_id
LEFT JOIN off_chain_vote_fetch_error ON off_chain_vote_fetch_error.voting_anchor_id = va.id
LEFT JOIN voting_anchor non_deregister_voting_anchor ON non_deregister_voting_anchor.id = dr_non_deregister_voting_anchor.voting_anchor_id
LEFT JOIN (
SELECT fetch_error as message, voting_anchor_id
FROM off_chain_vote_fetch_error
WHERE fetch_time = (
SELECT max(fetch_time)
FROM off_chain_vote_fetch_error)
GROUP BY fetch_error, voting_anchor_id
) AS fetch_error ON fetch_error.voting_anchor_id = va.id
LEFT JOIN off_chain_vote_data ON off_chain_vote_data.voting_anchor_id = va.id
LEFT JOIN off_chain_vote_drep_data on off_chain_vote_drep_data.off_chain_vote_data_id = off_chain_vote_data.id
CROSS JOIN DRepActivity
Expand Down Expand Up @@ -130,6 +138,7 @@ GROUP BY
dh.raw,
second_to_newest_drep_registration.voting_anchor_id,
dh.view,
dh.has_script,
va.url,
va.data_hash,
dr_deposit.deposit,
Expand All @@ -140,7 +149,7 @@ GROUP BY
newestRegister.time,
latestDeposit.deposit,
non_deregister_voting_anchor.url,
off_chain_vote_fetch_error.fetch_error,
fetch_error.message,
off_chain_vote_drep_data.payment_address,
off_chain_vote_drep_data.given_name,
off_chain_vote_drep_data.objectives,
Expand Down
2 changes: 1 addition & 1 deletion govtool/backend/sql/list-proposals.sql
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ SELECT
end
) as description,
CASE
WHEN meta.network_name::text = 'mainnet' THEN
WHEN meta.network_name::text = 'mainnet' OR meta.network_name::text = 'preprod' THEN
latest_epoch.start_time + (gov_action_proposal.expiration - latest_epoch.no)::bigint * INTERVAL '5 days'
ELSE
latest_epoch.start_time + (gov_action_proposal.expiration - latest_epoch.no)::bigint * INTERVAL '1 day'
Expand Down
7 changes: 5 additions & 2 deletions govtool/backend/src/VVA/API.hs
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,8 @@ mapDRepStatus Types.Inactive = Inactive
drepRegistrationToDrep :: Types.DRepRegistration -> DRep
drepRegistrationToDrep Types.DRepRegistration {..} =
DRep
{ dRepDrepId = DRepHash dRepRegistrationDRepHash,
{ dRepIsScriptBased = dRepRegistrationIsScriptBased,
dRepDrepId = DRepHash dRepRegistrationDRepHash,
dRepView = dRepRegistrationView,
dRepUrl = dRepRegistrationUrl,
dRepMetadataHash = dRepRegistrationDataHash,
Expand All @@ -131,6 +132,7 @@ delegationToResponse Types.Delegation {..} =
DelegationResponse
{ delegationResponseDRepHash = HexText <$> delegationDRepHash,
delegationResponseDRepView = delegationDRepView,
delegationResponseIsDRepScriptBased = delegationIsDRepScriptBased,
delegationResponseTxHash = HexText delegationTxHash
}

Expand Down Expand Up @@ -286,7 +288,8 @@ drepInfo (unHexText -> dRepId) = do
CacheEnv {dRepInfoCache} <- asks vvaCache
Types.DRepInfo {..} <- cacheRequest dRepInfoCache dRepId $ DRep.getDRepInfo dRepId
return $ DRepInfoResponse
{ dRepInfoResponseIsRegisteredAsDRep = dRepInfoIsRegisteredAsDRep
{ dRepInfoResponseIsScriptBased = dRepInfoIsScriptBased
, dRepInfoResponseIsRegisteredAsDRep = dRepInfoIsRegisteredAsDRep
, dRepInfoResponseWasRegisteredAsDRep = dRepInfoWasRegisteredAsDRep
, dRepInfoResponseIsRegisteredAsSoleVoter = dRepInfoIsRegisteredAsSoleVoter
, dRepInfoResponseWasRegisteredAsSoleVoter = dRepInfoWasRegisteredAsSoleVoter
Expand Down
13 changes: 8 additions & 5 deletions govtool/backend/src/VVA/API/Types.hs
Original file line number Diff line number Diff line change
Expand Up @@ -561,7 +561,8 @@ instance ToSchema VoteResponse where

data DRepInfoResponse
= DRepInfoResponse
{ dRepInfoResponseIsRegisteredAsDRep :: Bool
{ dRepInfoResponseIsScriptBased :: Bool
, dRepInfoResponseIsRegisteredAsDRep :: Bool
, dRepInfoResponseWasRegisteredAsDRep :: Bool
, dRepInfoResponseIsRegisteredAsSoleVoter :: Bool
, dRepInfoResponseWasRegisteredAsSoleVoter :: Bool
Expand Down Expand Up @@ -758,7 +759,8 @@ instance ToSchema DRepType where

data DRep
= DRep
{ dRepDrepId :: DRepHash
{ dRepIsScriptBased :: Bool
, dRepDrepId :: DRepHash
, dRepView :: Text
, dRepUrl :: Maybe Text
, dRepMetadataHash :: Maybe Text
Expand Down Expand Up @@ -855,9 +857,10 @@ instance ToSchema ListDRepsResponse where

data DelegationResponse
= DelegationResponse
{ delegationResponseDRepHash :: Maybe HexText
, delegationResponseDRepView :: Text
, delegationResponseTxHash :: HexText
{ delegationResponseDRepHash :: Maybe HexText
, delegationResponseDRepView :: Text
, delegationResponseIsDRepScriptBased :: Bool
, delegationResponseTxHash :: HexText
}
deriveJSON (jsonOptions "delegationResponse") ''DelegationResponse

Expand Down
6 changes: 3 additions & 3 deletions govtool/backend/src/VVA/AdaHolder.hs
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ getCurrentDelegation ::
getCurrentDelegation stakeKey = withPool $ \conn -> do
result <- liftIO $ SQL.query conn getCurrentDelegationSql (SQL.Only stakeKey)
case result of
[] -> return Nothing
[(mDRepHash, dRepView, txHash)] -> return $ Just $ Delegation mDRepHash dRepView txHash
_ -> error ("multiple delegations for stake key: " <> unpack stakeKey)
[] -> return Nothing
[(mDRepHash, dRepView, isDRepScriptBased, txHash)] -> return $ Just $ Delegation mDRepHash dRepView isDRepScriptBased txHash
_ -> error ("multiple delegations for stake key: " <> unpack stakeKey)

getVotingPowerSql :: SQL.Query
getVotingPowerSql = sqlFrom $(embedFile "sql/get-stake-key-voting-power.sql")
Expand Down
11 changes: 7 additions & 4 deletions govtool/backend/src/VVA/DRep.hs
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,10 @@ listDReps = withPool $ \conn -> do
results <- liftIO $ SQL.query_ conn listDRepsSql
timeZone <- liftIO getCurrentTimeZone
return
[ DRepRegistration drepHash drepView url dataHash (floor @Scientific deposit) votingPower status drepType txHash (localTimeToUTC timeZone date) metadataError paymentAddress givenName objectives motivations qualifications imageUrl imageHash
[ DRepRegistration drepHash drepView isScriptBased url dataHash (floor @Scientific deposit) votingPower status drepType txHash (localTimeToUTC timeZone date) metadataError paymentAddress givenName objectives motivations qualifications imageUrl imageHash
| ( drepHash
, drepView
, isScriptBased
, url
, dataHash
, deposit
Expand Down Expand Up @@ -132,7 +133,8 @@ getDRepInfo
getDRepInfo drepId = withPool $ \conn -> do
result <- liftIO $ SQL.query conn getDRepInfoSql (SQL.Only drepId)
case result of
[ ( isRegisteredAsDRep
[ ( isScriptBased
, isRegisteredAsDRep
, wasRegisteredAsDRep
, isRegisteredAsSoleVoter
, wasRegisteredAsSoleVoter
Expand All @@ -153,7 +155,8 @@ getDRepInfo drepId = withPool $ \conn -> do
, imageHash
)] ->
return $ DRepInfo
{ dRepInfoIsRegisteredAsDRep = fromMaybe False isRegisteredAsDRep
{ dRepInfoIsScriptBased = isScriptBased
, dRepInfoIsRegisteredAsDRep = fromMaybe False isRegisteredAsDRep
, dRepInfoWasRegisteredAsDRep = fromMaybe False wasRegisteredAsDRep
, dRepInfoIsRegisteredAsSoleVoter = fromMaybe False isRegisteredAsSoleVoter
, dRepInfoWasRegisteredAsSoleVoter = fromMaybe False wasRegisteredAsSoleVoter
Expand All @@ -173,4 +176,4 @@ getDRepInfo drepId = withPool $ \conn -> do
, dRepInfoImageUrl = imageUrl
, dRepInfoImageHash = imageHash
}
[] -> return $ DRepInfo False False False False Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
[] -> return $ DRepInfo False False False False False Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
11 changes: 7 additions & 4 deletions govtool/backend/src/VVA/Types.hs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ data Vote

data DRepInfo
= DRepInfo
{ dRepInfoIsRegisteredAsDRep :: Bool
{ dRepInfoIsScriptBased :: Bool
, dRepInfoIsRegisteredAsDRep :: Bool
, dRepInfoWasRegisteredAsDRep :: Bool
, dRepInfoIsRegisteredAsSoleVoter :: Bool
, dRepInfoWasRegisteredAsSoleVoter :: Bool
Expand Down Expand Up @@ -101,6 +102,7 @@ data DRepRegistration
= DRepRegistration
{ dRepRegistrationDRepHash :: Text
, dRepRegistrationView :: Text
, dRepRegistrationIsScriptBased :: Bool
, dRepRegistrationUrl :: Maybe Text
, dRepRegistrationDataHash :: Maybe Text
, dRepRegistrationDeposit :: Integer
Expand Down Expand Up @@ -215,7 +217,8 @@ data NetworkMetrics

data Delegation
= Delegation
{ delegationDRepHash :: Maybe Text
, delegationDRepView :: Text
, delegationTxHash :: Text
{ delegationDRepHash :: Maybe Text
, delegationDRepView :: Text
, delegationIsDRepScriptBased :: Bool
, delegationTxHash :: Text
}
5 changes: 4 additions & 1 deletion govtool/frontend/src/components/atoms/FormErrorMessage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@ import { Typography } from "@mui/material";
import { FormErrorMessageProps } from "./types";

export const FormErrorMessage = ({
dataTestId,
errorMessage,
errorStyles,
}: FormErrorMessageProps) =>
errorMessage && (
<Typography
color="red"
data-testid={`${errorMessage.replace(/\s+/g, "-").toLowerCase()}-error`}
data-testid={
dataTestId ?? `${errorMessage.replace(/\s+/g, "-").toLowerCase()}-error`
}
fontSize={12}
fontWeight={400}
sx={{ mt: 0.25 }}
Expand Down
5 changes: 4 additions & 1 deletion govtool/frontend/src/components/atoms/FormHelpfulText.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@ import { Typography } from "@mui/material";
import { FormHelpfulTextProps } from "./types";

export const FormHelpfulText = ({
dataTestId,
helpfulText,
helpfulTextStyle,
sx,
}: FormHelpfulTextProps) =>
helpfulText && (
<Typography
color="#9792B5"
data-testid={`${helpfulText.replace(/\s+/g, "-").toLowerCase()}-error`}
data-testid={
dataTestId ?? `${helpfulText.replace(/\s+/g, "-").toLowerCase()}-error`
}
fontSize={12}
fontWeight={400}
sx={{ mt: 0.5, ...sx }}
Expand Down
2 changes: 2 additions & 0 deletions govtool/frontend/src/components/atoms/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,13 @@ export type CheckboxProps = Omit<MUICheckboxProps, "onChange" | "value"> & {
};

export type FormErrorMessageProps = {
dataTestId?: string;
errorMessage?: string;
errorStyles?: MUITypographyProps;
};

export type FormHelpfulTextProps = {
dataTestId?: string;
helpfulText?: string;
helpfulTextStyle?: MUITypographyProps;
sx?: SxProps;
Expand Down
6 changes: 6 additions & 0 deletions govtool/frontend/src/components/molecules/DRepDataForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,10 @@ const ReferencesSection = ({
name={`${fieldName}.${index}.label`}
helpfulText={t("forms.dRepData.referenceDescriptionHelpfulText")}
dataTestId={`${type}-reference-description-${index + 1}-input`}
errorDataTestId={`${type}-reference-description-${index + 1}-error`}
helpfulTextDataTestId={`${type}-reference-description-${
index + 1
}-hint`}
rules={Rules.LINK_DESCRIPTION}
/>
<ControlledField.Input
Expand All @@ -252,6 +256,8 @@ const ReferencesSection = ({
layoutStyles={{ mb: 3 }}
name={`${fieldName}.${index}.uri`}
dataTestId={`${type}-reference-url-${index + 1}-input`}
errorDataTestId={`${type}-reference-url-${index + 1}-error`}
helpfulTextDataTestId={`${type}-reference-url-${index + 1}-hint`}
rules={Rules.LINK_URL}
/>
</Fragment>
Expand Down
Loading

0 comments on commit 960e4d9

Please sign in to comment.