@@ -40,6 +40,7 @@ export default function ProviderGuard({ didSelectProvider, children }: ProviderG
4040 const [ isTetrateSetupInProgress , setIsTetrateSetupInProgress ] = useState ( false ) ;
4141 const onboardingTracked = useRef ( false ) ;
4242 const tetrateSetupRunId = useRef ( 0 ) ;
43+ const tetrateSuccessTimerId = useRef < ReturnType < typeof setTimeout > | null > ( null ) ;
4344 const scrollContainerRef = useRef < HTMLDivElement > ( null ) ;
4445 const [ showScrollIndicator , setShowScrollIndicator ] = useState ( true ) ;
4546
@@ -69,6 +70,7 @@ export default function ProviderGuard({ didSelectProvider, children }: ProviderG
6970 title : string ;
7071 message : string ;
7172 showProgress ?: boolean ;
73+ showSuccess ?: boolean ;
7274 showRetry : boolean ;
7375 closeLabel ?: string ;
7476 autoClose ?: number ;
@@ -107,9 +109,20 @@ export default function ProviderGuard({ didSelectProvider, children }: ProviderG
107109 setIsTetrateSetupInProgress ( false ) ;
108110
109111 if ( result . success ) {
110- setTetrateSetupState ( null ) ;
111- setSwitchModelProvider ( 'tetrate' ) ;
112- setShowSwitchModelModal ( true ) ;
112+ setTetrateSetupState ( {
113+ show : true ,
114+ title : 'Setup Complete' ,
115+ message : 'Your account has been connected successfully.' ,
116+ showSuccess : true ,
117+ showProgress : false ,
118+ showRetry : false ,
119+ } ) ;
120+ tetrateSuccessTimerId . current = setTimeout ( ( ) => {
121+ tetrateSuccessTimerId . current = null ;
122+ setTetrateSetupState ( null ) ;
123+ setSwitchModelProvider ( 'tetrate' ) ;
124+ setShowSwitchModelModal ( true ) ;
125+ } , 1500 ) ;
113126 } else {
114127 trackOnboardingSetupFailed ( 'tetrate' , result . message ) ;
115128 setTetrateSetupState ( {
@@ -165,6 +178,16 @@ export default function ProviderGuard({ didSelectProvider, children }: ProviderG
165178 } ;
166179
167180 const handleCancelTetrateSetup = async ( ) => {
181+ if ( tetrateSuccessTimerId . current ) {
182+ // User dismissed the success modal early — still advance to model selection
183+ clearTimeout ( tetrateSuccessTimerId . current ) ;
184+ tetrateSuccessTimerId . current = null ;
185+ setTetrateSetupState ( null ) ;
186+ setSwitchModelProvider ( 'tetrate' ) ;
187+ setShowSwitchModelModal ( true ) ;
188+ return ;
189+ }
190+
168191 if ( ! isTetrateSetupInProgress ) {
169192 setTetrateSetupState ( null ) ;
170193 return ;
@@ -538,6 +561,7 @@ export default function ProviderGuard({ didSelectProvider, children }: ProviderG
538561 title = { tetrateSetupState . title }
539562 message = { tetrateSetupState . message }
540563 showProgress = { tetrateSetupState . showProgress }
564+ showSuccess = { tetrateSetupState . showSuccess }
541565 showRetry = { tetrateSetupState . showRetry }
542566 onRetry = { ( ) => handleRetrySetup ( 'tetrate' ) }
543567 onClose = { ( ) => closeSetupModal ( 'tetrate' ) }
0 commit comments