Skip to content

Commit ff2c67e

Browse files
authored
Merge pull request #1629 from kleros/refactor/update-aliases-to-an-object
fix(web): update-alias-to-object
2 parents 280d45d + 2abad9f commit ff2c67e

File tree

6 files changed

+47
-36
lines changed

6 files changed

+47
-36
lines changed

web/src/components/DisputePreview/Alias.tsx

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ import Skeleton from "react-loading-skeleton";
55
import { isAddress } from "viem";
66
import { useEnsAddress } from "wagmi";
77

8-
import { Alias } from "context/NewDisputeContext";
9-
import { isUndefined } from "utils/index";
10-
118
import { AddressOrName, IdenticonOrAvatar } from "../ConnectWallet/AccountDisplay";
129

1310
const AliasContainer = styled.div`
@@ -26,28 +23,29 @@ const TextContainer = styled.div`
2623
`;
2724

2825
interface IAlias {
29-
alias: Alias;
26+
name: string;
27+
address: `0x${string}`;
3028
}
3129

32-
const AliasDisplay: React.FC<IAlias> = ({ alias }) => {
30+
const AliasDisplay: React.FC<IAlias> = ({ name, address }) => {
3331
const { data: addressFromENS, isLoading } = useEnsAddress({
3432
query: {
3533
// if alias.address is not an Address, we treat it as ENS and try to fetch address from there
36-
enabled: !isAddress(alias.address),
34+
enabled: !isAddress(address),
3735
},
38-
name: alias.address,
36+
name: address,
3937
chainId: 1,
4038
});
4139

4240
// try fetching ens name, else go with address
43-
const address = addressFromENS ?? (alias.address as `0x${string}`);
41+
const resolvedAddress = addressFromENS ?? (address as `0x${string}`);
4442

4543
return (
4644
<AliasContainer>
47-
{isLoading ? <Skeleton width={30} height={24} /> : <IdenticonOrAvatar address={address} size="24" />}
45+
{isLoading ? <Skeleton width={30} height={24} /> : <IdenticonOrAvatar address={resolvedAddress} size="24" />}
4846
<TextContainer>
49-
{isLoading ? <Skeleton width={30} height={24} /> : <AddressOrName address={address} />}&nbsp;
50-
{!isUndefined(alias.name) && alias.name !== "" ? <label>({alias.name})</label> : null}
47+
{isLoading ? <Skeleton width={30} height={24} /> : <AddressOrName address={resolvedAddress} />}&nbsp;
48+
<label>({name})</label>
5149
</TextContainer>
5250
</AliasContainer>
5351
);

web/src/components/DisputePreview/DisputeContext.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,8 @@ export const DisputeContext: React.FC<IDisputeContext> = ({ disputeDetails, isRp
103103
<>
104104
<Divider />
105105
<AliasesContainer>
106-
{disputeDetails.aliases.map((alias) => (
107-
<AliasDisplay alias={alias} key={alias.address} />
106+
{Object.keys(disputeDetails.aliases).map((key) => (
107+
<AliasDisplay name={key} key={key} address={disputeDetails.aliases[key]} />
108108
))}
109109
</AliasesContainer>
110110
</>

web/src/context/NewDisputeContext.tsx

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@ export type Answer = {
1212
reserved?: boolean;
1313
};
1414

15-
export type Alias = {
15+
export type AliasArray = {
1616
id?: string;
1717
name: string;
1818
address: string | Address;
1919
isValid?: boolean;
2020
};
2121

22+
export type Alias = Record<string, string>;
2223
export interface IDisputeTemplate {
2324
answers: Answer[];
24-
aliases?: Alias[];
2525
arbitrableAddress?: string;
2626
arbitrableChainID?: string;
2727
arbitratorAddress?: string;
@@ -34,6 +34,7 @@ export interface IDisputeTemplate {
3434
question: string;
3535
specification?: string;
3636
title: string;
37+
aliases?: Alias;
3738
// attachment: Attachment;
3839
// type: string;
3940
}
@@ -42,6 +43,7 @@ interface IDisputeData extends IDisputeTemplate {
4243
courtId?: string;
4344
numberOfJurors: number;
4445
arbitrationCost?: string;
46+
aliasesArray?: AliasArray[];
4547
}
4648

4749
interface INewDisputeContext {
@@ -64,7 +66,7 @@ const initialDisputeData: IDisputeData = {
6466
{ title: "", id: "1" },
6567
{ title: "", id: "2" },
6668
],
67-
aliases: [
69+
aliasesArray: [
6870
{ name: "", address: "", id: "1" },
6971
{ name: "", address: "", id: "2" },
7072
],
@@ -113,13 +115,22 @@ export const NewDisputeProvider: React.FC<{ children: React.ReactNode }> = ({ ch
113115
};
114116

115117
const constructDisputeTemplate = (disputeData: IDisputeData) => {
116-
const baseTemplate = { ...disputeData } as IDisputeTemplate;
118+
const baseTemplate = { ...disputeData };
117119

118-
if (!isUndefined(baseTemplate.aliases)) {
119-
baseTemplate.aliases = baseTemplate.aliases.filter((item) => item.address !== "" && item.isValid);
120-
if (baseTemplate.aliases.length === 0) delete baseTemplate.aliases;
120+
if (!isUndefined(baseTemplate.aliasesArray)) {
121+
baseTemplate.aliasesArray = baseTemplate.aliasesArray.filter((item) => item.address !== "" && item.isValid);
122+
if (baseTemplate.aliasesArray.length === 0) delete baseTemplate.aliasesArray;
123+
else {
124+
const aliases: Alias = {};
125+
126+
for (const alias of baseTemplate.aliasesArray) {
127+
aliases[alias.name] = alias.address;
128+
}
129+
130+
baseTemplate.aliases = aliases;
131+
}
121132
}
122133
if (!isUndefined(baseTemplate.policyURI) && baseTemplate.policyURI === "") delete baseTemplate.policyURI;
123134

124-
return baseTemplate;
135+
return baseTemplate as IDisputeTemplate;
125136
};

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ const NextButton: React.FC<INextButton> = ({ nextRoute }) => {
2020
disputeData.question !== "" && disputeData.answers.every((answer) => answer.title !== "");
2121

2222
//check if any filled address or ens is invalid
23-
const areFilledAddressesValid = disputeData?.aliases?.every((alias) => alias.address === "" || alias.isValid);
23+
const areFilledAddressesValid = disputeData?.aliasesArray?.every(
24+
(alias) => alias.address !== "" && alias.isValid && alias.name !== ""
25+
);
2426

2527
const isButtonDisabled =
2628
(location.pathname.includes("/resolver/title") && !disputeData.title) ||

web/src/pages/Resolver/Parameters/NotablePersons/PersonFields.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import styled, { css } from "styled-components";
33

44
import { usePublicClient } from "wagmi";
55

6-
import { Alias, useNewDisputeContext } from "context/NewDisputeContext";
6+
import { AliasArray, useNewDisputeContext } from "context/NewDisputeContext";
77
import { isUndefined } from "utils/index";
88
import { validateAddress } from "utils/validateAddressOrEns";
99

@@ -41,7 +41,7 @@ const AliasContainer = styled.div`
4141
const PersonFields: React.FC = () => {
4242
const { disputeData, setDisputeData } = useNewDisputeContext();
4343
const validationTimerRef = useRef<NodeJS.Timeout | null>(null);
44-
const publicClient = usePublicClient();
44+
const publicClient = usePublicClient({ chainId: 1 });
4545

4646
const debounceValidateAddress = (address: string, key: number) => {
4747
// Clear the existing timer
@@ -52,32 +52,32 @@ const PersonFields: React.FC = () => {
5252
// Set a new timer for validation after 500 milliseconds
5353
validationTimerRef.current = setTimeout(async () => {
5454
const isValid = await validateAddress(address, publicClient);
55-
const updatedAliases = disputeData.aliases;
55+
const updatedAliases = disputeData.aliasesArray;
5656
if (isUndefined(updatedAliases) || isUndefined(updatedAliases[key])) return;
5757
updatedAliases[key].isValid = isValid;
5858

59-
setDisputeData({ ...disputeData, aliases: updatedAliases });
59+
setDisputeData({ ...disputeData, aliasesArray: updatedAliases });
6060
}, 500);
6161
};
6262
const handleAliasesWrite = (event: React.ChangeEvent<HTMLInputElement>) => {
6363
const key = parseInt(event.target.id.replace(/\D/g, ""), 10) - 1;
64-
const aliases = disputeData.aliases;
64+
const aliases = disputeData.aliasesArray;
6565
if (isUndefined(aliases)) return;
6666

6767
aliases[key] = { ...aliases[key], [event.target.name]: event.target.value };
68-
setDisputeData({ ...disputeData, aliases });
68+
setDisputeData({ ...disputeData, aliasesArray: aliases });
6969

7070
//since resolving ens is async, we update asynchronously too with debounce
7171
event.target.name === "address" && debounceValidateAddress(event.target.value, key);
7272
};
7373

74-
const showError = (alias: Alias) => {
74+
const showError = (alias: AliasArray) => {
7575
return alias.address !== "" && !alias.isValid;
7676
};
7777

7878
return (
7979
<Container>
80-
{disputeData.aliases?.map((alias, index) => (
80+
{disputeData.aliasesArray?.map((alias, index) => (
8181
<AliasContainer key={alias?.id}>
8282
<LabeledInput
8383
name="name"

web/src/pages/Resolver/Parameters/NotablePersons/index.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,22 @@ const NotablePersons: React.FC = () => {
2626

2727
//value here is the total number of fields-
2828
const updateNumberOfAliases = (value: number) => {
29-
let defaultAlias = { name: "", address: "", id: value.toString() };
30-
let aliases = disputeData.aliases;
29+
const defaultAlias = { name: "", address: "", id: value.toString() };
30+
const aliases = disputeData.aliasesArray;
3131

3232
if (isUndefined(aliases)) {
33-
return setDisputeData({ ...disputeData, aliases: [defaultAlias] });
33+
return setDisputeData({ ...disputeData, aliasesArray: [defaultAlias] });
3434
}
35-
if (value < aliases?.length) return setDisputeData({ ...disputeData, aliases: aliases.splice(0, value) });
36-
if (value > aliases?.length) return setDisputeData({ ...disputeData, aliases: [...aliases, defaultAlias] });
35+
if (value < aliases?.length) return setDisputeData({ ...disputeData, aliasesArray: aliases.splice(0, value) });
36+
if (value > aliases?.length) return setDisputeData({ ...disputeData, aliasesArray: [...aliases, defaultAlias] });
3737
};
3838

3939
return (
4040
<Container>
4141
<Header text="Notable Persons" />
4242
<PersonFields />
4343
<StyledPlusMinusField
44-
currentValue={disputeData.aliases?.length ?? 2}
44+
currentValue={disputeData.aliasesArray?.length ?? 2}
4545
updateValue={updateNumberOfAliases}
4646
minValue={2}
4747
/>

0 commit comments

Comments
 (0)