Skip to content

Commit e83f11d

Browse files
authored
Merge pull request #3506 from IntersectMBO/test
fix: missing or wrong validation status of Governance Action metadata
2 parents 2a0c30a + 39fb11f commit e83f11d

32 files changed

+923
-306
lines changed

govtool/frontend/package-lock.json

Lines changed: 30 additions & 27 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

govtool/frontend/src/components/organisms/DRepCard.tsx

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useState, useRef, useEffect } from "react";
1+
import { useState, useEffect } from "react";
22
import { useNavigate } from "react-router-dom";
33
import { Box, ButtonBase, Divider, Avatar, Skeleton } from "@mui/material";
44

@@ -70,31 +70,35 @@ export const DRepCard = ({
7070

7171
const base64Image = getBase64ImageDetails(image ?? "");
7272
const [isValidating, setIsValidating] = useState(false);
73-
const metadataStatus = useRef<MetadataValidationStatus | undefined>();
73+
const [metadataStatus, setMetadataStatus] = useState<
74+
MetadataValidationStatus | undefined
75+
>();
7476
const { validateMetadata } = useValidateMutation();
7577

7678
useEffect(() => {
79+
if (!url) return;
80+
7781
const validate = async () => {
7882
setIsValidating(true);
7983

8084
const { status: validationStatus } = await validateMetadata({
8185
standard: MetadataStandard.CIP119,
82-
url: url ?? "",
86+
url,
8387
hash: metadataHash ?? "",
8488
});
8589

86-
metadataStatus.current = validationStatus;
90+
setMetadataStatus(validationStatus);
8791
setIsValidating(false);
8892
};
8993
validate();
90-
}, []);
94+
}, [url]);
9195

