import React from 'react'; import { DefaultIonLifeCycleContext, IonLifeCycleContext } from '../contexts/IonLifeCycleContext'; interface ViewTransitionManagerProps { removeView: () => void; mount: boolean; } interface ViewTransitionManagerState { show: boolean; } export class ViewLifeCycleManager extends React.Component { ionLifeCycleContext = new DefaultIonLifeCycleContext(); private _isMounted = false; constructor(props: ViewTransitionManagerProps) { super(props); this.ionLifeCycleContext.onComponentCanBeDestroyed(() => { if (!this.props.mount) { if (this._isMounted) { this.setState({ show: false }, () => this.props.removeView()); } } }); this.state = { show: true }; } componentDidMount() { this._isMounted = true; } componentWillUnmount() { this._isMounted = false; } render() { const { show } = this.state; return ( {show && this.props.children} ); } }