@@ -61,7 +61,7 @@ export interface StepExecutorResult {
6161 currentTxIndex ?: number ;
6262 progress : number ; // 0–100
6363 onrampStatus ?: "pending" | "executing" | "completed" | "failed" ;
64- isExecuting : boolean ;
64+ executionState : "idle" | "executing" | "auto-starting" ;
6565 error ?: ApiError ;
6666 start : ( ) => void ;
6767 cancel : ( ) => void ;
@@ -111,7 +111,9 @@ export function useStepExecutor(
111111 const [ currentTxIndex , setCurrentTxIndex ] = useState < number | undefined > (
112112 undefined ,
113113 ) ;
114- const [ isExecuting , setIsExecuting ] = useState ( false ) ;
114+ const [ executionState , setExecutionState ] = useState <
115+ "idle" | "executing" | "auto-starting"
116+ > ( "idle" ) ;
115117 const [ error , setError ] = useState < ApiError | undefined > ( undefined ) ;
116118 const [ completedTxs , setCompletedTxs ] = useState < Set < number > > ( new Set ( ) ) ;
117119 const [ onrampStatus , setOnrampStatus ] = useState <
@@ -348,11 +350,11 @@ export function useStepExecutor(
348350
349351 // Main execution function
350352 const execute = useCallback ( async ( ) => {
351- if ( isExecuting ) {
353+ if ( executionState !== "idle" ) {
352354 return ;
353355 }
354356
355- setIsExecuting ( true ) ;
357+ setExecutionState ( "executing" ) ;
356358 setError ( undefined ) ;
357359 const completedStatusResults : CompletedStatusResult [ ] = [ ] ;
358360
@@ -476,11 +478,11 @@ export function useStepExecutor(
476478 ) ;
477479 }
478480 } finally {
479- setIsExecuting ( false ) ;
481+ setExecutionState ( "idle" ) ;
480482 abortControllerRef . current = null ;
481483 }
482484 } , [
483- isExecuting ,
485+ executionState ,
484486 wallet ,
485487 currentTxIndex ,
486488 flatTxs ,
@@ -494,17 +496,17 @@ export function useStepExecutor(
494496
495497 // Start execution
496498 const start = useCallback ( ( ) => {
497- if ( ! isExecuting ) {
499+ if ( executionState === "idle" ) {
498500 execute ( ) ;
499501 }
500- } , [ execute , isExecuting ] ) ;
502+ } , [ execute , executionState ] ) ;
501503
502504 // Cancel execution
503505 const cancel = useCallback ( ( ) => {
504506 if ( abortControllerRef . current ) {
505507 abortControllerRef . current . abort ( ) ;
506508 }
507- setIsExecuting ( false ) ;
509+ setExecutionState ( "idle" ) ;
508510 if ( onrampStatus === "executing" ) {
509511 setOnrampStatus ( "pending" ) ;
510512 }
@@ -523,17 +525,18 @@ export function useStepExecutor(
523525 useEffect ( ( ) => {
524526 if (
525527 autoStart &&
526- ! isExecuting &&
528+ executionState === "idle" &&
527529 currentTxIndex === undefined &&
528530 ! hasInitialized . current
529531 ) {
530532 hasInitialized . current = true ;
533+ setExecutionState ( "auto-starting" ) ;
531534 // add a delay to ensure the UI is ready
532535 setTimeout ( ( ) => {
533536 start ( ) ;
534537 } , 500 ) ;
535538 }
536- } , [ autoStart , isExecuting , currentTxIndex , start ] ) ;
539+ } , [ autoStart , executionState , currentTxIndex , start ] ) ;
537540
538541 // Cleanup on unmount
539542 useEffect ( ( ) => {
@@ -548,7 +551,7 @@ export function useStepExecutor(
548551 currentStep,
549552 currentTxIndex,
550553 progress,
551- isExecuting ,
554+ executionState ,
552555 onrampStatus,
553556 error,
554557 start,
0 commit comments