55 lines
3.1 KiB
JavaScript
55 lines
3.1 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.NativeBottomTabsRouter = NativeBottomTabsRouter;
|
|
const native_1 = require("@react-navigation/native");
|
|
const navigationParams_1 = require("../navigationParams");
|
|
function NativeBottomTabsRouter(options) {
|
|
const tabRouter = (0, native_1.TabRouter)({ ...options });
|
|
const nativeTabRouter = {
|
|
...tabRouter,
|
|
// @ts-expect-error TODO: For some reason this is not typed correctly
|
|
getStateForAction: (state, action, options) => {
|
|
switch (action.type) {
|
|
case 'NAVIGATE': {
|
|
const newStateFromNavigation = tabRouter.getStateForAction(state, action, options);
|
|
const index = state.routes.findIndex((route) => route.name === action.payload.name);
|
|
if (index === -1 || !newStateFromNavigation) {
|
|
return newStateFromNavigation;
|
|
}
|
|
const newState = {
|
|
...newStateFromNavigation,
|
|
routes: newStateFromNavigation.routes.map((route) => {
|
|
if (route.name !== action.payload.name) {
|
|
return route;
|
|
}
|
|
const expoParams = (0, navigationParams_1.getInternalExpoRouterParams)(action.payload.params);
|
|
if (route.params && 'screen' in route.params) {
|
|
expoParams[navigationParams_1.INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME] = true;
|
|
}
|
|
if (process.env.NODE_ENV !== 'production') {
|
|
if (expoParams[navigationParams_1.INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SOURCE_ID_PARAM_NAME]) {
|
|
console.warn('Zoom transition is not supported when navigating between tabs. Falling back to standard navigation transition.');
|
|
}
|
|
}
|
|
// Zoom transition needs to be disabled for navigation inside tabs
|
|
// Otherwise user can end up in a situation where a view is missing on one tab
|
|
// because it was used to perform zoom transition on another tab
|
|
const params = (0, navigationParams_1.removeParams)((0, navigationParams_1.appendInternalExpoRouterParams)(route.params, expoParams), [
|
|
navigationParams_1.INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SCREEN_ID_PARAM_NAME,
|
|
navigationParams_1.INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SOURCE_ID_PARAM_NAME,
|
|
]);
|
|
return {
|
|
...route,
|
|
params,
|
|
};
|
|
}),
|
|
};
|
|
return newState;
|
|
}
|
|
}
|
|
return tabRouter.getStateForAction(state, action, options);
|
|
},
|
|
};
|
|
return nativeTabRouter;
|
|
}
|
|
//# sourceMappingURL=NativeBottomTabsRouter.js.map
|