@@ -11,9 +11,10 @@ import {
1111 TreeWalker ,
1212 TreeWalkerValue ,
1313} from '../src' ;
14- import { NodeComponentProps } from '../src/Tree' ;
14+ import { NodeComponentProps , NodePublicState } from '../src/Tree' ;
1515import {
1616 defaultTree ,
17+ treeWithLargeNode ,
1718 extractReceivedRecords ,
1819 mockRequestIdleCallback ,
1920 sleep ,
@@ -49,15 +50,15 @@ describe('FixedSizeTree', () => {
4950 > ;
5051 let tree : TreeNode ;
5152 let treeWalkerSpy : jest . Mock ;
52- let isOpenByDefault : boolean ;
53+ let isOpenByDefault : ( node : TreeNode ) => boolean ;
5354
5455 const getNodeData = (
5556 node : TreeNode ,
5657 nestingLevel : number ,
5758 ) : TreeWalkerValue < ExtendedData , NodeMeta > => ( {
5859 data : {
5960 id : node . id . toString ( ) ,
60- isOpenByDefault,
61+ isOpenByDefault : isOpenByDefault ( node ) ,
6162 name : node . name ,
6263 nestingLevel,
6364 } ,
@@ -103,7 +104,7 @@ describe('FixedSizeTree', () => {
103104 beforeEach ( ( ) => {
104105 tree = defaultTree ;
105106
106- isOpenByDefault = true ;
107+ isOpenByDefault = ( ) => true ;
107108
108109 treeWalkerSpy = jest . fn ( treeWalker ) ;
109110
@@ -596,5 +597,115 @@ describe('FixedSizeTree', () => {
596597 list = component . find ( FixedSizeList ) ;
597598 expect ( list . prop ( 'itemCount' ) ) . toBe ( 7 ) ;
598599 } ) ;
600+
601+ it ( 'correctly collapses node with 100.000 children' , async ( ) => {
602+ tree = treeWithLargeNode ;
603+ component = mountComponent ( ) ;
604+
605+ const records = extractReceivedRecords ( component . find ( FixedSizeList ) ) ;
606+ const { setOpen} = records . find (
607+ ( record ) => record . data . id === 'largeNode-1' ,
608+ ) as NodePublicState < ExtendedData > ;
609+
610+ await setOpen ( false ) ;
611+ component . update ( ) ; // Update the wrapper to get the latest changes
612+
613+ const updatedRecords = extractReceivedRecords (
614+ component . find ( FixedSizeList ) ,
615+ ) ;
616+ expect ( updatedRecords ) . toEqual ( [
617+ expect . objectContaining ( {
618+ data : expect . objectContaining ( {
619+ id : 'root-1' ,
620+ } ) ,
621+ } ) ,
622+ expect . objectContaining ( {
623+ data : expect . objectContaining ( {
624+ id : 'smallNode-1' ,
625+ } ) ,
626+ } ) ,
627+ expect . objectContaining ( {
628+ data : expect . objectContaining ( {
629+ id : 'smallNodeChild-1' ,
630+ } ) ,
631+ } ) ,
632+ expect . objectContaining ( {
633+ data : expect . objectContaining ( {
634+ id : 'smallNodeChild-2' ,
635+ } ) ,
636+ } ) ,
637+ expect . objectContaining ( {
638+ data : expect . objectContaining ( {
639+ id : 'largeNode-1' ,
640+ } ) ,
641+ } ) ,
642+ expect . objectContaining ( {
643+ data : expect . objectContaining ( {
644+ id : 'smallNode-2' ,
645+ } ) ,
646+ } ) ,
647+ expect . objectContaining ( {
648+ data : expect . objectContaining ( {
649+ id : 'smallNodeChild-3' ,
650+ } ) ,
651+ } ) ,
652+ expect . objectContaining ( {
653+ data : expect . objectContaining ( {
654+ id : 'smallNodeChild-4' ,
655+ } ) ,
656+ } ) ,
657+ ] ) ;
658+ } ) ;
659+
660+ it ( 'correctly expands node with 100.000 children' , async ( ) => {
661+ tree = treeWithLargeNode ;
662+ isOpenByDefault = ( node ) => {
663+ if ( node . id === 'largeNode-1' ) {
664+ return false ;
665+ }
666+ return true ;
667+ } ;
668+ component = mountComponent ( ) ;
669+
670+ const records = extractReceivedRecords ( component . find ( FixedSizeList ) ) ;
671+ const { setOpen} = records . find (
672+ ( record ) => record . data . id === 'largeNode-1' ,
673+ ) as NodePublicState < ExtendedData > ;
674+
675+ await setOpen ( true ) ;
676+ component . update ( ) ; // Update the wrapper to get the latest changes
677+
678+ const updatedRecords = extractReceivedRecords (
679+ component . find ( FixedSizeList ) ,
680+ ) ;
681+
682+ expect ( updatedRecords . slice ( - 5 ) ) . toEqual ( [
683+ expect . objectContaining ( {
684+ data : expect . objectContaining ( {
685+ id : 'largeNodeChild-99999' ,
686+ } ) ,
687+ } ) ,
688+ expect . objectContaining ( {
689+ data : expect . objectContaining ( {
690+ id : 'largeNodeChild-100000' ,
691+ } ) ,
692+ } ) ,
693+ expect . objectContaining ( {
694+ data : expect . objectContaining ( {
695+ id : 'smallNode-2' ,
696+ } ) ,
697+ } ) ,
698+ expect . objectContaining ( {
699+ data : expect . objectContaining ( {
700+ id : 'smallNodeChild-3' ,
701+ } ) ,
702+ } ) ,
703+ expect . objectContaining ( {
704+ data : expect . objectContaining ( {
705+ id : 'smallNodeChild-4' ,
706+ } ) ,
707+ } ) ,
708+ ] ) ;
709+ } ) ;
599710 } ) ;
600711} ) ;
0 commit comments