Skip to content

Commit dbca5e2

Browse files
committed
Migrate Dashboard layout to TypeScript
1 parent 71a0229 commit dbca5e2

File tree

7 files changed

+31
-32
lines changed

7 files changed

+31
-32
lines changed

src/Dashboard/Dashboard.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import SubscriptionsBreakdown from './SubscriptionsBreakdown/'
1414
export type DashboardProps = {}
1515

1616
const Dashboard: React.FC<DashboardProps> = () => {
17+
console.log('Dashboard rendered')
18+
1719
return (
1820
<BasePageContainer>
1921
<BasePageToolbar title={'Dashboard'} ActionsComponent={DashboardActions} />

src/_common/AppFooter/AppFooter.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react'
1+
import React, { memo } from 'react'
22
import Typography from '@material-ui/core/Typography'
33
import Link from '@material-ui/core/Link'
44
import { makeStyles } from '@material-ui/core/styles'
@@ -7,6 +7,8 @@ import pkg from '../../../package.json'
77
type AppFooterProps = {}
88

99
const AppFooter: React.FC<AppFooterProps> = () => {
10+
console.log('AppFooter rendered')
11+
1012
const classes = useStyles()
1113

1214
return (
@@ -59,4 +61,4 @@ const useStyles = makeStyles((theme) => ({
5961
},
6062
}))
6163

62-
export default AppFooter
64+
export default memo(AppFooter)

src/_common/AppHeader/AppHeader.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react'
1+
import React, { memo } from 'react'
22
import clsx from 'clsx'
33

44
import { makeStyles } from '@material-ui/core/styles'
@@ -17,6 +17,8 @@ export type AppHeaderProps = {
1717
}
1818

1919
const AppHeader: React.FC<AppHeaderProps> = ({ onToggleClick }) => {
20+
console.log('AppHeader rendered')
21+
2022
const classes = useStyles()
2123

2224
return (
@@ -61,4 +63,4 @@ const useStyles = makeStyles((theme) => ({
6163
},
6264
}))
6365

64-
export default AppHeader
66+
export default memo(AppHeader)

src/_common/AppSidebar/AppSidebar.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react'
1+
import React, { memo } from 'react'
22
import { makeStyles } from '@material-ui/core/styles'
33

44
import { Link } from 'react-router-dom'
@@ -12,7 +12,9 @@ export type AppSidebarProps = {
1212
isCollapsed?: boolean
1313
}
1414

15-
const Sidebar: React.FC<AppSidebarProps> = (props) => {
15+
const AppSidebar: React.FC<AppSidebarProps> = (props) => {
16+
console.log('AppSidebar rendered')
17+
1618
// const { isCollapsed } = props
1719

1820
const classes = useStyles(props)
@@ -48,7 +50,7 @@ const Sidebar: React.FC<AppSidebarProps> = (props) => {
4850
)
4951
}
5052

51-
Sidebar.defaultProps = {
53+
AppSidebar.defaultProps = {
5254
isCollapsed: false,
5355
}
5456

@@ -128,4 +130,4 @@ const useStyles = makeStyles((theme) => ({
128130
},
129131
}))
130132

131-
export default Sidebar
133+
export default memo(AppSidebar)

src/_layouts/DashboardLayout/DashboardLayout.js renamed to src/_layouts/DashboardLayout/DashboardLayout.tsx

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState, useEffect, useRef } from 'react'
1+
import React, { useState, useEffect, useRef, useCallback } from 'react'
22
import PropTypes from 'prop-types'
33
import clsx from 'clsx'
44
import { makeStyles, useTheme } from '@material-ui/core/styles'
@@ -10,14 +10,8 @@ import AppHeader from '../../_common/AppHeader'
1010
import AppFooter from '../../_common/AppFooter'
1111
import 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>
File renamed without changes.

0 commit comments

Comments
 (0)