import React from 'react' import PropTypes from 'prop-types' import Backdrop from '../backdrop' import Header from './sub-components/header' import Nav from './sub-components/nav' import Aside from './sub-components/aside' import Main from './sub-components/main' import HeaderNav from './sub-components/header-nav' import NavLogoItem from './sub-components/nav-logo-item' import NavItem from './sub-components/nav-item' class Layout extends React.Component { constructor(props) { super(props); let currentModule = null, isolateModules = [], mainModules = [], totalNotifications = 0, item = null; for (let i=0, l=props.availableModules.length; i 0 || !!props.asideContent, isHeaderNavAvailable = isolateModules.length > 0 || !!props.currentUser, isHeaderAvailable = mainModules.length > 0, isNavAvailable = mainModules.length > 0, isAsideAvailable = !!props.asideContent; this.state = { isBackdropAvailable: isBackdropAvailable, isHeaderNavAvailable: isHeaderNavAvailable, isHeaderAvailable: isHeaderAvailable, isNavAvailable: isNavAvailable, isAsideAvailable: isAsideAvailable, isBackdropVisible: props.isBackdropVisible, isNavHoverEnabled: props.isNavHoverEnabled, isNavOpened: props.isNavOpened, isAsideVisible: props.isAsideVisible, onLogoClick: props.onLogoClick, asideContent: props.asideContent, currentUser: props.currentUser, currentUserActions: props.currentUserActions, availableModules: props.availableModules, isolateModules: isolateModules, mainModules: mainModules, currentModule: currentModule, currentModuleId: props.currentModuleId, totalNotifications: totalNotifications }; }; backdropClick = () => { this.setState({ isBackdropVisible: false, isNavOpened: false, isAsideVisible: false, isNavHoverEnabled: !this.state.isNavHoverEnabled }); }; showNav = () => { this.setState({ isBackdropVisible: true, isNavOpened: true, isAsideVisible: false, isNavHoverEnabled: false }); }; handleNavHover = () => { if(!this.state.isNavHoverEnabled) return; this.setState({ isBackdropVisible: false, isNavOpened: !this.state.isNavOpened, isAsideVisible: false }); } toggleAside = () => { this.setState({ isBackdropVisible: true, isNavOpened: false, isAsideVisible: true, isNavHoverEnabled: false }); }; render() { return ( <> { this.state.isBackdropAvailable && } { this.state.isHeaderNavAvailable && } { this.state.isHeaderAvailable &&
} { this.state.isNavAvailable && } { this.state.isAsideAvailable && }
{this.props.children}
); } } Layout.propTypes = { isBackdropVisible: PropTypes.bool, isNavHoverEnabled: PropTypes.bool, isNavOpened: PropTypes.bool, isAsideVisible: PropTypes.bool, onLogoClick: PropTypes.func, asideContent: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]), currentUser: PropTypes.object, currentUserActions: PropTypes.array, availableModules: PropTypes.array, currentModuleId: PropTypes.string } Layout.defaultProps = { isBackdropVisible: false, isNavHoverEnabled: true, isNavOpened: false, isAsideVisible: false, currentUser: null, currentUserActions: [], availableModules: [], } export default Layout