"use strict"; import React, {Component} from 'react'; import {createReactNavigationReduxMiddleware, createReduxBoundAddListener} from 'react-navigation-redux-helpers'; import {connect} from 'react-redux'; export const navigatorPieces = (BareNavigator, name = "root") => { const middleware = createReactNavigationReduxMiddleware(name, x => x); const addListener = createReduxBoundAddListener(name); const reducer = (state, action) => BareNavigator.router.getStateForAction(action, state); class Navigator extends Component { render () { const {dispatch, navigationState} = this.props; return ; } } return {Navigator, reducer, middleware}; }; export const connectNavigator = selectorFn => connect(state => ({navigationState: selectorFn(state)})); import {NavigationActions, StackActions} from 'react-navigation'; const {navigate, back} = NavigationActions; const {reset} = StackActions; export const backButtonHandler = ({dispatch, getState}) => { if (getState().index === 0) return false; dispatch(back()); return true; }; export const navigationHelpers = { topOfNavigationStack: ({routes}) => routes[routes.length - 1] || {}, resetRoutes: routeNames => reset({ actions: routeNames.map(routeName => navigate({routeName})), index: routeNames.length - 1 }), isRoute: expected => ({routeName}) => routeName === expected, isTopRoute: expected => state => isRoute(expected)(topOfNavigationStack(state)), goBackFrom: routeName => ({dispatch, getState}) => { if (isTopRoute(routeName)(getState())) { dispatch(back()); } }, };