@@ -5,12 +5,7 @@ import { usePanelSideBarContext } from "./Context/PanelSideBarContext";
55import { PanelItem } from "./Definitions/PanelItem" ;
66import { PanelSideBarItem } from "./PanelSideBarItem" ;
77
8- interface PanelSidebarProps {
9- toggledSidebar : boolean ;
10- }
11-
12- export const PanelSideBar = ( props : PanelSidebarProps ) => {
13- const { toggledSidebar } = props ;
8+ export const PanelSideBar = ( ) => {
149 const {
1510 activePanelId,
1611 globalItems,
@@ -19,55 +14,90 @@ export const PanelSideBar = (props: PanelSidebarProps) => {
1914 setActivePanel,
2015 toggledMenuItemIds,
2116 toggleMenuItem,
17+ renderFirstItemsLevelAsTiles,
18+ renderTilesAsLinks,
2219 } = usePanelSideBarContext ( ) ;
2320 const panelItems = localItems . concat ( globalItems ) ;
2421
25- if ( globalItems . find ( ( x ) => ! x . icon ) || localItems . find ( ( x ) => ! x . icon ) ) {
26- throw new Error ( "Outer panel icon is required" ) ;
27- }
22+ if ( renderFirstItemsLevelAsTiles ) {
23+ if ( globalItems . find ( ( x ) => ! x . icon ) || localItems . find ( ( x ) => ! x . icon ) ) {
24+ throw new Error ( "Outer panel icon is required" ) ;
25+ }
2826
29- const activePanel : PanelItem | undefined = panelItems . find ( ( x ) => x . id === activePanelId ) ;
27+ const activePanel : PanelItem | undefined = panelItems . find ( ( x ) => x . id === activePanelId ) ;
28+ const ButtonIcon = ( props : { item : PanelItem } ) => {
29+ const {
30+ item : { disabled, icon, onClick, id, title } ,
31+ } = props ;
32+ return (
33+ < Button
34+ key = { id }
35+ color = "primary"
36+ outline
37+ className = { classNames ( "tile" , { active : activePanelId === id } ) }
38+ onClick = { ( ) => {
39+ if ( ! renderTilesAsLinks ) {
40+ if ( onClick ) {
41+ onClick ( ) ;
42+ } else {
43+ setActivePanel ( id ) ;
44+ }
45+ }
46+ } }
47+ title = { typeof title == "string" ? String ( title ) : "" }
48+ disabled = { disabled }
49+ >
50+ { icon && < FontAwesomeIcon icon = { icon } size = "lg" fixedWidth /> }
51+ </ Button >
52+ ) ;
53+ } ;
3054
31- const panelItemsRenderer = ( items : PanelItem [ ] ) =>
32- items ?. map ( ( { disabled, icon, onClick, id, title } ) => (
33- < Button
34- key = { id }
35- color = "primary"
36- outline
37- className = { classNames ( "tile" , { active : activePanelId === id } ) }
38- onClick = { ( ) => {
39- if ( onClick ) {
40- onClick ( ) ;
41- } else {
42- setActivePanel ( id ) ;
43- }
44- } }
45- title = { typeof title == "string" ? String ( title ) : "" }
46- disabled = { disabled }
47- >
48- { icon && < FontAwesomeIcon icon = { icon } size = "lg" fixedWidth /> }
49- </ Button >
50- ) ) ;
55+ const panelItemsRenderer = ( items : PanelItem [ ] ) =>
56+ items ?. map ( ( item ) =>
57+ renderTilesAsLinks ? (
58+ < LinkRenderer item = { item } >
59+ < ButtonIcon item = { item } />
60+ </ LinkRenderer >
61+ ) : (
62+ < ButtonIcon item = { item } />
63+ ) ,
64+ ) ;
5165
52- return (
53- < nav id = "side-nav" className = "panel-layout" >
54- < div className = "side-nav__tiles" >
55- { panelItemsRenderer ( globalItems ) }
56- { panelItemsRenderer ( localItems ) }
57- </ div >
66+ return (
67+ < nav id = "side-nav" className = "panel-layout" >
68+ < div className = "side-nav__tiles" >
69+ { panelItemsRenderer ( globalItems ) }
70+ { panelItemsRenderer ( localItems ) }
71+ </ div >
5872
59- < div className = "side-nav__items" >
60- { activePanel ?. children ?. map ( ( item ) => (
61- < PanelSideBarItem
62- key = { item . id }
63- children = { item }
64- LinkRenderer = { LinkRenderer }
65- onClick = { ( menuItem ) => toggleMenuItem ( menuItem ) }
66- toggledItemIds = { toggledMenuItemIds }
67- toggledSidebar = { toggledSidebar }
68- />
69- ) ) }
70- </ div >
71- </ nav >
72- ) ;
73+ < div className = "side-nav__items" >
74+ { activePanel ?. children ?. map ( ( item ) => (
75+ < PanelSideBarItem
76+ key = { item . id }
77+ children = { item }
78+ LinkRenderer = { LinkRenderer }
79+ onClick = { ( menuItem ) => toggleMenuItem ( menuItem ) }
80+ toggledItemIds = { toggledMenuItemIds }
81+ />
82+ ) ) }
83+ </ div >
84+ </ nav >
85+ ) ;
86+ } else {
87+ return (
88+ < nav id = "side-nav" className = "panel-layout" >
89+ < div className = "side-nav__items" >
90+ { panelItems ?. map ( ( item ) => (
91+ < PanelSideBarItem
92+ key = { item . id }
93+ children = { item }
94+ LinkRenderer = { LinkRenderer }
95+ onClick = { ( menuItem ) => toggleMenuItem ( menuItem ) }
96+ toggledItemIds = { toggledMenuItemIds }
97+ />
98+ ) ) }
99+ </ div >
100+ </ nav >
101+ ) ;
102+ }
73103} ;
0 commit comments