Skip to content

Commit 220ea2f

Browse files
committedOct 14, 2024··
chore(web): update-dispute-population-flow
1 parent c59e102 commit 220ea2f

File tree

6 files changed

+23
-165
lines changed

6 files changed

+23
-165
lines changed
 

‎web/src/hooks/queries/useDisputeDetailsQuery.ts

+4
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ const disputeDetailsQuery = graphql(`
3030
nbVotes
3131
}
3232
currentRoundIndex
33+
isCrossChain
34+
arbitrableChainId
35+
externalDisputeId
36+
templateId
3337
}
3438
}
3539
`);

‎web/src/hooks/queries/useEvidenceGroup.ts

-41
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
import { useQuery } from "@tanstack/react-query";
2-
import { getContract, HttpRequestError, PublicClient, RpcError } from "viem";
3-
import { usePublicClient } from "wagmi";
2+
import { HttpRequestError, RpcError } from "viem";
43

54
import { executeActions } from "@kleros/kleros-sdk/src/dataMappings/executeActions";
65
import { DisputeDetails } from "@kleros/kleros-sdk/src/dataMappings/utils/disputeDetailsTypes";
76
import { populateTemplate } from "@kleros/kleros-sdk/src/dataMappings/utils/populateTemplate";
87

9-
import { GENESIS_BLOCK_ARBSEPOLIA } from "consts/index";
108
import { useGraphqlBatcher } from "context/GraphqlBatcher";
11-
import { iArbitrableV2Abi } from "hooks/contracts/generated";
12-
import { useEvidenceGroup } from "queries/useEvidenceGroup";
139
import { debounceErrorToast } from "utils/debounceErrorToast";
1410
import { isUndefined } from "utils/index";
15-
import { DEFAULT_CHAIN } from "consts/chains";
1611

1712
import { graphql } from "src/graphql";
1813

19-
import { useIsCrossChainDispute } from "../useIsCrossChainDispute";
14+
import { useDisputeDetailsQuery } from "./useDisputeDetailsQuery";
2015

