import React from 'react';
import ReactDOM from 'react-dom';
import ContentHeader from '../content-header/content-header.jsx';
import PropTypes from 'prop-types';
class ContentWrapper extends React.Component {
constructor(props) {
super(props);
this.updateWindowState = this.updateWindowState.bind(this);
this.compensateResizedView = this.compensateResizedView.bind(this);
}
updateWindowState() {
this.compensateResizedView();
}
compensateResizedView() {
const appWrapper = document.getElementsByClassName('wrapper')[0];
const header = document.getElementsByClassName('main-header')[0] || { offsetHeight: 0 };
const thisWrapper = ReactDOM.findDOMNode(this);
const footer = document.getElementsByClassName('main-footer')[0] || { offsetHeight: 0 };
thisWrapper.style.paddingTop = `${header.offsetHeight}px`;
if (thisWrapper.offsetHeight <= appWrapper.offsetHeight - footer.offsetHeight) {
thisWrapper.style.minHeight = `${window.innerHeight - footer.offsetHeight}px`;
}
}
componentDidMount() {
this.compensateResizedView();
window.addEventListener('resize', this.updateWindowState);
}
componentWillUnmount() {
window.removeEventListener('resize', this.updateWindowState);
}
render() {
return (
<div className="content-wrapper">
<ContentHeader
heading={this.props.heading}
subheading={this.props.subheading}
breadcrumbs={this.props.breadcrumbs}
/>
<section className="content body">
{this.props.children}
</section>
</div>
);
}
}
ContentWrapper.propTypes = {
heading: PropTypes.oneOfType([
PropTypes.string,
PropTypes.element
]),
subheading: PropTypes.oneOfType([
PropTypes.string,
PropTypes.element
]),
breadcrumbs: PropTypes.bool
};
ContentWrapper.defaultProps = {
heading: '',
subheading: '',
breadcrumbs: false
};
export default ContentWrapper;
|