Skip to content

Commit 94b577f

Browse files
committed
fix(web): dispute-resolver-template-validation
1 parent 737ad45 commit 94b577f

File tree

4 files changed

+29
-11
lines changed

4 files changed

+29
-11
lines changed

web/src/context/NewDisputeContext.tsx

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ import React, { createContext, useState, useContext, useMemo } from "react";
22

33
import { Address } from "viem";
44

5+
import { DEFAULT_CHAIN } from "consts/chains";
6+
import { disputeResolverAddress, klerosCoreAddress } from "hooks/contracts/generated";
57
import { useLocalStorage } from "hooks/useLocalStorage";
68
import { isUndefined } from "utils/index";
79

810
export type Answer = {
9-
id?: string;
11+
id: string;
1012
title: string;
11-
description?: string;
13+
description: string;
1214
reserved?: boolean;
1315
};
1416

@@ -26,7 +28,7 @@ export interface IDisputeTemplate {
2628
arbitrableChainID?: string;
2729
arbitratorAddress?: string;
2830
arbitratorChainID?: string;
29-
category?: string;
31+
category: string;
3032
description: string;
3133
frontendUrl?: string;
3234
lang?: string;
@@ -35,6 +37,7 @@ export interface IDisputeTemplate {
3537
specification?: string;
3638
title: string;
3739
aliases?: Alias;
40+
version: string;
3841
// attachment: Attachment;
3942
// type: string;
4043
}
@@ -62,11 +65,13 @@ const initialDisputeData: IDisputeData = {
6265
title: "",
6366
description: "",
6467
question: "",
68+
category: "",
6569
answers: [
66-
{ title: "", id: "1" },
67-
{ title: "", id: "2" },
70+
{ title: "", id: "1", description: "" },
71+
{ title: "", id: "2", description: "" },
6872
],
6973
aliasesArray: [{ name: "", address: "", id: "1" }],
74+
version: "1.0",
7075
};
7176
const initialDisputeTemplate = initialDisputeData as IDisputeTemplate;
7277

@@ -127,7 +132,17 @@ const constructDisputeTemplate = (disputeData: IDisputeData) => {
127132
baseTemplate.aliases = aliases;
128133
}
129134
}
135+
136+
for (const answer of baseTemplate.answers) {
137+
answer.id = "0x" + BigInt(answer.id).toString(16);
138+
}
130139
if (!isUndefined(baseTemplate.policyURI) && baseTemplate.policyURI === "") delete baseTemplate.policyURI;
131140

141+
// in future if we support chain switching these would need to be calculated from connected 'chainId'
142+
baseTemplate.arbitrableAddress = disputeResolverAddress[DEFAULT_CHAIN];
143+
baseTemplate.arbitrableChainID = DEFAULT_CHAIN.toString();
144+
baseTemplate.arbitratorAddress = klerosCoreAddress[DEFAULT_CHAIN];
145+
baseTemplate.arbitratorChainID = DEFAULT_CHAIN.toString();
146+
132147
return baseTemplate as IDisputeTemplate;
133148
};

web/src/pages/Resolver/NavigationButtons/NextButton.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ const NextButton: React.FC<INextButton> = ({ nextRoute }) => {
1717

1818
//checks if each answer is filled in
1919
const areVotingOptionsFilled =
20-
disputeData.question !== "" && disputeData.answers.every((answer) => answer.title !== "");
20+
disputeData.question !== "" &&
21+
disputeData.answers.every((answer) => answer.title !== "" && answer.description !== "");
2122

2223
//check if any filled address or ens is invalid
2324
const areFilledAddressesValid = disputeData?.aliasesArray?.every((alias) =>
@@ -28,6 +29,7 @@ const NextButton: React.FC<INextButton> = ({ nextRoute }) => {
2829
(location.pathname.includes("/resolver/title") && !disputeData.title) ||
2930
(location.pathname.includes("/resolver/description") && !disputeData.description) ||
3031
(location.pathname.includes("/resolver/court") && !disputeData.courtId) ||
32+
(location.pathname.includes("/resolver/category") && !disputeData.category) ||
3133
(location.pathname.includes("/resolver/jurors") && !disputeData.arbitrationCost) ||
3234
(location.pathname.includes("/resolver/voting-options") && !areVotingOptionsFilled) ||
3335
(location.pathname.includes("/resolver/notable-persons") && !areFilledAddressesValid) ||

web/src/pages/Resolver/NavigationButtons/SubmitDisputeButton.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ const SubmitDisputeButton: React.FC = () => {
9696

9797
const isTemplateValid = (disputeTemplate: IDisputeTemplate) => {
9898
const areVotingOptionsFilled =
99-
disputeTemplate.question !== "" && disputeTemplate.answers.every((answer) => answer.title !== "");
99+
disputeTemplate.question !== "" &&
100+
disputeTemplate.answers.every((answer) => answer.title !== "" && answer.description !== "");
100101

101102
return (disputeTemplate.title &&
102103
disputeTemplate.description &&

web/src/pages/Resolver/Parameters/VotingOptions/OptionsFields.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,15 @@ const OptionsFields: React.FC = () => {
4343
const { disputeData, setDisputeData } = useNewDisputeContext();
4444

4545
const updateOptions = (value: number) => {
46-
let defaultAnswer: Answer = { title: "", id: value.toString() };
47-
let answers = disputeData.answers;
46+
const defaultAnswer: Answer = { title: "", id: value.toString(), description: "" };
47+
const answers = disputeData.answers;
4848

4949
if (value < answers?.length) return setDisputeData({ ...disputeData, answers: answers.splice(0, value) });
5050
if (value > answers?.length) return setDisputeData({ ...disputeData, answers: [...answers, defaultAnswer] });
5151
};
5252

5353
const handleOptionWrite = (event: React.ChangeEvent<HTMLInputElement>, key: number) => {
54-
let answers = disputeData.answers;
54+
const answers = disputeData.answers;
5555
answers[key] = { ...answers[key], [event.target.name]: event.target.value };
5656
setDisputeData({ ...disputeData, answers });
5757
};
@@ -69,7 +69,7 @@ const OptionsFields: React.FC = () => {
6969
/>
7070
<LabeledInput
7171
name="description"
72-
label="Option Description (Optional)"
72+
label="Option Description"
7373
placeholder={`Description for Option ${index + 1}`}
7474
value={answer.description ?? ""}
7575
onChange={(event) => handleOptionWrite(event, index)}

0 commit comments

Comments
 (0)