diff --git a/src/Navigation.js b/src/Navigation.js index 3258dccea72..1d7408bdb93 100644 --- a/src/Navigation.js +++ b/src/Navigation.js @@ -3,6 +3,12 @@ import platformSpecific from './platformSpecific'; import Screen from './Screen'; const registeredScreens = {}; +const _routeResolver = null; + +function resolveRoute(params) { + if (!_routeResolver) return params; + return _routeResolver(params); +} function registerScreen(screenID, generator) { registeredScreens[screenID] = generator; @@ -67,12 +73,23 @@ function dismissModal(params = {}) { return platformSpecific.dismissModal(params); } +function startTabBasedApp(params) { + if (params.routeResolver) _routeResolver = params.routeResolver; + return platformSpecific.startTabBasedApp(params); +} + +function startSingleScreenApp(params) { + if (params.routeResolver) _routeResolver = params.routeResolver; + return platformSpecific.startSingleScreenApp(params); +} + export default { + resolveRoute, registerScreen, getRegisteredScreen, registerComponent, showModal, dismissModal, - startTabBasedApp: platformSpecific.startTabBasedApp, - startSingleScreenApp: platformSpecific.startSingleScreenApp + startTabBasedApp, + startSingleScreenApp } diff --git a/src/Screen.js b/src/Screen.js index 27370f91303..ffb44077ceb 100644 --- a/src/Screen.js +++ b/src/Screen.js @@ -12,31 +12,31 @@ class Navigator { this.navigatorEventSubscription = null; } push(params = {}) { - return platformSpecific.navigatorPush(this, params); + return platformSpecific.navigatorPush(this, Navigation.resolveRoute(params)); } pop(params = {}) { - return platformSpecific.navigatorPop(this, params); + return platformSpecific.navigatorPop(this, Navigation.resolveRoute(params)); } popToRoot(params = {}) { - return platformSpecific.navigatorPopToRoot(this, params); + return platformSpecific.navigatorPopToRoot(this, Navigation.resolveRoute(params)); } resetTo(params = {}) { - return platformSpecific.navigatorResetTo(this, params); + return platformSpecific.navigatorResetTo(this, Navigation.resolveRoute(params)); } showModal(params = {}) { - return Navigation.showModal(params); + return Navigation.showModal(Navigation.resolveRoute(params)); } dismissModal(params = {}) { - return Navigation.dismissModal(params); + return Navigation.dismissModal(Navigation.resolveRoute(params)); } setButtons(params = {}) { - return platformSpecific.navigatorSetButtons(this, this.navigatorEventID, params); + return platformSpecific.navigatorSetButtons(this, this.navigatorEventID, Navigation.resolveRoute(params)); } setTitle(params = {}) { - return platformSpecific.navigatorSetTitle(this, params); + return platformSpecific.navigatorSetTitle(this, Navigation.resolveRoute(params)); } toggleDrawer(params = {}) { - return platformSpecific.navigatorToggleDrawer(this, params); + return platformSpecific.navigatorToggleDrawer(this, Navigation.resolveRoute(params)); } setOnNavigatorEvent(callback) { this.navigatorEventHandler = callback;