11import { mount , ReactWrapper } from 'enzyme' ;
22import React , { createRef , FC } from 'react' ;
3- import { FixedSizeList } from 'react-window' ;
3+ import { FixedSizeList , FixedSizeListProps } from 'react-window' ;
44import {
55 FixedSizeNodeData ,
66 FixedSizeNodePublicState ,
@@ -11,12 +11,13 @@ import {
1111 TreeWalker ,
1212 TreeWalkerValue ,
1313} from '../src' ;
14- import { NodeComponentProps } from '../src/Tree' ;
14+ import { NodeComponentProps , NodePublicState } from '../src/Tree' ;
1515import {
1616 defaultTree ,
1717 extractReceivedRecords ,
1818 mockRequestIdleCallback ,
1919 sleep ,
20+ treeWithLargeNode ,
2021} from './utils/misc' ;
2122
2223type TreeNode = Readonly < {
@@ -51,19 +52,10 @@ describe('FixedSizeTree', () => {
5152 let treeWalkerSpy : jest . Mock ;
5253 let isOpenByDefault : boolean ;
5354
54- const getNodeData = (
55+ let getNodeData : (
5556 node : TreeNode ,
5657 nestingLevel : number ,
57- ) : TreeWalkerValue < ExtendedData , NodeMeta > => ( {
58- data : {
59- id : node . id . toString ( ) ,
60- isOpenByDefault,
61- name : node . name ,
62- nestingLevel,
63- } ,
64- nestingLevel,
65- node,
66- } ) ;
58+ ) => TreeWalkerValue < ExtendedData , NodeMeta > ;
6759
6860 function * treeWalker ( ) : ReturnType < TreeWalker < ExtendedData , NodeMeta > > {
6961 yield getNodeData ( tree , 0 ) ;
@@ -105,6 +97,20 @@ describe('FixedSizeTree', () => {
10597
10698 isOpenByDefault = true ;
10799
100+ getNodeData = (
101+ node : TreeNode ,
102+ nestingLevel : number ,
103+ ) : TreeWalkerValue < ExtendedData , NodeMeta > => ( {
104+ data : {
105+ id : node . id . toString ( ) ,
106+ isOpenByDefault,
107+ name : node . name ,
108+ nestingLevel,
109+ } ,
110+ nestingLevel,
111+ node,
112+ } ) ;
113+
108114 treeWalkerSpy = jest . fn ( treeWalker ) ;
109115
110116 component = mountComponent ( ) ;
@@ -596,5 +602,82 @@ describe('FixedSizeTree', () => {
596602 list = component . find ( FixedSizeList ) ;
597603 expect ( list . prop ( 'itemCount' ) ) . toBe ( 7 ) ;
598604 } ) ;
605+
606+ it ( 'correctly collapses node with 100.000 children' , async ( ) => {
607+ tree = treeWithLargeNode ;
608+ component = mountComponent ( ) ;
609+
610+ const records = extractReceivedRecords <
611+ FixedSizeListProps ,
612+ ExtendedData ,
613+ NodePublicState < ExtendedData >
614+ > ( component . find ( FixedSizeList ) ) ;
615+
616+ const { setOpen} = records . find (
617+ ( record ) => record . data . id === 'largeNode-1' ,
618+ ) ! ;
619+
620+ await setOpen ( false ) ;
621+ component . update ( ) ; // Update the wrapper to get the latest changes
622+
623+ const updatedRecords = extractReceivedRecords (
624+ component . find ( FixedSizeList ) ,
625+ ) ;
626+
627+ expect ( updatedRecords . map ( ( { data : { id} } ) => id ) ) . toEqual ( [
628+ 'root-1' ,
629+ 'smallNode-1' ,
630+ 'smallNodeChild-1' ,
631+ 'smallNodeChild-2' ,
632+ 'largeNode-1' ,
633+ 'smallNode-2' ,
634+ 'smallNodeChild-3' ,
635+ 'smallNodeChild-4' ,
636+ ] ) ;
637+ } ) ;
638+
639+ it ( 'correctly expands node with 100.000 children' , async ( ) => {
640+ getNodeData = (
641+ node : TreeNode ,
642+ nestingLevel : number ,
643+ ) : TreeWalkerValue < ExtendedData , NodeMeta > => ( {
644+ data : {
645+ id : node . id . toString ( ) ,
646+ isOpenByDefault : node . id !== 'largeNode-1' ,
647+ name : node . name ,
648+ nestingLevel,
649+ } ,
650+ nestingLevel,
651+ node,
652+ } ) ;
653+ tree = treeWithLargeNode ;
654+
655+ component = mountComponent ( ) ;
656+
657+ const records = extractReceivedRecords <
658+ FixedSizeListProps ,
659+ ExtendedData ,
660+ NodePublicState < ExtendedData >
661+ > ( component . find ( FixedSizeList ) ) ;
662+
663+ const { setOpen} = records . find (
664+ ( record ) => record . data . id === 'largeNode-1' ,
665+ ) ! ;
666+
667+ await setOpen ( true ) ;
668+ component . update ( ) ; // Update the wrapper to get the latest changes
669+
670+ const updatedRecords = extractReceivedRecords (
671+ component . find ( FixedSizeList ) ,
672+ ) ;
673+
674+ expect ( updatedRecords . slice ( - 5 ) . map ( ( { data : { id} } ) => id ) ) . toEqual ( [
675+ 'largeNodeChild-99999' ,
676+ 'largeNodeChild-100000' ,
677+ 'smallNode-2' ,
678+ 'smallNodeChild-3' ,
679+ 'smallNodeChild-4' ,
680+ ] ) ;
681+ } ) ;
599682 } ) ;
600683} ) ;
0 commit comments