1
1
import 'mo/workbench/sidebar/style.scss' ;
2
2
import * as React from 'react' ;
3
+ import { memo } from 'react' ;
3
4
import { prefixClaName } from 'mo/common/className' ;
4
5
import { ISidebar , ISidebarPane } from 'mo/model/workbench/sidebar' ;
5
6
6
- function Sidebar ( props : ISidebar ) {
7
- const { panes = [ ] , render } = props ;
7
+ export interface IHeaderProps {
8
+ title : string ;
9
+ toolbar : React . ReactNode ;
10
+ }
11
+
12
+ export const Header = memo < IHeaderProps > ( function Header ( props : IHeaderProps ) {
13
+ return (
14
+ < header className = { 'pane-header' } >
15
+ < div className = { 'pane-title' } >
16
+ < h2 > { props . title } </ h2 >
17
+ </ div >
18
+ < div className = { 'pane-toolbar' } >
19
+ { props . toolbar || null }
20
+ </ div >
21
+ </ header >
22
+ )
23
+ } ) ;
24
+
25
+ export function Content ( props : React . ComponentProps < any > ) {
26
+ return (
27
+ < div className = "pane-content" >
28
+ { props . children }
29
+ </ div >
30
+ )
31
+ }
32
+
33
+ export function Sidebar ( props : ISidebar ) {
34
+ const { panes = [ ] , render, current } = props ;
8
35
9
36
let sidebarPane : React . ReactNode = panes ?. map ( ( pane : ISidebarPane ) => {
10
37
return (
11
38
< div
12
39
key = { pane . id }
13
40
data-id = { pane . id }
41
+ style = { { display : pane . id === current ? 'block' : 'none' } }
14
42
className = { prefixClaName ( 'pane' , 'sidebar' ) }
15
43
>
16
- < header className = { 'pane-header' } >
17
- < div className = { 'pane-title' } >
18
- < h2 > { pane . name } </ h2 >
19
- </ div >
20
- < div className = { 'pane-toolbar' } > </ div >
21
- </ header >
22
- < div className = "pane-content" >
23
- { pane . render ? pane . render ( ) : null }
24
- </ div >
44
+ { pane . render ? pane . render ( ) : null }
25
45
</ div >
26
46
) ;
27
47
} ) ;
@@ -31,6 +51,4 @@ function Sidebar(props: ISidebar) {
31
51
}
32
52
33
53
return < div className = { prefixClaName ( 'sidebar' ) } > { sidebarPane } </ div > ;
34
- }
35
-
36
- export default Sidebar ;
54
+ }
0 commit comments