1- import React , { useState , useEffect , useRef } from 'react'
1+ import React , { useState , useEffect , useRef , useCallback } from 'react'
22import PropTypes from 'prop-types'
33import clsx from 'clsx'
44import { makeStyles , useTheme } from '@material-ui/core/styles'
@@ -10,14 +10,8 @@ import AppHeader from '../../_common/AppHeader'
1010import AppFooter from '../../_common/AppFooter'
1111import AppSidebar from '../../_common/AppSidebar'
1212
13- const DashboardLayout = (
14- { header, footer, sidebar, children } = {
15- header : AppHeader ,
16- footer : AppFooter ,
17- sidebar : AppSidebar ,
18- } ,
19- ) => {
20- const refHeaderContainer = useRef ( null )
13+ const DashboardLayout : React . FC = ( { children } ) => {
14+ const refHeaderContainer = useRef < HTMLDivElement > ( null )
2115
2216 const classes = useStyles ( )
2317 const theme = useTheme ( )
@@ -30,9 +24,10 @@ const DashboardLayout = (
3024 const [ isSidebarCollapsed , setIsSidebarCollapsed ] = useState ( false )
3125
3226 useEffect ( ( ) => {
33- // code to run on component mount
34- setHeaderHeight ( refHeaderContainer . current . offsetHeight )
35- } , [ ] )
27+ if ( refHeaderContainer && refHeaderContainer . current ) {
28+ setHeaderHeight ( refHeaderContainer . current . offsetHeight )
29+ }
30+ } , [ refHeaderContainer ] )
3631
3732 const contentOffset = ( ( ) => {
3833 if ( ( isDesktop && ! isSidebarOpenDesktop ) || isMobile ) {
@@ -44,24 +39,20 @@ const DashboardLayout = (
4439 }
4540 } ) ( )
4641
47- const HeaderComponent = header
48- const SidebarComponent = sidebar
49- const FooterComponent = footer
50-
5142 function handleSidebarToggleOpenMobile ( ) {
5243 setIsSidebarOpenMobile ( ! isSidebarOpenMobile )
5344 }
5445
55- function handleSidebarToggle ( ) {
46+ const handleSidebarToggle = useCallback ( ( ) => {
5647 // Open/close on mobile
5748 if ( isMobile ) {
58- setIsSidebarOpenMobile ( ! isSidebarOpenMobile )
49+ setIsSidebarOpenMobile ( ( isSidebarOpenMobile ) => ! isSidebarOpenMobile )
5950 }
6051 // Collapse/uncollapse on desktop
6152 else {
62- setIsSidebarCollapsed ( ! isSidebarCollapsed )
53+ setIsSidebarCollapsed ( ( isSidebarCollapsed ) => ! isSidebarCollapsed )
6354 }
64- }
55+ } , [ isMobile ] )
6556
6657 // function handleSidebarToggleCollapse() {
6758 // setIsSidebarCollapsed(!isSidebarCollapsed)
@@ -76,7 +67,7 @@ const DashboardLayout = (
7667 width : `calc(100% - ${ contentOffset } px)` ,
7768 } }
7869 >
79- { HeaderComponent && < HeaderComponent onToggleClick = { handleSidebarToggle } /> }
70+ < AppHeader onToggleClick = { handleSidebarToggle } />
8071 </ div >
8172 < div
8273 // ref={refSidebarContainer}
@@ -99,7 +90,7 @@ const DashboardLayout = (
9990 keepMounted : true , // Better open performance on mobile.
10091 } }
10192 >
102- { SidebarComponent && < SidebarComponent /> }
93+ < AppSidebar />
10394 </ Drawer >
10495 </ Hidden >
10596 { /* Desktop sidebar */ }
@@ -110,7 +101,7 @@ const DashboardLayout = (
110101 } }
111102 variant = "permanent"
112103 >
113- { SidebarComponent && < SidebarComponent isCollapsed = { isSidebarCollapsed } /> }
104+ < AppSidebar isCollapsed = { isSidebarCollapsed } />
114105 </ Drawer >
115106 </ Hidden >
116107 </ div >
@@ -122,7 +113,7 @@ const DashboardLayout = (
122113 >
123114 < div className = { classes . contentContainer } > { children } </ div >
124115 < div className = { classes . footerContainer } >
125- { FooterComponent && < FooterComponent /> }
116+ < AppFooter />
126117 </ div >
127118 </ main >
128119 </ div >
0 commit comments