33import { useState , useEffect } from 'react' ;
44import { useGlobalWallet } from '@/contexts/WalletContext' ;
55import {
6- useInitializeEscrow ,
7- useFundEscrow ,
8- useChangeMilestoneStatus ,
9- useApproveMilestone ,
10- useReleaseFunds ,
11- useStartDispute ,
12- useResolveDispute ,
6+ useInitializeEscrow as useMockInitializeEscrow ,
7+ useFundEscrow as useMockFundEscrow ,
8+ useChangeMilestoneStatus as useMockChangeMilestoneStatus ,
9+ useApproveMilestone as useMockApproveMilestone ,
10+ useReleaseFunds as useMockReleaseFunds ,
11+ useStartDispute as useMockStartDispute ,
12+ useResolveDispute as useMockResolveDispute ,
1313} from '@/lib/mock-trustless-work' ;
14+ import {
15+ useRealInitializeEscrow ,
16+ } from '@/lib/real-trustless-work' ;
1417import { assetConfig } from '@/lib/wallet-config' ;
1518import { useToast } from '@/contexts/ToastContext' ;
1619import { useDemoStats } from '@/hooks/useDemoStats' ;
@@ -64,22 +67,30 @@ export const DisputeResolutionDemo = () => {
6467 const [ showConfetti , setShowConfetti ] = useState ( false ) ;
6568 const [ useRealTrustlessWork , setUseRealTrustlessWork ] = useState ( true ) ; // Toggle for real vs mock
6669
67- // Hooks
68- const { initializeEscrow, isLoading : isInitializing , error : initError } = useInitializeEscrow ( ) ;
69- const { fundEscrow, isLoading : isFunding , error : fundError } = useFundEscrow ( ) ;
70- const {
71- changeMilestoneStatus,
72- isLoading : isChangingStatus ,
73- error : statusError ,
74- } = useChangeMilestoneStatus ( ) ;
75- const { approveMilestone, isLoading : isApproving , error : approveError } = useApproveMilestone ( ) ;
76- const { releaseFunds, isLoading : isReleasing , error : releaseError } = useReleaseFunds ( ) ;
77- const { startDispute, isLoading : isStartingDispute , error : disputeError } = useStartDispute ( ) ;
78- const {
79- resolveDispute,
80- isLoading : isResolvingDispute ,
81- error : resolveError ,
82- } = useResolveDispute ( ) ;
70+ // Mock hooks
71+ const mockHooks = {
72+ initializeEscrow : useMockInitializeEscrow ( ) ,
73+ fundEscrow : useMockFundEscrow ( ) ,
74+ changeMilestoneStatus : useMockChangeMilestoneStatus ( ) ,
75+ approveMilestone : useMockApproveMilestone ( ) ,
76+ releaseFunds : useMockReleaseFunds ( ) ,
77+ startDispute : useMockStartDispute ( ) ,
78+ resolveDispute : useMockResolveDispute ( ) ,
79+ } ;
80+
81+ // Real hooks (only initializeEscrow is available)
82+ const realHooks = {
83+ initializeEscrow : useRealInitializeEscrow ( ) ,
84+ fundEscrow : useMockFundEscrow ( ) ,
85+ changeMilestoneStatus : useMockChangeMilestoneStatus ( ) ,
86+ approveMilestone : useMockApproveMilestone ( ) ,
87+ releaseFunds : useMockReleaseFunds ( ) ,
88+ startDispute : useMockStartDispute ( ) ,
89+ resolveDispute : useMockResolveDispute ( ) ,
90+ } ;
91+
92+ // Use appropriate hooks based on toggle
93+ const hooks = useRealTrustlessWork ? realHooks : mockHooks ;
8394
8495 // Mock milestones - make mutable so we can update statuses
8596 const [ milestones , setMilestones ] = useState < Milestone [ ] > ( [
@@ -204,8 +215,8 @@ export const DisputeResolutionDemo = () => {
204215
205216 try {
206217 const payload = {
207- escrowType : 'multi-release' ,
208- releaseMode : 'multi-release' ,
218+ escrowType : 'multi-release' as const ,
219+ releaseMode : 'multi-release' as const ,
209220 asset : assetConfig . defaultAsset ,
210221 amount : '1000000' , // 10 USDC (6 decimals)
211222 platformFee : assetConfig . platformFee ,
@@ -221,7 +232,7 @@ export const DisputeResolutionDemo = () => {
221232 } ,
222233 } ;
223234
224- const result = await initializeEscrow ( payload ) ;
235+ const result = await hooks . initializeEscrow . initializeEscrow ( payload ) ;
225236 setContractId ( result . contractId ) ;
226237 setEscrowData ( result . escrow ) ;
227238 addToast ( {
@@ -260,7 +271,7 @@ export const DisputeResolutionDemo = () => {
260271 releaseMode : 'multi-release' ,
261272 } ;
262273
263- const result = await fundEscrow ( payload ) ;
274+ const result = await hooks . fundEscrow . fundEscrow ( payload ) ;
264275 setEscrowData ( result . escrow ) ;
265276 addToast ( {
266277 type : 'success' ,
@@ -302,7 +313,7 @@ export const DisputeResolutionDemo = () => {
302313 releaseMode : 'multi-release' ,
303314 } ;
304315
305- const result = await changeMilestoneStatus ( payload ) ;
316+ const result = await hooks . changeMilestoneStatus . changeMilestoneStatus ( payload ) ;
306317 setEscrowData ( result . escrow ) ;
307318
308319 // Update milestone status
@@ -354,7 +365,7 @@ export const DisputeResolutionDemo = () => {
354365 releaseMode : 'multi-release' ,
355366 } ;
356367
357- const result = await approveMilestone ( payload ) ;
368+ const result = await hooks . approveMilestone . approveMilestone ( payload ) ;
358369 setEscrowData ( result . escrow ) ;
359370
360371 // Update milestone status
@@ -408,7 +419,7 @@ export const DisputeResolutionDemo = () => {
408419 reason : disputeReason ,
409420 } ;
410421
411- const result = await startDispute ( payload ) ;
422+ const result = await hooks . startDispute . startDispute ( payload ) ;
412423 setEscrowData ( result . escrow ) ;
413424
414425 // Create new dispute
@@ -483,7 +494,7 @@ export const DisputeResolutionDemo = () => {
483494 reason : resolutionReason ,
484495 } ;
485496
486- const result = await resolveDispute ( payload ) ;
497+ const result = await hooks . resolveDispute . resolveDispute ( payload ) ;
487498 setEscrowData ( result . escrow ) ;
488499
489500 // Update dispute status
@@ -559,7 +570,7 @@ export const DisputeResolutionDemo = () => {
559570 releaseMode : 'multi-release' ,
560571 } ;
561572
562- const result = await releaseFunds ( payload ) ;
573+ const result = await hooks . releaseFunds . releaseFunds ( payload ) ;
563574 setEscrowData ( result . escrow ) ;
564575
565576 // Update milestone status
@@ -773,10 +784,10 @@ export const DisputeResolutionDemo = () => {
773784 < div className = 'mt-6 text-center' >
774785 < button
775786 onClick = { handleInitializeEscrow }
776- disabled = { ! isConnected || isInitializing }
787+ disabled = { ! isConnected || hooks . initializeEscrow . isLoading }
777788 className = 'px-8 py-3 bg-orange-500/20 hover:bg-orange-500/30 border border-orange-400/30 rounded-lg text-orange-300 hover:text-orange-200 transition-colors disabled:opacity-50 disabled:cursor-not-allowed'
778789 >
779- { isInitializing ? 'Initializing...' : 'Initialize Dispute Resolution Escrow' }
790+ { hooks . initializeEscrow . isLoading ? 'Initializing...' : 'Initialize Dispute Resolution Escrow' }
780791 </ button >
781792 </ div >
782793 </ div >
@@ -815,10 +826,10 @@ export const DisputeResolutionDemo = () => {
815826 < div className = 'mt-4 text-center' >
816827 < button
817828 onClick = { handleFundEscrow }
818- disabled = { isFunding }
829+ disabled = { hooks . fundEscrow . isLoading }
819830 className = 'px-6 py-2 bg-orange-500/20 hover:bg-orange-500/30 border border-orange-400/30 rounded-lg text-orange-300 hover:text-orange-200 transition-colors'
820831 >
821- { isFunding ? 'Funding...' : 'Fund Escrow' }
832+ { hooks . fundEscrow . isLoading ? 'Funding...' : 'Fund Escrow' }
822833 </ button >
823834 </ div >
824835 ) }
@@ -973,24 +984,24 @@ export const DisputeResolutionDemo = () => {
973984 < div className = 'grid grid-cols-3 gap-2' >
974985 < button
975986 onClick = { ( ) => handleResolveDispute ( dispute . id , 'approve' ) }
976- disabled = { isResolvingDispute }
987+ disabled = { hooks . resolveDispute . isLoading }
977988 className = 'px-3 py-2 bg-green-500/20 hover:bg-green-500/30 border border-green-400/30 rounded-lg text-green-300 hover:text-green-200 transition-colors text-sm'
978989 >
979- { isResolvingDispute ? '...' : 'Approve' }
990+ { hooks . resolveDispute . isLoading ? '...' : 'Approve' }
980991 </ button >
981992 < button
982993 onClick = { ( ) => handleResolveDispute ( dispute . id , 'reject' ) }
983- disabled = { isResolvingDispute }
994+ disabled = { hooks . resolveDispute . isLoading }
984995 className = 'px-3 py-2 bg-red-500/20 hover:bg-red-500/30 border border-red-400/30 rounded-lg text-red-300 hover:text-red-200 transition-colors text-sm'
985996 >
986- { isResolvingDispute ? '...' : 'Reject' }
997+ { hooks . resolveDispute . isLoading ? '...' : 'Reject' }
987998 </ button >
988999 < button
9891000 onClick = { ( ) => handleResolveDispute ( dispute . id , 'modify' ) }
990- disabled = { isResolvingDispute }
1001+ disabled = { hooks . resolveDispute . isLoading }
9911002 className = 'px-3 py-2 bg-yellow-500/20 hover:bg-yellow-500/30 border border-yellow-400/30 rounded-lg text-yellow-300 hover:text-yellow-200 transition-colors text-sm'
9921003 >
993- { isResolvingDispute ? '...' : 'Modify' }
1004+ { hooks . resolveDispute . isLoading ? '...' : 'Modify' }
9941005 </ button >
9951006 </ div >
9961007 </ div >
@@ -1065,23 +1076,24 @@ export const DisputeResolutionDemo = () => {
10651076 < ConfettiAnimation isActive = { showConfetti } />
10661077
10671078 { /* Error Display */ }
1068- { ( initError ||
1069- fundError ||
1070- statusError ||
1071- approveError ||
1072- releaseError ||
1073- disputeError ||
1074- resolveError ) && (
1079+ { ( hooks . initializeEscrow . error ||
1080+ hooks . fundEscrow . error ||
1081+ hooks . changeMilestoneStatus . error ||
1082+ hooks . approveMilestone . error ||
1083+ hooks . releaseFunds . error ||
1084+ hooks . startDispute . error ||
1085+ hooks . resolveDispute . error ) && (
10751086 < div className = 'p-4 bg-red-500/20 border border-red-400/30 rounded-lg' >
10761087 < h4 className = 'font-semibold text-red-300 mb-2' > Error Occurred</ h4 >
10771088 < p className = 'text-red-200 text-sm' >
1078- { initError ?. message ||
1079- fundError ?. message ||
1080- statusError ?. message ||
1081- approveError ?. message ||
1082- releaseError ?. message ||
1083- disputeError ?. message ||
1084- resolveError ?. message }
1089+ { hooks . initializeEscrow . error ?. message ||
1090+ hooks . fundEscrow . error ?. message ||
1091+ hooks . changeMilestoneStatus . error ?. message ||
1092+ hooks . approveMilestone . error ?. message ||
1093+ hooks . releaseFunds . error ?. message ||
1094+ hooks . startDispute . error ?. message ||
1095+ hooks . resolveDispute . error ?. message ||
1096+ 'An unknown error occurred' }
10851097 </ p >
10861098 </ div >
10871099 ) }
0 commit comments