Skip to content

Commit e66ad7a

Browse files
committed
refactor(tsx): convert SideBar component
1 parent adc6e6d commit e66ad7a

File tree

1 file changed

+47
-31
lines changed

1 file changed

+47
-31
lines changed
Lines changed: 47 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import React from 'react';
22
import classNames from 'classnames';
3-
import PropTypes from 'prop-types';
43
import { NavLink } from 'react-router-dom';
54
import { makeStyles } from '@material-ui/core/styles';
65
import Drawer from '@material-ui/core/Drawer';
@@ -11,30 +10,53 @@ import ListItemText from '@material-ui/core/ListItemText';
1110
import Icon from '@material-ui/core/Icon';
1211
import styles from '../../assets/jss/material-dashboard-react/components/sidebarStyle';
1312

14-
const useStyles = makeStyles(styles);
13+
const useStyles = makeStyles(styles as any);
1514

16-
export default function Sidebar(props) {
15+
interface Route {
16+
path: string;
17+
layout: string;
18+
name: string;
19+
icon: string | React.ComponentType;
20+
visible?: boolean;
21+
rtlName?: string;
22+
component: React.ComponentType;
23+
}
24+
25+
interface SidebarProps {
26+
color: 'purple' | 'blue' | 'green' | 'orange' | 'red';
27+
logo: string;
28+
routes: Route[];
29+
background: string;
30+
rtlActive?: boolean;
31+
handleDrawerToggle: () => void;
32+
open: boolean;
33+
}
34+
35+
const Sidebar: React.FC<SidebarProps> = (props) => {
1736
const classes = useStyles();
18-
// verifies if routeName is the one active (in browser input)
19-
function activeRoute(routeName) {
20-
return window.location.href.indexOf(routeName) > -1 ? true : false;
21-
}
22-
const { color, logo, routes, background } = props;
37+
38+
const activeRoute = (routeName: string): boolean => {
39+
return window.location.href.indexOf(routeName) > -1;
40+
};
41+
42+
const { color, logo, routes, background, rtlActive, open, handleDrawerToggle } = props;
43+
2344
const links = (
2445
<List className={classes.list}>
2546
{routes.map((prop, key) => {
2647
const activePro = ' ';
2748
const listItemClasses = classNames({
28-
[' ' + classes[color]]: activeRoute(prop.layout + prop.path),
49+
[` ${classes[color]}`]: activeRoute(prop.layout + prop.path),
2950
});
3051

3152
const whiteFontClasses = classNames({
32-
[' ' + classes.whiteFont]: activeRoute(prop.layout + prop.path),
53+
[` ${classes.whiteFont}`]: activeRoute(prop.layout + prop.path),
3354
});
3455

3556
if (!prop.visible) {
3657
return <div key={key}></div>;
3758
}
59+
3860
return (
3961
<NavLink
4062
to={prop.layout + prop.path}
@@ -46,22 +68,22 @@ export default function Sidebar(props) {
4668
{typeof prop.icon === 'string' ? (
4769
<Icon
4870
className={classNames(classes.itemIcon, whiteFontClasses, {
49-
[classes.itemIconRTL]: props.rtlActive,
71+
[classes.itemIconRTL]: rtlActive,
5072
})}
5173
>
5274
{prop.icon}
5375
</Icon>
5476
) : (
5577
<prop.icon
5678
className={classNames(classes.itemIcon, whiteFontClasses, {
57-
[classes.itemIconRTL]: props.rtlActive,
79+
[classes.itemIconRTL]: rtlActive,
5880
})}
5981
/>
6082
)}
6183
<ListItemText
62-
primary={props.rtlActive ? prop.rtlName : prop.name}
84+
primary={rtlActive ? prop.rtlName : prop.name}
6385
className={classNames(classes.itemText, whiteFontClasses, {
64-
[classes.itemTextRTL]: props.rtlActive,
86+
[classes.itemTextRTL]: rtlActive,
6587
})}
6688
disableTypography={true}
6789
/>
@@ -71,6 +93,7 @@ export default function Sidebar(props) {
7193
})}
7294
</List>
7395
);
96+
7497
const brand = (
7598
<div className={classes.logo}>
7699
<a style={{ textDecoration: 'none' }} href='/dashboard/repo'>
@@ -85,21 +108,22 @@ export default function Sidebar(props) {
85108
</a>
86109
</div>
87110
);
111+
88112
return (
89113
<div style={{ borderRight: '1px solid #d3d3d3' }}>
90114
<Hidden mdUp implementation='css'>
91115
<Drawer
92116
variant='temporary'
93-
anchor={props.rtlActive ? 'left' : 'right'}
94-
open={props.open}
117+
anchor={rtlActive ? 'left' : 'right'}
118+
open={open}
95119
classes={{
96120
paper: classNames(classes.drawerPaper, {
97-
[classes.drawerPaperRTL]: props.rtlActive,
121+
[classes.drawerPaperRTL]: rtlActive,
98122
}),
99123
}}
100-
onClose={props.handleDrawerToggle}
124+
onClose={handleDrawerToggle}
101125
ModalProps={{
102-
keepMounted: true, // Better open performance on mobile.
126+
keepMounted: true,
103127
}}
104128
>
105129
{brand}
@@ -109,12 +133,12 @@ export default function Sidebar(props) {
109133
</Hidden>
110134
<Hidden smDown implementation='css'>
111135
<Drawer
112-
anchor={props.rtlActive ? 'right' : 'left'}
136+
anchor={rtlActive ? 'right' : 'left'}
113137
variant='permanent'
114138
open
115139
classes={{
116140
paper: classNames(classes.drawerPaper, {
117-
[classes.drawerPaperRTL]: props.rtlActive,
141+
[classes.drawerPaperRTL]: rtlActive,
118142
}),
119143
}}
120144
>
@@ -125,14 +149,6 @@ export default function Sidebar(props) {
125149
</Hidden>
126150
</div>
127151
);
128-
}
129-
130-
Sidebar.propTypes = {
131-
rtlActive: PropTypes.bool,
132-
handleDrawerToggle: PropTypes.func,
133-
bgColor: PropTypes.oneOf(['purple', 'blue', 'green', 'orange', 'red']),
134-
logo: PropTypes.string,
135-
image: PropTypes.string,
136-
routes: PropTypes.arrayOf(PropTypes.object),
137-
open: PropTypes.bool,
138152
};
153+
154+
export default Sidebar;

0 commit comments

Comments
 (0)