in extensions/navigation/src/native-common/NavigatorExperimentalDelegate.tsx [126:184]
private _buildTransitionSpec(state: Navigation.NavigationState): TransitionSpec {
const route = (state.routes[state.index] as NavigationRouteState).route;
let direction: Navigation.NavigationGestureDirection = 'horizontal';
let customSceneConfig: Navigation.NavigationCustomTransitionConfig | undefined;
let enableGesture = false;
let responseDistance = 0;
const hideShadow = route && route.customSceneConfig && route.customSceneConfig.hideShadow;
const cardStyle: RX.Types.ViewStyleRuleSet | undefined = route && route.customSceneConfig
? route.customSceneConfig.cardStyle
: undefined;
let gestureDistanceSet = false;
if (route) {
// If defined, use the gestureResponseDistance override
if (route.gestureResponseDistance !== undefined && route.gestureResponseDistance !== null) {
responseDistance = route.gestureResponseDistance;
gestureDistanceSet = true;
}
customSceneConfig = this._convertCustomTransitionConfig(route.customSceneConfig);
switch (route.sceneConfigType) {
case NavigatorSceneConfigType.FloatFromBottom:
direction = 'vertical';
if (!gestureDistanceSet) {
responseDistance = 150;
gestureDistanceSet = true;
}
break;
case NavigatorSceneConfigType.Fade:
case NavigatorSceneConfigType.FadeWithSlide:
direction = 'fade';
if (!gestureDistanceSet) {
responseDistance = 0;
gestureDistanceSet = true;
}
break;
// Currently we support only right to left animation
// case NavigatorSceneConfigType.FloatFromRight:
// case NavigatorSceneConfigType.FloatFromLeft:
default:
break;
}
}
// Fall back to 30 as a default for responseDistance
if (!gestureDistanceSet) {
responseDistance = 30;
}
// Conditionally enable gestures
enableGesture = responseDistance > 0;
return {
enableGesture: enableGesture,
gestureResponseDistance: responseDistance,
direction: direction,
customTransitionConfig: customSceneConfig,
cardStyle: cardStyle,
hideShadow: hideShadow,
};
}