9296
return (
9397
<Card
9498
{...(isMe && {
9599
variant: "primary",
96100
})}
97-
{...(!!metadataStatus.current && {
101+
{...(!!metadataStatus && {
98102
variant: "error",
99103
})}
100104
{...(isInProgress && {
@@ -175,13 +179,11 @@ export const DRepCard = ({
175179
<Typography
176180
sx={{
177181
ellipsisStyles,
178-
color: metadataStatus.current && "errorRed",
182+
color: metadataStatus && "errorRed",
179183
}}
180184
>
181-
{metadataStatus.current
182-
? getMetadataDataMissingStatusTranslation(
183-
metadataStatus.current,
184-
)
185+
{metadataStatus
186+
? getMetadataDataMissingStatusTranslation(metadataStatus)
185187
: ellipsizeText(givenName ?? "", 25)}
186188
</Typography>
187189
)}

govtool/frontend/src/components/organisms/DRepDetailsCard.tsx

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { PropsWithChildren, useEffect, useRef, useState } from "react";
1+
import { PropsWithChildren, useEffect, useState } from "react";
22
import { Box, ButtonBase, Link, Skeleton } from "@mui/material";
33

44
import { Button, ExternalModalButton, StatusPill, Typography } from "@atoms";
@@ -52,24 +52,28 @@ export const DRepDetailsCard = ({
5252
} = dRepData;
5353

5454
const [isValidating, setIsValidating] = useState(false);
55-
const metadataStatus = useRef<MetadataValidationStatus | undefined>();
55+
const [metadataStatus, setMetadataStatus] = useState<
56+
MetadataValidationStatus | undefined
57+
>();
5658
const { validateMetadata } = useValidateMutation();
5759

5860
useEffect(() => {
61+
if (!url) return;
62+
5963
const validate = async () => {
6064
setIsValidating(true);
6165

6266
const { status: metadataValidationStatus } = await validateMetadata({
6367
standard: MetadataStandard.CIP119,
64-
url: url ?? "",
68+
url,
6569
hash: metadataHash ?? "",
6670
});
6771

68-
metadataStatus.current = metadataValidationStatus;
72+
setMetadataStatus(metadataValidationStatus);
6973
setIsValidating(false);
7074
};
7175
validate();
72-
}, []);
76+
}, [url]);
7377

7478
const groupedReferences = references?.reduce<Record<string, Reference[]>>(
7579
(acc, reference) => {
@@ -117,18 +121,18 @@ export const DRepDetailsCard = ({
117121
isMe={isMe}
118122
isMyDrep={isMyDrep}
119123
isValidating={isValidating}
120-
metadataStatus={metadataStatus.current}
124+
metadataStatus={metadataStatus}
121125
/>
122126
{/* ERROR MESSAGES */}
123-
{metadataStatus.current && (
127+
{metadataStatus && (
124128
<DataMissingInfoBox
125-
isDataMissing={metadataStatus.current}
129+
isDataMissing={metadataStatus}
126130
isDrep
127131
sx={{ mb: 0 }}
128132
isValidating={isValidating}
129133
/>
130134
)}
131-
{metadataStatus.current && !!url && (
135+
{metadataStatus && !!url && (
132136
<ExternalModalButton
133137
label={t("govActions.seeExternalData")}
134138
sx={{ mb: 0, alignSelf: "flex-start" }}
@@ -230,7 +234,7 @@ export const DRepDetailsCard = ({
230234
{/* BUTTONS END */}
231235

232236
{/* CIP-119 DATA */}
233-
{!metadataStatus.current && (
237+
{!metadataStatus && (
234238
<>
235239
<DRepDetailsInfoItem
236240
label={t("forms.dRepData.objectives")}

govtool/frontend/src/components/organisms/DashboardCards/DelegateDashboardCard.tsx

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useCallback, useEffect, useRef } from "react";
1+
import { useCallback, useEffect, useState } from "react";
22
import { useNavigate } from "react-router-dom";
33
import { Trans } from "react-i18next";
44

@@ -44,21 +44,25 @@ export const DelegateDashboardCard = ({
4444
delegateTx?.resourceId ?? currentDelegation?.dRepHash,
4545
);
4646

47-
const metadataStatus = useRef<MetadataValidationStatus | undefined>();
47+
const [metadataStatus, setMetadataStatus] = useState<
48+
MetadataValidationStatus | undefined
49+
>();
4850
const { validateMetadata } = useValidateMutation();
4951

5052
useEffect(() => {
53+
if (!myDRepDelegationData?.url) return;
54+
5155
const validate = async () => {
5256
const { status } = await validateMetadata({
5357
standard: MetadataStandard.CIP119,
54-
url: myDRepDelegationData?.url ?? "",
58+
url: myDRepDelegationData.url!,
5559
hash: myDRepDelegationData?.metadataHash ?? "",
5660
});
5761

58-
metadataStatus.current = status;
62+
setMetadataStatus(status);
5963
};
6064
validate();
61-
}, []);
65+
}, [myDRepDelegationData?.url]);
6266

6367
const learnMoreButton = {
6468
children: t("learnMore"),
@@ -170,8 +174,8 @@ export const DelegateDashboardCard = ({
170174
drepName={
171175
isLoading
172176
? "Loading..."
173-
: metadataStatus.current
174-
? getMetadataDataMissingStatusTranslation(metadataStatus.current)
177+
: metadataStatus
178+
? getMetadataDataMissingStatusTranslation(metadataStatus)
175179
: myDRepDelegationData?.givenName ?? ""
176180
}
177181
dRepId={displayedDelegationId}

govtool/frontend/src/components/organisms/DashboardGovernanceActionDetails.tsx

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useEffect, useRef, useState } from "react";
1+
import { useEffect, useState } from "react";
22
import {
33
useNavigate,
44
useLocation,
@@ -49,22 +49,34 @@ export const DashboardGovernanceActionDetails = () => {
4949
fullProposalId ?? "",
5050
!state?.proposal || !state?.vote,
5151
);
52+
// TODO: Refactor this mess with proposals and metadata validation
53+
// once authors are existing in all CIP-108 metadata
5254
const [extendedProposal, setExtendedProposal] = useState<ProposalData>(
5355
(data ?? state)?.proposal as ProposalData,
5456
);
57+
58+
useEffect(() => {
59+
if (data?.proposal) {
60+
setExtendedProposal(data.proposal);
61+
}
62+
}, [data?.proposal]);
5563
const vote = (data ?? state)?.vote;
5664

57-
const [isValidating, setIsValidating] = useState(false);
58-
const metadataStatus = useRef<MetadataValidationStatus | undefined>();
65+
const [isValidating, setIsValidating] = useState(true);
66+
const [metadataStatus, setMetadataStatus] = useState<
67+
MetadataValidationStatus | undefined
68+
>();
5969
const { validateMetadata } = useValidateMutation();
6070

6171
useEffect(() => {
72+
if (!extendedProposal?.url) return;
73+
6274
const validate = async () => {
6375
setIsValidating(true);
6476

6577
const { status, metadata } = await validateMetadata({
6678
standard: MetadataStandard.CIP108,
67-
url: extendedProposal?.url ?? "",
79+
url: extendedProposal?.url,
6880
hash: extendedProposal?.metadataHash ?? "",
6981
});
7082

@@ -78,11 +90,11 @@ export const DashboardGovernanceActionDetails = () => {
7890
}));
7991
}
8092

81-
metadataStatus.current = status;
93+
setMetadataStatus(status);
8294
setIsValidating(false);
8395
};
8496
validate();
85-
}, []);
97+
}, [extendedProposal?.url]);
8698

8799
useEffect(() => {
88100
const isProposalNotFound =
@@ -108,7 +120,7 @@ export const DashboardGovernanceActionDetails = () => {
108120
elementOne={t("govActions.title")}
109121
elementOnePath={PATHS.dashboardGovernanceActions}
110122
elementTwo={extendedProposal?.title ?? ""}
111-
isDataMissing={metadataStatus?.current ?? null}
123+
isDataMissing={metadataStatus ?? null}
112124
/>
113125
<Link
114126
data-testid="back-to-list-link"
@@ -160,7 +172,7 @@ export const DashboardGovernanceActionDetails = () => {
160172
isVoter={
161173
voter?.isRegisteredAsDRep || voter?.isRegisteredAsSoleVoter
162174
}
163-
isDataMissing={metadataStatus?.current}
175+
isDataMissing={metadataStatus}
164176
isInProgress={
165177
pendingTransaction.vote?.resourceId ===
166178
fullProposalId?.replace("#", "")

0 commit comments

Comments
 (0)