@@ -16,6 +16,7 @@ let act;
1616let getCacheForType ;
1717let useState ;
1818let Suspense ;
19+ let Offscreen ;
1920let startTransition ;
2021
2122let caches ;
@@ -34,6 +35,7 @@ describe('ReactInteractionTracing', () => {
3435 useState = React . useState ;
3536 startTransition = React . startTransition ;
3637 Suspense = React . Suspense ;
38+ Offscreen = React . unstable_Offscreen ;
3739
3840 getCacheForType = React . unstable_getCacheForType ;
3941
@@ -1362,4 +1364,74 @@ describe('ReactInteractionTracing', () => {
13621364 ] ) ;
13631365 } ) ;
13641366 } ) ;
1367+
1368+ // @gate enableTransitionTracing
1369+ it ( 'offscreen trees should not stop transition from completing' , async ( ) => {
1370+ const transitionCallbacks = {
1371+ onTransitionStart : ( name , startTime ) => {
1372+ Scheduler . unstable_yieldValue (
1373+ `onTransitionStart(${ name } , ${ startTime } )` ,
1374+ ) ;
1375+ } ,
1376+ onTransitionComplete : ( name , startTime , endTime ) => {
1377+ Scheduler . unstable_yieldValue (
1378+ `onTransitionComplete(${ name } , ${ startTime } , ${ endTime } )` ,
1379+ ) ;
1380+ } ,
1381+ onMarkerComplete : ( transitioName , markerName , startTime , endTime ) => {
1382+ Scheduler . unstable_yieldValue (
1383+ `onMarkerComplete(${ transitioName } , ${ markerName } , ${ startTime } , ${ endTime } )` ,
1384+ ) ;
1385+ } ,
1386+ } ;
1387+
1388+ function App ( ) {
1389+ return (
1390+ < React . unstable_TracingMarker name = "marker" >
1391+ < Suspense fallback = { < Text text = "Loading..." /> } >
1392+ < AsyncText text = "Text" />
1393+ </ Suspense >
1394+ < Offscreen mode = "hidden" >
1395+ < Suspense fallback = { < Text text = "Hidden Loading..." /> } >
1396+ < AsyncText text = "Hidden Text" />
1397+ </ Suspense >
1398+ </ Offscreen >
1399+ </ React . unstable_TracingMarker >
1400+ ) ;
1401+ }
1402+
1403+ const root = ReactNoop . createRoot ( {
1404+ unstable_transitionCallbacks : transitionCallbacks ,
1405+ } ) ;
1406+ await act ( ( ) => {
1407+ startTransition ( ( ) => root . render ( < App /> ) , { name : 'transition' } ) ;
1408+ ReactNoop . expire ( 1000 ) ;
1409+ advanceTimers ( 1000 ) ;
1410+ } ) ;
1411+ expect ( Scheduler ) . toHaveYielded ( [
1412+ 'Suspend [Text]' ,
1413+ 'Loading...' ,
1414+ 'Suspend [Hidden Text]' ,
1415+ 'Hidden Loading...' ,
1416+ 'onTransitionStart(transition, 0)' ,
1417+ ] ) ;
1418+
1419+ await act ( ( ) => {
1420+ resolveText ( 'Text' ) ;
1421+ ReactNoop . expire ( 1000 ) ;
1422+ advanceTimers ( 1000 ) ;
1423+ } ) ;
1424+ expect ( Scheduler ) . toHaveYielded ( [
1425+ 'Text' ,
1426+ 'onMarkerComplete(transition, marker, 0, 2000)' ,
1427+ 'onTransitionComplete(transition, 0, 2000)' ,
1428+ ] ) ;
1429+
1430+ await act ( ( ) => {
1431+ resolveText ( 'Hidden Text' ) ;
1432+ ReactNoop . expire ( 1000 ) ;
1433+ advanceTimers ( 1000 ) ;
1434+ } ) ;
1435+ expect ( Scheduler ) . toHaveYielded ( [ 'Hidden Text' ] ) ;
1436+ } ) ;
13651437} ) ;
0 commit comments