1
1
/** @jsx jsx */
2
2
import { jsx } from "@emotion/core" ;
3
- import React from "react" ;
3
+ import React , { useRef } from "react" ;
4
4
5
5
import { defaultStyles } from "./styles/styles" ;
6
6
import ItemDefault from "./item/item" ;
@@ -10,23 +10,26 @@ 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 useTreeHeight from "./hooks/use_ref_height" ;
13
16
14
17
const Tree = props => {
15
18
const {
16
19
structure = [ ] ,
17
20
title,
18
21
onSelect,
19
- className,
20
22
noResultsText = "No matching results" ,
21
- styles,
22
23
headerRenderer : Header = HeaderDefault ,
23
24
backIconRenderer,
24
25
inputRenderer : Input = InputDefault ,
25
26
inputIconRenderer,
26
27
noResultsRenderer : NoResults = NoResultsDefault ,
27
28
noResultsIconRenderer,
28
29
itemRenderer : Item = ItemDefault ,
29
- forwardIconRenderer
30
+ itemsRenderer : Items = ItemsRenderer ,
31
+ forwardIconRenderer,
32
+ treeContainerRenderer : TreeContainer = TreeContainerRenderer
30
33
} = props ;
31
34
32
35
const getStyles = ( key , props = { } ) => {
@@ -36,6 +39,9 @@ const Tree = props => {
36
39
return custom ? custom ( base , props ) : base ;
37
40
} ;
38
41
42
+ const ref = useRef ( ) ;
43
+ const treeHeight = useTreeHeight ( { ref } ) ;
44
+
39
45
const { onClick, onBackClick, currentDepth, parents } = useItemCallbacks (
40
46
onSelect
41
47
) ;
@@ -47,7 +53,7 @@ const Tree = props => {
47
53
} ) ;
48
54
49
55
return (
50
- < div css = { getStyles ( "tree" , props ) } >
56
+ < TreeContainer getStyles = { getStyles } innerRef = { ref } >
51
57
< Header
52
58
parents = { parents }
53
59
title = { title }
@@ -63,7 +69,7 @@ const Tree = props => {
63
69
setSearchTerm = { setSearchTerm }
64
70
inputIconRenderer = { inputIconRenderer }
65
71
/>
66
- < div css = { getStyles ( "items" , props ) } >
72
+ < Items getStyles = { getStyles } treeHeight = { treeHeight } >
67
73
{ leaves &&
68
74
leaves . length > 0 &&
69
75
leaves . map ( item => (
@@ -82,8 +88,8 @@ const Tree = props => {
82
88
noResultsIconRenderer = { noResultsIconRenderer }
83
89
/>
84
90
) }
85
- </ div >
86
- </ div >
91
+ </ Items >
92
+ </ TreeContainer >
87
93
) ;
88
94
} ;
89
95
0 commit comments