123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- "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 <BareNavigator
- navigation={{dispatch, state: navigationState, addListener}}
- />;
- }
- }
- 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());
- }
- },
- };
|