2116
const disputeTemplateQuery = graphql(`
2217
query DisputeTemplate($id: ID!) {
@@ -30,33 +25,27 @@ const disputeTemplateQuery = graphql(`
3025
`);
3126

3227
export const usePopulatedDisputeData = (disputeID?: string, arbitrableAddress?: `0x${string}`) => {
33-
const publicClient = usePublicClient();
34-
const { data: crossChainData, isError } = useIsCrossChainDispute(disputeID, arbitrableAddress);
28+
const { data: disputeData } = useDisputeDetailsQuery(disputeID);
3529
const { graphqlBatcher } = useGraphqlBatcher();
36-
const { data: externalDisputeID } = useEvidenceGroup(disputeID, arbitrableAddress);
3730
const isEnabled =
3831
!isUndefined(disputeID) &&
39-
!isUndefined(crossChainData) &&
40-
!isUndefined(arbitrableAddress) &&
41-
!isUndefined(externalDisputeID);
32+
!isUndefined(disputeData) &&
33+
!isUndefined(disputeData?.dispute) &&
34+
!isUndefined(disputeData.dispute?.arbitrableChainId) &&
35+
!isUndefined(disputeData.dispute?.externalDisputeId) &&
36+
!isUndefined(disputeData.dispute?.templateId);
4237

4338
return useQuery<DisputeDetails>({
44-
queryKey: [`DisputeTemplate${disputeID}${arbitrableAddress}${externalDisputeID}`],
39+
queryKey: [`DisputeTemplate${disputeID}${arbitrableAddress}${disputeData?.dispute?.externalDisputeId}`],
4540
enabled: isEnabled,
4641
staleTime: Infinity,
4742
queryFn: async () => {
48-
if (isEnabled && !isError) {
43+
if (isEnabled) {
4944
try {
50-
const { isCrossChainDispute, crossChainTemplateId } = crossChainData;
51-
52-
const templateId = isCrossChainDispute
53-
? crossChainTemplateId
54-
: await getTemplateId(arbitrableAddress, disputeID, publicClient);
55-
5645
const { disputeTemplate } = await graphqlBatcher.fetch({
5746
id: crypto.randomUUID(),
5847
document: disputeTemplateQuery,
59-
variables: { id: templateId.toString() },
48+
variables: { id: disputeData.dispute?.templateId.toString() },
6049
isDisputeTemplate: true,
6150
});
6251

@@ -66,10 +55,10 @@ export const usePopulatedDisputeData = (disputeID?: string, arbitrableAddress?:
6655
const initialContext = {
6756
disputeID: disputeID,
6857
arbitrableAddress: arbitrableAddress,
69-
arbitrableChainID: isCrossChainDispute ? crossChainData.crossChainId.toString() : DEFAULT_CHAIN.toString(),
58+
arbitrableChainID: disputeData.dispute?.arbitrableChainId,
7059
graphApiKey: import.meta.env.REACT_APP_GRAPH_API_KEY,
7160
alchemyApiKey: import.meta.env.ALCHEMY_API_KEY,
72-
externalDisputeID: externalDisputeID,
61+
externalDisputeID: disputeData.dispute?.externalDisputeId,
7362
};
7463

7564
const data = dataMappings ? await executeActions(JSON.parse(dataMappings), initialContext) : {};
@@ -88,28 +77,3 @@ export const usePopulatedDisputeData = (disputeID?: string, arbitrableAddress?:
8877
},
8978
});
9079
};
91-
92-
const getTemplateId = async (
93-
arbitrableAddress: `0x${string}`,
94-
disputeID: string,
95-
publicClient: PublicClient
96-
): Promise<bigint> => {
97-
const arbitrable = getContract({
98-
abi: iArbitrableV2Abi,
99-
address: arbitrableAddress,
100-
client: { public: publicClient },
101-
});
102-
const disputeFilter = await arbitrable.createEventFilter.DisputeRequest(
103-
{
104-
_arbitrableDisputeID: BigInt(disputeID),
105-
},
106-
{
107-
fromBlock: GENESIS_BLOCK_ARBSEPOLIA,
108-
toBlock: "latest",
109-
}
110-
);
111-
const disputeEvents = await publicClient.getFilterLogs({
112-
filter: disputeFilter,
113-
});
114-
return disputeEvents[0].args._templateId ?? 0n;
115-
};

‎web/src/hooks/useIsCrossChainDispute.ts

-69
This file was deleted.

‎web/src/pages/Cases/CaseDetails/Evidence/index.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { Button } from "@kleros/ui-components-library";
88

99
import DownArrow from "svgs/icons/arrow-down.svg";
1010

11-
import { useEvidenceGroup } from "queries/useEvidenceGroup";
11+
import { useDisputeDetailsQuery } from "queries/useDisputeDetailsQuery";
1212
import { useEvidences } from "queries/useEvidences";
1313

1414
import { responsiveSize } from "styles/responsiveSize";
@@ -54,14 +54,14 @@ const ScrollButton = styled(Button)`
5454
}
5555
`;
5656

57-
const Evidence: React.FC<{ arbitrable?: `0x${string}` }> = ({ arbitrable }) => {
57+
const Evidence: React.FC = () => {
5858
const { id } = useParams();
59-
const { data: evidenceGroup } = useEvidenceGroup(id, arbitrable);
59+
const { data: disputeData } = useDisputeDetailsQuery(id);
6060
const ref = useRef<HTMLDivElement>(null);
6161
const [search, setSearch] = useState<string>();
6262
const [debouncedSearch, setDebouncedSearch] = useState<string>();
6363

64-
const { data } = useEvidences(evidenceGroup?.toString(), debouncedSearch);
64+
const { data } = useEvidences(disputeData?.dispute?.externalDisputeId?.toString(), debouncedSearch);
6565

6666
useDebounce(() => setDebouncedSearch(search), 500, [search]);
6767

@@ -76,7 +76,7 @@ const Evidence: React.FC<{ arbitrable?: `0x${string}` }> = ({ arbitrable }) => {
7676

7777
return (
7878
<Container ref={ref}>
79-
<EvidenceSearch {...{ search, setSearch, evidenceGroup }} />
79+
<EvidenceSearch {...{ search, setSearch, evidenceGroup: disputeData?.dispute?.externalDisputeId }} />
8080
<ScrollButton small Icon={DownArrow} text="Scroll to latest" onClick={scrollToLatest} />
8181
{data ? (
8282
data.evidences.map(({ evidence, sender, timestamp, name, description, fileURI, evidenceIndex }) => (

‎web/src/pages/Cases/CaseDetails/index.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ const CaseDetails: React.FC = () => {
6464
<Overview currentPeriodIndex={currentPeriodIndex} courtID={dispute?.court.id} {...{ arbitrable }} />
6565
}
6666
/>
67-
<Route path="evidence" element={<Evidence {...{ arbitrable }} />} />
67+
<Route path="evidence" element={<Evidence />} />
6868
<Route path="voting" element={<Voting {...{ arbitrable, currentPeriodIndex }} />} />
6969
<Route path="appeal" element={<Appeal {...{ currentPeriodIndex }} />} />
7070
<Route path="*" element={<Navigate to="overview" replace />} />

0 commit comments

Comments
 (0)
Please sign in to comment.