Skip to content

Commit 1e011e3

Browse files
authored
Merge pull request #3502 from IntersectMBO/staging
hotfix: Parse metadata validation metadata when is missing in db-sync
2 parents a9b6523 + 2a0c30a commit 1e011e3

File tree

5 files changed

+89
-39
lines changed

5 files changed

+89
-39
lines changed

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

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ export const DashboardGovernanceActionDetails = () => {
4949
fullProposalId ?? "",
5050
!state?.proposal || !state?.vote,
5151
);
52-
const proposal = (data ?? state)?.proposal;
52+
const [extendedProposal, setExtendedProposal] = useState<ProposalData>(
53+
(data ?? state)?.proposal as ProposalData,
54+
);
5355
const vote = (data ?? state)?.vote;
5456

5557
const [isValidating, setIsValidating] = useState(false);
@@ -60,12 +62,22 @@ export const DashboardGovernanceActionDetails = () => {
6062
const validate = async () => {
6163
setIsValidating(true);
6264

63-
const { status } = await validateMetadata({
65+
const { status, metadata } = await validateMetadata({
6466
standard: MetadataStandard.CIP108,
65-
url: proposal?.url ?? "",
66-
hash: proposal?.metadataHash ?? "",
67+
url: extendedProposal?.url ?? "",
68+
hash: extendedProposal?.metadataHash ?? "",
6769
});
6870

71+
if (metadata) {
72+
setExtendedProposal((prevProposal) => ({
73+
...(prevProposal || {}),
74+
...(metadata as Pick<
75+
ProposalData,
76+
"title" | "abstract" | "motivation" | "rationale"
77+
>),
78+
}));
79+
}
80+
6981
metadataStatus.current = status;
7082
setIsValidating(false);
7183
};
@@ -95,7 +107,7 @@ export const DashboardGovernanceActionDetails = () => {
95107
<Breadcrumbs
96108
elementOne={t("govActions.title")}
97109
elementOnePath={PATHS.dashboardGovernanceActions}
98-
elementTwo={proposal?.title ?? ""}
110+
elementTwo={extendedProposal?.title ?? ""}
99111
isDataMissing={metadataStatus?.current ?? null}
100112
/>
101113
<Link
@@ -141,9 +153,9 @@ export const DashboardGovernanceActionDetails = () => {
141153
>
142154
<CircularProgress />
143155
</Box>
144-
) : proposal ? (
156+
) : extendedProposal ? (
145157
<GovernanceActionDetailsCard
146-
proposal={proposal}
158+
proposal={extendedProposal}
147159
vote={vote}
148160
isVoter={
149161
voter?.isRegisteredAsDRep || voter?.isRegisteredAsSoleVoter

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

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,36 +17,47 @@ type ActionTypeProps = Omit<
1717
onClick?: () => void;
1818
inProgress?: boolean;
1919
};
20-
export const ValidatedGovernanceActionCard = ({
21-
url,
22-
metadataHash,
23-
...props
24-
}: ActionTypeProps) => {
20+
export const ValidatedGovernanceActionCard = (props: ActionTypeProps) => {
2521
const [isValidating, setIsValidating] = useState(false);
2622
const metadataStatus = useRef<MetadataValidationStatus | undefined>();
2723
const { validateMetadata } = useValidateMutation();
24+
const [extendedProposal, setExtendedProposal] = useState<ProposalData>(
25+
props as ProposalData,
26+
);
2827

2928
useEffect(() => {
3029
const validate = async () => {
3130
setIsValidating(true);
3231

33-
const { status } = await validateMetadata({
32+
const { status, metadata } = await validateMetadata({
3433
standard: MetadataStandard.CIP108,
35-
url: url ?? "",
36-
hash: metadataHash ?? "",
34+
url: props?.url ?? "",
35+
hash: props?.metadataHash ?? "",
3736
});
3837

3938
metadataStatus.current = status;
39+
40+
if (metadata) {
41+
setExtendedProposal(
42+
(prevProposal) =>
43+
({
44+
...(prevProposal || {}),
45+
...(metadata as Pick<
46+
ProposalData,
47+
"title" | "abstract" | "motivation" | "rationale"
48+
>),
49+
} as ProposalData),
50+
);
51+
}
52+
4053
setIsValidating(false);
4154
};
4255
validate();
43-
}, []);
56+
}, [props?.url, props?.metadataHash]);
4457

4558
return (
4659
<GovernanceActionCard
47-
{...props}
48-
url={url}
49-
metadataHash={metadataHash}
60+
{...extendedProposal}
5061
isValidating={isValidating}
5162
metadataStatus={metadataStatus.current}
5263
/>

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

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useState, useRef, useEffect } from "react";
22

33
import { useValidateMutation } from "@/hooks/mutations";
4-
import { MetadataStandard, VotedProposal } from "@/models";
4+
import { MetadataStandard, ProposalData, VotedProposal } from "@/models";
55
import { GovernanceVotedOnCard } from "../molecules";
66

77
type Props = {
@@ -15,26 +15,41 @@ export const ValidatedGovernanceVotedOnCard = ({
1515
const [isValidating, setIsValidating] = useState(false);
1616
const metadataStatus = useRef<MetadataValidationStatus | undefined>();
1717
const { validateMetadata } = useValidateMutation();
18+
const [extendedVotedProposal, setExtendedVotedProposal] =
19+
useState<VotedProposal>(votedProposal);
1820

1921
useEffect(() => {
2022
const validate = async () => {
2123
setIsValidating(true);
2224

23-
const { status } = await validateMetadata({
25+
const { status, metadata } = await validateMetadata({
2426
standard: MetadataStandard.CIP108,
2527
url: votedProposal.proposal.url,
2628
hash: votedProposal.proposal.metadataHash,
2729
});
2830

2931
metadataStatus.current = status;
32+
33+
if (metadata) {
34+
setExtendedVotedProposal((prevProposal) => ({
35+
...(prevProposal || {}),
36+
proposal: {
37+
...(prevProposal.proposal || {}),
38+
...(metadata as Pick<
39+
ProposalData,
40+
"title" | "abstract" | "motivation" | "rationale"
41+
>),
42+
},
43+
}));
44+
}
3045
setIsValidating(false);
3146
};
3247
validate();
3348
}, []);
3449

3550
return (
3651
<GovernanceVotedOnCard
37-
votedProposal={votedProposal}
52+
votedProposal={extendedVotedProposal}
3853
inProgress={inProgress}
3954
isValidating={isValidating}
4055
metadataStatus={metadataStatus.current}

govtool/frontend/src/pages/GovernanceActionDetails.tsx

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useEffect, useRef } from "react";
1+
import { useEffect, useRef, useState } from "react";
22
import {
33
useNavigate,
44
useLocation,
@@ -51,23 +51,34 @@ export const GovernanceActionDetails = () => {
5151
fullProposalId ?? "",
5252
!state?.proposal,
5353
);
54-
const proposal = (data ?? state)?.proposal;
55-
54+
const [extendedProposal, setExtendedProposal] = useState<ProposalData>(
55+
(data ?? state)?.proposal as ProposalData,
56+
);
5657
const metadataStatus = useRef<MetadataValidationStatus | undefined>();
5758
const { validateMetadata } = useValidateMutation();
5859

5960
useEffect(() => {
6061
const validate = async () => {
61-
const { status } = await validateMetadata({
62+
const { status, metadata } = await validateMetadata({
6263
standard: MetadataStandard.CIP108,
63-
url: proposal?.url ?? "",
64-
hash: proposal?.metadataHash ?? "",
64+
url: extendedProposal?.url ?? "",
65+
hash: extendedProposal?.metadataHash ?? "",
6566
});
6667

6768
metadataStatus.current = status;
69+
70+
if (metadata) {
71+
setExtendedProposal((prevProposal) => ({
72+
...(prevProposal || {}),
73+
...(metadata as Pick<
74+
ProposalData,
75+
"title" | "abstract" | "motivation" | "rationale"
76+
>),
77+
}));
78+
}
6879
};
6980
validate();
70-
}, [proposal?.url, proposal?.metadataHash]);
81+
}, [extendedProposal?.url, extendedProposal?.metadataHash]);
7182

7283
useEffect(() => {
7384
const isProposalNotFound =
@@ -121,7 +132,7 @@ export const GovernanceActionDetails = () => {
121132
<Breadcrumbs
122133
elementOne={t("govActions.title")}
123134
elementOnePath={PATHS.governanceActions}
124-
elementTwo={proposal?.title ?? ""}
135+
elementTwo={extendedProposal?.title ?? ""}
125136
isDataMissing={metadataStatus?.current ?? null}
126137
/>
127138
<Link
@@ -158,11 +169,11 @@ export const GovernanceActionDetails = () => {
158169
>
159170
<CircularProgress />
160171
</Box>
161-
) : proposal ? (
172+
) : extendedProposal ? (
162173
<Box data-testid="governance-action-details">
163174
<GovernanceActionDetailsCard
164175
isDataMissing={metadataStatus.current}
165-
proposal={proposal}
176+
proposal={extendedProposal}
166177
/>
167178
</Box>
168179
) : (

govtool/metadata-validation/src/app.service.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as jsonld from 'jsonld';
77
import { ValidateMetadataDTO } from '@dto';
88
import { LoggerMessage, MetadataValidationStatus } from '@enums';
99
import { validateMetadataStandard, parseMetadata, getStandard } from '@utils';
10-
import { MetadataStandard, ValidateMetadataResult } from '@types';
10+
import { /* MetadataStandard, */ ValidateMetadataResult } from '@types';
1111

1212
@Injectable()
1313
export class AppService {
@@ -57,12 +57,13 @@ export class AppService {
5757
throw MetadataValidationStatus.INCORRECT_FORMAT;
5858
}
5959

60-
if (
61-
standard === MetadataStandard.CIP108 &&
62-
!Array.isArray(parsedData.authors)
63-
) {
64-
throw MetadataValidationStatus.INCORRECT_FORMAT;
65-
}
60+
// TODO: Uncomment this when gov action: 7f320409d9998712ff3a3cdf0c9439e1543f236a3d746766f78f1fdbe1e06bf8#0 expires
61+
// if (
62+
// standard === MetadataStandard.CIP108 &&
63+
// !Array.isArray(parsedData.authors)
64+
// ) {
65+
// throw MetadataValidationStatus.INCORRECT_FORMAT;
66+
// }
6667

6768
if (!parsedData?.body) {
6869
throw MetadataValidationStatus.INCORRECT_FORMAT;

0 commit comments

Comments
 (0)