react-toolbox/components/drawer/Drawer.js

53 lines
1.5 KiB
JavaScript
Raw Normal View History

2016-05-29 13:54:29 +03:00
import React, { PropTypes } from 'react';
2016-05-22 14:42:52 +03:00
import { themr } from 'react-css-themr';
import classnames from 'classnames';
2016-05-29 13:54:29 +03:00
import { DRAWER } from '../identifiers.js';
import ActivableRenderer from '../hoc/ActivableRenderer.js';
import InjectOverlay from '../overlay/Overlay.js';
2015-09-09 23:44:24 +03:00
2016-05-29 13:54:29 +03:00
const factory = (Overlay) => {
const Drawer = ({ active, children, className, onOverlayClick, theme, type }) => {
const _className = classnames([theme.drawer, theme[type]], {
[theme.active]: active
}, className);
2015-11-05 13:45:23 +03:00
2016-05-29 13:54:29 +03:00
return (
<Overlay active={active} onClick={onOverlayClick}>
<div data-react-toolbox='drawer' className={_className}>
<aside className={theme.content}>
{children}
</aside>
</div>
</Overlay>
);
};
2015-11-05 13:45:23 +03:00
2016-05-29 13:54:29 +03:00
Drawer.propTypes = {
active: PropTypes.bool,
children: PropTypes.node,
className: PropTypes.string,
onOverlayClick: PropTypes.func,
theme: PropTypes.shape({
active: PropTypes.string.isRequired,
content: PropTypes.string.isRequired,
drawer: PropTypes.string.isRequired,
left: PropTypes.string.isRequired,
right: PropTypes.string.isRequired
}),
type: PropTypes.oneOf(['left', 'right'])
};
Drawer.defaultProps = {
active: false,
className: '',
type: 'left'
};
2015-11-05 13:45:23 +03:00
2016-05-29 13:54:29 +03:00
return ActivableRenderer()(Drawer);
2015-11-05 13:45:23 +03:00
};
2015-10-22 02:31:17 +03:00
2016-05-29 13:54:29 +03:00
const Drawer = factory(InjectOverlay);
export default themr(DRAWER)(Drawer);
export { factory as drawerFactory };
export { Drawer };