|
| 1 | +import React from 'react'; |
| 2 | +import PropTypes from 'prop-types'; |
| 3 | +import { createStyles, Theme, withStyles, WithStyles } from '@material-ui/core/styles'; |
| 4 | +import Drawer from '@material-ui/core/Drawer'; |
| 5 | +import AppBar from '@material-ui/core/AppBar'; |
| 6 | +import CssBaseline from '@material-ui/core/CssBaseline'; |
| 7 | +import Toolbar from '@material-ui/core/Toolbar'; |
| 8 | +import List from '@material-ui/core/List'; |
| 9 | +import Typography from '@material-ui/core/Typography'; |
| 10 | +import Divider from '@material-ui/core/Divider'; |
| 11 | +import ListItem from '@material-ui/core/ListItem'; |
| 12 | +import ListItemIcon from '@material-ui/core/ListItemIcon'; |
| 13 | +import ListItemText from '@material-ui/core/ListItemText'; |
| 14 | +import InboxIcon from '@material-ui/icons/MoveToInbox'; |
| 15 | +import MailIcon from '@material-ui/icons/Mail'; |
| 16 | + |
| 17 | +const drawerWidth = 240; |
| 18 | + |
| 19 | +const styles = (theme: Theme) => |
| 20 | + createStyles({ |
| 21 | + root: { |
| 22 | + display: 'flex', |
| 23 | + }, |
| 24 | + appBar: { |
| 25 | + zIndex: theme.zIndex.drawer + 1, |
| 26 | + }, |
| 27 | + drawer: { |
| 28 | + width: drawerWidth, |
| 29 | + flexShrink: 0, |
| 30 | + }, |
| 31 | + drawerPaper: { |
| 32 | + width: drawerWidth, |
| 33 | + }, |
| 34 | + content: { |
| 35 | + flexGrow: 1, |
| 36 | + padding: theme.spacing(3), |
| 37 | + }, |
| 38 | + toolbar: theme.mixins.toolbar, |
| 39 | + }); |
| 40 | + |
| 41 | +interface ClippedDrawerProps extends WithStyles<typeof styles> {} |
| 42 | + |
| 43 | +function ClippedDrawer(props: ClippedDrawerProps) { |
| 44 | + const { classes } = props; |
| 45 | + |
| 46 | + return ( |
| 47 | + <div className={classes.root}> |
| 48 | + <CssBaseline /> |
| 49 | + <AppBar position="fixed" className={classes.appBar}> |
| 50 | + <Toolbar> |
| 51 | + <Typography variant="h6" color="inherit" noWrap> |
| 52 | + Clipped drawer |
| 53 | + </Typography> |
| 54 | + </Toolbar> |
| 55 | + </AppBar> |
| 56 | + <Drawer |
| 57 | + className={classes.drawer} |
| 58 | + variant="permanent" |
| 59 | + classes={{ |
| 60 | + paper: classes.drawerPaper, |
| 61 | + }} |
| 62 | + > |
| 63 | + <div className={classes.toolbar} /> |
| 64 | + <List> |
| 65 | + {['Inbox', 'Starred', 'Send email', 'Drafts'].map((text, index) => ( |
| 66 | + <ListItem button key={text}> |
| 67 | + <ListItemIcon>{index % 2 === 0 ? <InboxIcon /> : <MailIcon />}</ListItemIcon> |
| 68 | + <ListItemText primary={text} /> |
| 69 | + </ListItem> |
| 70 | + ))} |
| 71 | + </List> |
| 72 | + <Divider /> |
| 73 | + <List> |
| 74 | + {['All mail', 'Trash', 'Spam'].map((text, index) => ( |
| 75 | + <ListItem button key={text}> |
| 76 | + <ListItemIcon>{index % 2 === 0 ? <InboxIcon /> : <MailIcon />}</ListItemIcon> |
| 77 | + <ListItemText primary={text} /> |
| 78 | + </ListItem> |
| 79 | + ))} |
| 80 | + </List> |
| 81 | + </Drawer> |
| 82 | + <main className={classes.content}> |
| 83 | + <div className={classes.toolbar} /> |
| 84 | + <Typography paragraph> |
| 85 | + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt |
| 86 | + ut labore et dolore magna aliqua. Rhoncus dolor purus non enim praesent elementum |
| 87 | + facilisis leo vel. Risus at ultrices mi tempus imperdiet. Semper risus in hendrerit |
| 88 | + gravida rutrum quisque non tellus. Convallis convallis tellus id interdum velit laoreet id |
| 89 | + donec ultrices. Odio morbi quis commodo odio aenean sed adipiscing. Amet nisl suscipit |
| 90 | + adipiscing bibendum est ultricies integer quis. Cursus euismod quis viverra nibh cras. |
| 91 | + Metus vulputate eu scelerisque felis imperdiet proin fermentum leo. Mauris commodo quis |
| 92 | + imperdiet massa tincidunt. Cras tincidunt lobortis feugiat vivamus at augue. At augue eget |
| 93 | + arcu dictum varius duis at consectetur lorem. Velit sed ullamcorper morbi tincidunt. Lorem |
| 94 | + donec massa sapien faucibus et molestie ac. |
| 95 | + </Typography> |
| 96 | + <Typography paragraph> |
| 97 | + Consequat mauris nunc congue nisi vitae suscipit. Fringilla est ullamcorper eget nulla |
| 98 | + facilisi etiam dignissim diam. Pulvinar elementum integer enim neque volutpat ac |
| 99 | + tincidunt. Ornare suspendisse sed nisi lacus sed viverra tellus. Purus sit amet volutpat |
| 100 | + consequat mauris. Elementum eu facilisis sed odio morbi. Euismod lacinia at quis risus sed |
| 101 | + vulputate odio. Morbi tincidunt ornare massa eget egestas purus viverra accumsan in. In |
| 102 | + hendrerit gravida rutrum quisque non tellus orci ac. Pellentesque nec nam aliquam sem et |
| 103 | + tortor. Habitant morbi tristique senectus et. Adipiscing elit duis tristique sollicitudin |
| 104 | + nibh sit. Ornare aenean euismod elementum nisi quis eleifend. Commodo viverra maecenas |
| 105 | + accumsan lacus vel facilisis. Nulla posuere sollicitudin aliquam ultrices sagittis orci a. |
| 106 | + </Typography> |
| 107 | + </main> |
| 108 | + </div> |
| 109 | + ); |
| 110 | +} |
| 111 | + |
| 112 | +ClippedDrawer.propTypes = { |
| 113 | + classes: PropTypes.object.isRequired, |
| 114 | +} as any; |
| 115 | + |
| 116 | +export default withStyles(styles)(ClippedDrawer); |
0 commit comments