@@ -10,23 +10,32 @@ import NoResultsDefault from "./no_results/no_results";
1010
1111import useLeavesManager from "./hooks/use_leaves_manager" ;
1212import useItemCallbacks from "./hooks/use_item_callbacks" ;
13+ import TreeContainerRenderer from "./tree_container/tree_container" ;
14+ import ItemsRenderer from "./items/items" ;
15+ import useContainerHeight from "./hooks/use_components_refs" ;
16+
17+ const DEFAULT_WIDTH = 230 ;
18+ const DEFAULT_HEIGHT = 300 ;
19+ const PIXEL_SUFFIX = "px" ;
1320
1421const Tree = props => {
1522 const {
1623 structure = [ ] ,
1724 title,
1825 onSelect,
19- className,
26+ width,
27+ height,
2028 noResultsText = "No matching results" ,
21- styles,
2229 headerRenderer : Header = HeaderDefault ,
2330 backIconRenderer,
2431 inputRenderer : Input = InputDefault ,
2532 inputIconRenderer,
2633 noResultsRenderer : NoResults = NoResultsDefault ,
2734 noResultsIconRenderer,
2835 itemRenderer : Item = ItemDefault ,
29- forwardIconRenderer
36+ itemsRenderer : Items = ItemsRenderer ,
37+ forwardIconRenderer,
38+ treeContainerRenderer : TreeContainer = TreeContainerRenderer
3039 } = props ;
3140
3241 const getStyles = ( key , props = { } ) => {
@@ -36,19 +45,32 @@ const Tree = props => {
3645 return custom ? custom ( base , props ) : base ;
3746 } ;
3847
48+ const {
49+ containerRef,
50+ headerRef,
51+ inputRef,
52+ itemsHeight
53+ } = useContainerHeight ( ) ;
54+
3955 const { onClick, onBackClick, currentDepth, parents } = useItemCallbacks (
4056 onSelect
4157 ) ;
4258
43- const { searchTerm, setSearchTerm , leaves } = useLeavesManager ( {
59+ const { searchTerm, onInputChange , leaves } = useLeavesManager ( {
4460 structure,
4561 parents,
4662 currentDepth
4763 } ) ;
4864
4965 return (
50- < div css = { getStyles ( "tree" , props ) } >
66+ < TreeContainer
67+ containerRef = { containerRef }
68+ getStyles = { getStyles }
69+ width = { ( width || DEFAULT_WIDTH ) + PIXEL_SUFFIX }
70+ height = { ( height || DEFAULT_HEIGHT ) + PIXEL_SUFFIX }
71+ >
5172 < Header
73+ headerRef = { headerRef }
5274 parents = { parents }
5375 title = { title }
5476 onClick = { onBackClick }
@@ -58,12 +80,13 @@ const Tree = props => {
5880 { title }
5981 </ Header >
6082 < Input
83+ inputRef = { inputRef }
6184 getStyles = { getStyles }
6285 searchTerm = { searchTerm }
63- setSearchTerm = { setSearchTerm }
86+ onInputChange = { onInputChange }
6487 inputIconRenderer = { inputIconRenderer }
6588 />
66- < div css = { getStyles ( "items" , props ) } >
89+ < Items getStyles = { getStyles } height = { itemsHeight } >
6790 { leaves &&
6891 leaves . length > 0 &&
6992 leaves . map ( item => (
@@ -75,15 +98,16 @@ const Tree = props => {
7598 forwardIconRenderer = { forwardIconRenderer }
7699 />
77100 ) ) }
78- { leaves && leaves . length === 0 && (
79- < NoResults
80- text = { noResultsText }
81- getStyles = { getStyles }
82- noResultsIconRenderer = { noResultsIconRenderer }
83- />
84- ) }
85- </ div >
86- </ div >
101+ </ Items >
102+ { leaves && leaves . length === 0 && (
103+ < NoResults
104+ height = { itemsHeight }
105+ text = { noResultsText }
106+ getStyles = { getStyles }
107+ noResultsIconRenderer = { noResultsIconRenderer }
108+ />
109+ ) }
110+ </ TreeContainer >
87111 ) ;
88112} ;
89113
0 commit comments