// @flow import * as React from 'react'; import {Container, Right} from "native-base"; import CustomHeader from "./CustomHeader"; import CustomSideMenu from "./CustomSideMenu"; import CustomMaterialIcon from "./CustomMaterialIcon"; import {Platform, View} from "react-native"; import ThemeManager from "../utils/ThemeManager"; import Touchable from "react-native-platform-touchable"; type Props = { navigation: Object, headerTitle: string, headerRightButton: React.Node, children: React.Node, hasTabs: boolean, hasBackButton: boolean, hasSideMenu: boolean, isHeaderVisible: boolean } type State = { isOpen: boolean } export default class BaseContainer extends React.Component { willBlurSubscription: function; static defaultProps = { headerRightButton: , hasTabs: false, hasBackButton: false, hasSideMenu: true, isHeaderVisible: true, }; state = { isOpen: false, }; toggle() { this.setState({ isOpen: !this.state.isOpen, }); } updateMenuState(isOpen: boolean) { this.setState({isOpen}); } /** * Register for blur event to close side menu on screen change */ componentDidMount() { this.willBlurSubscription = this.props.navigation.addListener( 'willBlur', payload => { this.setState({isOpen: false}); } ); } /** * Unregister from event when un-mounting components */ componentWillUnmount() { if (this.willBlurSubscription !== undefined) this.willBlurSubscription.remove(); } getMainContainer() { return ( this.toggle()}> } rightButton={this.props.headerRightButton} hasTabs={this.props.hasTabs} hasBackButton={this.props.hasBackButton}/> {this.props.children} ); } render() { if (this.props.isHeaderVisible) { return ( {this.props.hasSideMenu ? this.updateMenuState(isOpen)}> {this.getMainContainer()} : this.getMainContainer()} ); } else { return ( {this.props.children} ); } } }