mirror of
https://github.com/zhigang1992/react-navigation.git
synced 2026-01-28 17:18:46 +08:00
78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
import React from 'react';
|
|
import { NativeModules } from 'react-native';
|
|
|
|
import StackViewLayout from './StackViewLayout';
|
|
import Transitioner from '../Transitioner';
|
|
import StackActions from '../../routers/StackActions';
|
|
import TransitionConfigs from './StackViewTransitionConfigs';
|
|
|
|
const NativeAnimatedModule =
|
|
NativeModules && NativeModules.NativeAnimatedModule;
|
|
|
|
class StackView extends React.Component {
|
|
static defaultProps = {
|
|
navigationConfig: {
|
|
mode: 'card',
|
|
},
|
|
};
|
|
|
|
render() {
|
|
return (
|
|
<Transitioner
|
|
render={this._render}
|
|
configureTransition={this._configureTransition}
|
|
screenProps={this.props.screenProps}
|
|
navigation={this.props.navigation}
|
|
descriptors={this.props.descriptors}
|
|
onTransitionStart={
|
|
this.props.onTransitionStart ||
|
|
this.props.navigationConfig.onTransitionStart
|
|
}
|
|
onTransitionEnd={(transition, lastTransition) => {
|
|
const { navigationConfig, navigation } = this.props;
|
|
const onTransitionEnd =
|
|
this.props.onTransitionEnd || navigationConfig.onTransitionEnd;
|
|
if (transition.navigation.state.isTransitioning) {
|
|
navigation.dispatch(
|
|
StackActions.completeTransition({
|
|
key: navigation.state.key,
|
|
})
|
|
);
|
|
}
|
|
onTransitionEnd && onTransitionEnd(transition, lastTransition);
|
|
}}
|
|
/>
|
|
);
|
|
}
|
|
|
|
_configureTransition = (transitionProps, prevTransitionProps) => {
|
|
return {
|
|
...TransitionConfigs.getTransitionConfig(
|
|
this.props.navigationConfig.transitionConfig,
|
|
transitionProps,
|
|
prevTransitionProps,
|
|
this.props.navigationConfig.mode === 'modal'
|
|
).transitionSpec,
|
|
useNativeDriver: !!NativeAnimatedModule,
|
|
};
|
|
};
|
|
|
|
_render = (transitionProps, lastTransitionProps) => {
|
|
const { screenProps, navigationConfig } = this.props;
|
|
return (
|
|
<StackViewLayout
|
|
{...navigationConfig}
|
|
onGestureBegin={this.props.onGestureBegin}
|
|
onGestureCanceled={this.props.onGestureCanceled}
|
|
onGestureEnd={this.props.onGestureEnd}
|
|
screenProps={screenProps}
|
|
descriptors={this.props.descriptors}
|
|
transitionProps={transitionProps}
|
|
lastTransitionProps={lastTransitionProps}
|
|
/>
|
|
);
|
|
};
|
|
}
|
|
|
|
export default StackView;
|