1
- import React , { createContext , useState , useContext , useMemo } from "react" ;
1
+ import React , { createContext , useState , useContext , useMemo , useCallback } from "react" ;
2
2
3
3
import { Address } from "viem" ;
4
4
5
+ import { DEFAULT_CHAIN } from "consts/chains" ;
6
+ import { klerosCoreAddress } from "hooks/contracts/generated" ;
5
7
import { useLocalStorage } from "hooks/useLocalStorage" ;
6
8
import { isUndefined } from "utils/index" ;
7
9
8
10
export type Answer = {
9
- id ? : string ;
11
+ id : string ;
10
12
title : string ;
11
- description ? : string ;
13
+ description : string ;
12
14
reserved ?: boolean ;
13
15
} ;
14
16
@@ -35,6 +37,7 @@ export interface IDisputeTemplate {
35
37
specification ?: string ;
36
38
title : string ;
37
39
aliases ?: Alias ;
40
+ version : string ;
38
41
// attachment: Attachment;
39
42
// type: string;
40
43
}
@@ -62,29 +65,24 @@ const initialDisputeData: IDisputeData = {
62
65
title : "" ,
63
66
description : "" ,
64
67
question : "" ,
68
+ category : "" ,
65
69
answers : [
66
- { title : "" , id : "1" } ,
67
- { title : "" , id : "2" } ,
68
- ] ,
69
- aliasesArray : [
70
- { name : "" , address : "" , id : "1" } ,
71
- { name : "" , address : "" , id : "2" } ,
70
+ { title : "" , id : "1" , description : "" } ,
71
+ { title : "" , id : "2" , description : "" } ,
72
72
] ,
73
+ aliasesArray : [ { name : "" , address : "" , id : "1" } ] ,
74
+ version : "1.0" ,
73
75
} ;
74
- const initialDisputeTemplate = initialDisputeData as IDisputeTemplate ;
75
76
76
- const NewDisputeContext = createContext < INewDisputeContext > ( {
77
- disputeData : initialDisputeData ,
78
- setDisputeData : ( ) => { } ,
79
- disputeTemplate : initialDisputeTemplate ,
80
- resetDisputeData : ( ) => { } ,
81
- isSubmittingCase : false ,
82
- setIsSubmittingCase : ( ) => { } ,
83
- isPolicyUploading : false ,
84
- setIsPolicyUploading : ( ) => { } ,
85
- } ) ;
77
+ const NewDisputeContext = createContext < INewDisputeContext | undefined > ( undefined ) ;
86
78
87
- export const useNewDisputeContext = ( ) => useContext ( NewDisputeContext ) ;
79
+ export const useNewDisputeContext = ( ) => {
80
+ const context = useContext ( NewDisputeContext ) ;
81
+ if ( ! context ) {
82
+ throw new Error ( "Context Provider not found." ) ;
83
+ }
84
+ return context ;
85
+ } ;
88
86
89
87
export const NewDisputeProvider : React . FC < { children : React . ReactNode } > = ( { children } ) => {
90
88
const [ disputeData , setDisputeData ] = useLocalStorage < IDisputeData > ( "disputeData" , initialDisputeData ) ;
@@ -93,9 +91,9 @@ export const NewDisputeProvider: React.FC<{ children: React.ReactNode }> = ({ ch
93
91
94
92
const disputeTemplate = useMemo ( ( ) => constructDisputeTemplate ( disputeData ) , [ disputeData ] ) ;
95
93
96
- const resetDisputeData = ( ) => {
94
+ const resetDisputeData = useCallback ( ( ) => {
97
95
setDisputeData ( initialDisputeData ) ;
98
- } ;
96
+ } , [ setDisputeData ] ) ;
99
97
100
98
const contextValues = useMemo (
101
99
( ) => ( {
@@ -108,14 +106,15 @@ export const NewDisputeProvider: React.FC<{ children: React.ReactNode }> = ({ ch
108
106
isPolicyUploading,
109
107
setIsPolicyUploading,
110
108
} ) ,
111
- [ disputeData , disputeTemplate , resetDisputeData , isSubmittingCase , isPolicyUploading ]
109
+ [ disputeData , disputeTemplate , resetDisputeData , isSubmittingCase , isPolicyUploading , setDisputeData ]
112
110
) ;
113
111
114
112
return < NewDisputeContext . Provider value = { contextValues } > { children } </ NewDisputeContext . Provider > ;
115
113
} ;
116
114
117
115
const constructDisputeTemplate = ( disputeData : IDisputeData ) => {
118
- const baseTemplate = { ...disputeData } ;
116
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
117
+ const { courtId, numberOfJurors, arbitrationCost, ...baseTemplate } = disputeData ;
119
118
120
119
if ( ! isUndefined ( baseTemplate . aliasesArray ) ) {
121
120
baseTemplate . aliasesArray = baseTemplate . aliasesArray . filter ( ( item ) => item . address !== "" && item . isValid ) ;
@@ -130,7 +129,14 @@ const constructDisputeTemplate = (disputeData: IDisputeData) => {
130
129
baseTemplate . aliases = aliases ;
131
130
}
132
131
}
132
+
133
+ for ( const answer of baseTemplate . answers ) {
134
+ answer . id = "0x" + BigInt ( answer . id ) . toString ( 16 ) ;
135
+ }
133
136
if ( ! isUndefined ( baseTemplate . policyURI ) && baseTemplate . policyURI === "" ) delete baseTemplate . policyURI ;
134
137
138
+ baseTemplate . arbitratorAddress = klerosCoreAddress [ DEFAULT_CHAIN ] ;
139
+ baseTemplate . arbitratorChainID = DEFAULT_CHAIN . toString ( ) ;
140
+
135
141
return baseTemplate as IDisputeTemplate ;
136
142
} ;
0 commit comments