// @inheritedComponent Modal
import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import Modal from '../Modal';
import withStyles from '../styles/withStyles';
import Slide from '../transitions/Slide';
import Paper from '../Paper';
import { capitalize } from '../utils/helpers';
import { duration } from '../styles/transitions';
function getSlideDirection(anchor) {
if (anchor === 'left') {
return 'right';
} else if (anchor === 'right') {
return 'left';
} else if (anchor === 'top') {
return 'down';
}
// (anchor === 'bottom')
return 'up';
}
export const styles = theme => ({
docked: {
flex: '0 0 auto',
},
paper: {
overflowY: 'auto',
display: 'flex',
flexDirection: 'column',
height: '100vh',
flex: '1 0 auto',
zIndex: theme.zIndex.drawer,
WebkitOverflowScrolling: 'touch', // Add iOS momentum scrolling.
// temporary style
position: 'fixed',
top: 0,
// We disable the focus ring for mouse, touch and keyboard users.
// At some point, it would be better to keep it for keyboard users.
// :focus-ring CSS pseudo-class will help.
'&:focus': {
outline: 'none',
},
},
paperAnchorLeft: {
left: 0,
right: 'auto',
},
paperAnchorRight: {
left: 'auto',
right: 0,
},
paperAnchorTop: {
top: 0,
left: 0,
bottom: 'auto',
right: 0,
height: 'auto',
maxHeight: '100vh',
},
paperAnchorBottom: {
top: 'auto',
left: 0,
bottom: 0,
right: 0,
height: 'auto',
maxHeight: '100vh',
},
paperAnchorDockedLeft: {
borderRight: `1px solid ${theme.palette.divider}`,
},
paperAnchorDockedTop: {
borderBottom: `1px solid ${theme.palette.divider}`,
},
paperAnchorDockedRight: {
borderLeft: `1px solid ${theme.palette.divider}`,
},
paperAnchorDockedBottom: {
borderTop: `1px solid ${theme.palette.divider}`,
},
modal: {}, // Just here so people can override the style.
});
class Drawer extends React.Component {
state = {
// Let's assume that the Drawer will always be rendered on user space.
// We use that state is order to skip the appear transition during the
// initial mount of the component.
firstMount: true,
};
componentWillReceiveProps() {
this.setState({
firstMount: false,
});
}
render() {
const {
anchor: anchorProp,
children,
classes,
className,
elevation,
ModalProps,
onClose,
open,
PaperProps,
SlideProps,
theme,
transitionDuration,
variant,
...other
} = this.props;
let anchor = anchorProp;
if (theme.direction === 'rtl' && ['left', 'right'].includes(anchor)) {
anchor = anchor === 'left' ? 'right' : 'left';
}
const drawer = (