@@ -988,6 +988,52 @@ describe('VirtualizedList', () => {
988988 // scrolled-past in layout space.
989989 expect ( component ) . toMatchSnapshot ( ) ;
990990 } ) ;
991+
992+ it ( 'does not add a sticky header to the render mask when no sticky headers are configured' , ( ) => {
993+ const expectedRegions = [
994+ { first : 0 , last : 9 , isSpacer : true } ,
995+ { first : 10 , last : 12 , isSpacer : false } ,
996+ { first : 13 , last : 19 , isSpacer : true } ,
997+ ] ;
998+
999+ expect ( createRenderMaskForStickyHeaderTest ( ) . enumerateRegions ( ) ) . toEqual (
1000+ expectedRegions ,
1001+ ) ;
1002+ expect (
1003+ createRenderMaskForStickyHeaderTest ( {
1004+ stickyHeaderIndices : [ ] ,
1005+ } ) . enumerateRegions ( ) ,
1006+ ) . toEqual ( expectedRegions ) ;
1007+ } ) ;
1008+
1009+ it ( 'adds the closest sticky header above the viewport from unsorted stickyHeaderIndices' , ( ) => {
1010+ expect (
1011+ createRenderMaskForStickyHeaderTest ( {
1012+ stickyHeaderIndices : [ 12 , 0 , 8.5 , 7 , 7 , - 1 ] ,
1013+ } ) . enumerateRegions ( ) ,
1014+ ) . toEqual ( [
1015+ { first : 0 , last : 6 , isSpacer : true } ,
1016+ { first : 7 , last : 7 , isSpacer : false } ,
1017+ { first : 8 , last : 9 , isSpacer : true } ,
1018+ { first : 10 , last : 12 , isSpacer : false } ,
1019+ { first : 13 , last : 19 , isSpacer : true } ,
1020+ ] ) ;
1021+ } ) ;
1022+
1023+ it ( 'accounts for ListHeaderComponent offset when adding the closest sticky header' , ( ) => {
1024+ expect (
1025+ createRenderMaskForStickyHeaderTest ( {
1026+ ListHeaderComponent : ( ) => createElement ( 'Header' ) ,
1027+ stickyHeaderIndices : [ 3 ] ,
1028+ } ) . enumerateRegions ( ) ,
1029+ ) . toEqual ( [
1030+ { first : 0 , last : 1 , isSpacer : true } ,
1031+ { first : 2 , last : 2 , isSpacer : false } ,
1032+ { first : 3 , last : 9 , isSpacer : true } ,
1033+ { first : 10 , last : 12 , isSpacer : false } ,
1034+ { first : 13 , last : 19 , isSpacer : true } ,
1035+ ] ) ;
1036+ } ) ;
9911037} ) ;
9921038
9931039it ( 'unmounts sticky headers moved below viewport' , async ( ) => {
@@ -2569,6 +2615,26 @@ function fixedHeightItemLayoutProps(height) {
25692615 } ;
25702616}
25712617
2618+ function createRenderMaskForStickyHeaderTest ( {
2619+ ListHeaderComponent,
2620+ stickyHeaderIndices : stickyHeaderIndicesForTest ,
2621+ } = { } ) {
2622+ return VirtualizedList . _createRenderMask (
2623+ {
2624+ data : { length : 20 } ,
2625+ getItem : ( data , index ) => index ,
2626+ getItemCount : data => data . length ,
2627+ initialScrollIndex : 1 ,
2628+ ListHeaderComponent,
2629+ stickyHeaderIndices : stickyHeaderIndicesForTest ,
2630+ } ,
2631+ {
2632+ first : 10 ,
2633+ last : 12 ,
2634+ } ,
2635+ ) ;
2636+ }
2637+
25722638let lastViewportLayout ;
25732639let lastContentLayout ;
25742640
0 commit comments