@@ -10,23 +10,32 @@ import NoResultsDefault from "./no_results/no_results";
10
10
11
11
import useLeavesManager from "./hooks/use_leaves_manager" ;
12
12
import 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" ;
13
20
14
21
const Tree = props => {
15
22
const {
16
23
structure = [ ] ,
17
24
title,
18
25
onSelect,
19
- className,
26
+ width,
27
+ height,
20
28
noResultsText = "No matching results" ,
21
- styles,
22
29
headerRenderer : Header = HeaderDefault ,
23
30
backIconRenderer,
24
31
inputRenderer : Input = InputDefault ,
25
32
inputIconRenderer,
26
33
noResultsRenderer : NoResults = NoResultsDefault ,
27
34
noResultsIconRenderer,
28
35
itemRenderer : Item = ItemDefault ,
29
- forwardIconRenderer
36
+ itemsRenderer : Items = ItemsRenderer ,
37
+ forwardIconRenderer,
38
+ treeContainerRenderer : TreeContainer = TreeContainerRenderer
30
39
} = props ;
31
40
32
41
const getStyles = ( key , props = { } ) => {
@@ -36,19 +45,32 @@ const Tree = props => {
36
45
return custom ? custom ( base , props ) : base ;
37
46
} ;
38
47
48
+ const {
49
+ containerRef,
50
+ headerRef,
51
+ inputRef,
52
+ itemsHeight
53
+ } = useContainerHeight ( ) ;
54
+
39
55
const { onClick, onBackClick, currentDepth, parents } = useItemCallbacks (
40
56
onSelect
41
57
) ;
42
58
43
- const { searchTerm, setSearchTerm , leaves } = useLeavesManager ( {
59
+ const { searchTerm, onInputChange , leaves } = useLeavesManager ( {
44
60
structure,
45
61
parents,
46
62
currentDepth
47
63
} ) ;
48
64
49
65
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
+ >
51
72
< Header
73
+ headerRef = { headerRef }
52
74
parents = { parents }
53
75
title = { title }
54
76
onClick = { onBackClick }
@@ -58,12 +80,13 @@ const Tree = props => {
58
80
{ title }
59
81
</ Header >
60
82
< Input
83
+ inputRef = { inputRef }
61
84
getStyles = { getStyles }
62
85
searchTerm = { searchTerm }
63
- setSearchTerm = { setSearchTerm }
86
+ onInputChange = { onInputChange }
64
87
inputIconRenderer = { inputIconRenderer }
65
88
/>
66
- < div css = { getStyles ( "items" , props ) } >
89
+ < Items getStyles = { getStyles } height = { itemsHeight } >
67
90
{ leaves &&
68
91
leaves . length > 0 &&
69
92
leaves . map ( item => (
@@ -75,15 +98,16 @@ const Tree = props => {
75
98
forwardIconRenderer = { forwardIconRenderer }
76
99
/>
77
100
) ) }
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 >
87
111
) ;
88
112
} ;
89
113
0 commit comments