12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- "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 <BareNavigator
- ref={refNavigator}
- onNavigationStateChange={refState}
- />;
- }
- }
- 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};
- };
|