Files
ionic-framework/packages/react/src/routing/ViewLifeCycleManager.tsx
2020-07-07 12:02:05 -05:00

54 lines
1.2 KiB
TypeScript

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<ViewTransitionManagerProps, ViewTransitionManagerState> {
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 (
<IonLifeCycleContext.Provider value={this.ionLifeCycleContext}>
{show && this.props.children}
</IonLifeCycleContext.Provider>
);
}
}