"use strict"; import React, {Component} from 'react'; import {NavigationActions, StackActions} from 'react-navigation'; export default BareNavigator => { let navigator, state; const refNavigator = me => navigator = me; const refState = (prevState, newState) => state = newState; class Navigator extends Component { render () { return ; } } const {navigate, back} = NavigationActions; const {reset} = StackActions; const topOfNavigationStack = () => state.routes[state.routes.length - 1] || {}; const isRoute = expected => ({routeName}) => routeName === expected; const isTopRoute = expected => isRoute(expected)(topOfNavigationStack()); const navigationHelpers = { topOfNavigationStack, navigate: (...args) => navigator.dispatch(navigate(...args)), back: (...args) => navigator.dispatch(back(...args)), reset: (...args) => navigator.dispatch(reset(...args)), resetRoutes: routeNames => navigator.dispatch(reset({ actions: routeNames.map(routeName => navigate({routeName})), index: routeNames.length - 1 })), isRoute, isTopRoute, goBackFrom: routeName => { if (isTopRoute(routeName)) { navigator.dispatch(back()); } }, }; return {Navigator, navigationHelpers}; };