@@ -74,6 +74,30 @@ describe('RowRepeaterBehavior', () => {
7474 expect ( grid . state . children . length ) . toBe ( 4 ) ;
7575 } ) ;
7676 } ) ;
77+
78+ describe ( 'Given scene empty row' , ( ) => {
79+ let scene : EmbeddedScene ;
80+ let grid : SceneGridLayout ;
81+ let repeatBehavior : RowRepeaterBehavior ;
82+
83+ beforeEach ( async ( ) => {
84+ ( { scene, grid, repeatBehavior } = buildScene ( { variableQueryTime : 0 } ) ) ;
85+
86+ repeatBehavior . setState ( { sources : [ ] } ) ;
87+ activateFullSceneTree ( scene ) ;
88+ await new Promise ( ( r ) => setTimeout ( r , 1 ) ) ;
89+ } ) ;
90+
91+ it ( 'Should repeat row' , ( ) => {
92+ // Verify that panel above row remains
93+ expect ( grid . state . children [ 0 ] ) . toBeInstanceOf ( SceneGridItem ) ;
94+ // Verify that first row still has repeat behavior
95+ const row1 = grid . state . children [ 1 ] as SceneGridRow ;
96+ const row2 = grid . state . children [ 2 ] as SceneGridRow ;
97+ expect ( row1 . state . y ) . toBe ( 10 ) ;
98+ expect ( row2 . state . y ) . toBe ( 11 ) ;
99+ } ) ;
100+ } ) ;
77101} ) ;
78102
79103interface SceneOptions {
@@ -84,6 +108,22 @@ interface SceneOptions {
84108}
85109
86110function buildScene ( options : SceneOptions ) {
111+ const repeatBehavior = new RowRepeaterBehavior ( {
112+ variableName : 'server' ,
113+ sources : [
114+ new SceneGridItem ( {
115+ x : 0 ,
116+ y : 11 ,
117+ width : 24 ,
118+ height : 5 ,
119+ body : new SceneCanvasText ( {
120+ key : 'canvas-1' ,
121+ text : 'Panel inside repeated row, server = $server' ,
122+ } ) ,
123+ } ) ,
124+ ] ,
125+ } ) ;
126+
87127 const grid = new SceneGridLayout ( {
88128 children : [
89129 new SceneGridItem ( {
@@ -100,23 +140,7 @@ function buildScene(options: SceneOptions) {
100140 y : 10 ,
101141 width : 24 ,
102142 height : 1 ,
103- $behaviors : [
104- new RowRepeaterBehavior ( {
105- variableName : 'server' ,
106- sources : [
107- new SceneGridItem ( {
108- x : 0 ,
109- y : 11 ,
110- width : 24 ,
111- height : 5 ,
112- body : new SceneCanvasText ( {
113- key : 'canvas-1' ,
114- text : 'Panel inside repeated row, server = $server' ,
115- } ) ,
116- } ) ,
117- ] ,
118- } ) ,
119- ] ,
143+ $behaviors : [ repeatBehavior ] ,
120144 } ) ,
121145 new SceneGridRow ( {
122146 x : 0 ,
@@ -173,5 +197,5 @@ function buildScene(options: SceneOptions) {
173197 body : grid ,
174198 } ) ;
175199
176- return { scene, grid } ;
200+ return { scene, grid, repeatBehavior } ;
177201}
0 commit comments