-
Notifications
You must be signed in to change notification settings - Fork 67
/
LeftPanel.tsx
58 lines (53 loc) 路 1.33 KB
/
LeftPanel.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import * as Spaces from 'react-spaces';
import {useLayoutEffect} from 'react';
import {noop} from 'lodash';
import useResizablePanel, {TPanel, TSize} from '../ResizablePanels/hooks/useResizablePanel';
import Splitter from '../ResizablePanels/Splitter';
interface IProps {
panel: TPanel;
order?: number;
children(size: TSize): React.ReactNode;
tooltip?: string;
isToolTipVisible?: boolean;
onOpen?(): void;
dataTour?: string;
}
const LeftPanel = ({
panel,
order = 1,
tooltip,
isToolTipVisible = false,
children,
onOpen = noop,
dataTour,
}: IProps) => {
const {size, toggle, onStopResize} = useResizablePanel({panel});
useLayoutEffect(() => {
if (size.isOpen) onOpen();
}, [onOpen, size.isOpen]);
return (
<Spaces.LeftResizable
onResizeEnd={newSize => onStopResize(newSize)}
minimumSize={size.minSize}
maximumSize={size.maxSize}
size={size.size}
key={size.name}
order={order}
handleRender={props => (
<Splitter
{...props}
name={size.name}
isOpen={size.isOpen}
onClick={toggle}
tooltip={tooltip}
isToolTipVisible={isToolTipVisible}
tooltipPlacement="right"
dataTour={dataTour}
/>
)}
>
{children(size)}
</Spaces.LeftResizable>
);
};
export default LeftPanel;