Files
Airframe-React/app/components/Sidebar/SidebarContent.js
2019-08-15 00:54:44 +02:00

69 lines
2.1 KiB
JavaScript
Executable File

import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import Common from './../../common';
export class SidebarContent extends React.Component {
static propTypes = {
children: PropTypes.node,
slim: PropTypes.bool,
collapsed: PropTypes.bool,
animationsDisabled: PropTypes.bool,
pageConfig: PropTypes.object
}
sidebarRef = React.createRef();
constructor(props) {
super(props);
this.state = {
entryAnimationFinished: false,
};
}
componentDidMount() {
this.sidebarEntryAnimate = new Common.SidebarEntryAnimate();
this.slimSidebarAnimate = new Common.SlimSidebarAnimate();
this.slimMenuAnimate = new Common.SlimMenuAnimate();
this.sidebarEntryAnimate.assignParentElement(this.sidebarRef.current);
this.slimSidebarAnimate.assignParentElement(this.sidebarRef.current);
this.slimMenuAnimate.assignSidebarElement(this.sidebarRef.current);
this.sidebarEntryAnimate.executeAnimation()
.then(() => {
this.setState({ entryAnimationFinished: true });
});
}
componentWillUnmount() {
this.sidebarEntryAnimate.destroy();
this.slimSidebarAnimate.destroy();
this.slimMenuAnimate.destroy();
}
render() {
const {
animationsDisabled,
collapsed,
pageConfig,
slim,
children,
} = this.props;
const sidebarClass = classNames('sidebar', 'sidebar--animations-enabled', {
'sidebar--slim': slim || pageConfig.sidebarSlim,
'sidebar--collapsed': collapsed || pageConfig.sidebarCollapsed,
'sidebar--animations-disabled': animationsDisabled || pageConfig.animationsDisabled,
'sidebar--animate-entry-complete': this.state.entryAnimationFinished,
});
return (
<div className={ sidebarClass } ref={ this.sidebarRef }>
{ children }
</div>
);
}
}