UNPKG

redux-router5

Version:

Router5 integration with redux

225 lines (209 loc) 7.56 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var router5TransitionPath = require('router5-transition-path'); var NAVIGATE_TO = '@@router5/NAVIGATE'; var CANCEL_TRANSITION = '@@router5/CANCEL'; var TRANSITION_ERROR = '@@router5/TRANSITION_ERROR'; var TRANSITION_SUCCESS = '@@router5/TRANSITION_SUCCESS'; var TRANSITION_START = '@@router5/TRANSITION_START'; var CLEAR_ERRORS = '@@router5/CLEAR_ERRORS'; var CAN_DEACTIVATE = '@@router5/CAN_DEACTIVATE'; var CAN_ACTIVATE = '@@router5/CAN_ACTIVATE'; var actionTypes = /*#__PURE__*/Object.freeze({ __proto__: null, NAVIGATE_TO: NAVIGATE_TO, CANCEL_TRANSITION: CANCEL_TRANSITION, TRANSITION_ERROR: TRANSITION_ERROR, TRANSITION_SUCCESS: TRANSITION_SUCCESS, TRANSITION_START: TRANSITION_START, CLEAR_ERRORS: CLEAR_ERRORS, CAN_DEACTIVATE: CAN_DEACTIVATE, CAN_ACTIVATE: CAN_ACTIVATE }); function navigateTo(name, params, opts) { if (opts === void 0) { opts = {}; } return { type: NAVIGATE_TO, payload: { name: name, params: params, opts: opts } }; } function cancelTransition() { return { type: CANCEL_TRANSITION }; } function clearErrors() { return { type: CLEAR_ERRORS }; } function transitionStart(route, previousRoute) { return { type: TRANSITION_START, payload: { route: route, previousRoute: previousRoute } }; } function transitionSuccess(route, previousRoute) { return { type: TRANSITION_SUCCESS, payload: { route: route, previousRoute: previousRoute } }; } function transitionError(route, previousRoute, transitionError) { return { type: TRANSITION_ERROR, payload: { route: route, previousRoute: previousRoute, transitionError: transitionError } }; } function canActivate(name, canActivate) { return { type: CAN_ACTIVATE, payload: { name: name, canActivate: canActivate } }; } function canDeactivate(name, canDeactivate) { return { type: CAN_DEACTIVATE, payload: { name: name, canDeactivate: canDeactivate } }; } var actions = /*#__PURE__*/Object.freeze({ __proto__: null, navigateTo: navigateTo, cancelTransition: cancelTransition, clearErrors: clearErrors, transitionStart: transitionStart, transitionSuccess: transitionSuccess, transitionError: transitionError, canActivate: canActivate, canDeactivate: canDeactivate }); function reduxPluginFactory(dispatch) { return function () { return ({ onTransitionStart: function (toState, fromState) { dispatch(transitionStart(toState, fromState)); }, onTransitionSuccess: function (toState, fromState) { dispatch(transitionSuccess(toState, fromState)); }, onTransitionError: function (toState, fromState, err) { dispatch(transitionError(toState, fromState, err)); } }); }; } var router5ReduxMiddleware = function (router) { return function (store) { var dispatch = store.dispatch; router.setDependency('store', store); router.usePlugin(reduxPluginFactory(dispatch)); return function (next) { return function (action) { switch (action.type) { case NAVIGATE_TO: router.navigate(action.payload.name, action.payload.params, action.payload.opts); break; case CANCEL_TRANSITION: router.cancel(); break; case CAN_DEACTIVATE: router.canDeactivate(action.payload.name, action.payload.canDeactivate); break; case CAN_ACTIVATE: router.canActivate(action.payload.name, action.payload.canDeactivate); break; default: return next(action); } }; }; }; }; /*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ var __assign = function() { __assign = Object.assign || function __assign(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var initialState = { route: null, previousRoute: null, transitionRoute: null, transitionError: null }; var router5Reducer = function (state, action) { if (state === void 0) { state = initialState; } if (!action.type) { return state; } switch (action.type) { case TRANSITION_START: return __assign(__assign({}, state), { transitionRoute: action.payload.route, transitionError: null }); case TRANSITION_SUCCESS: return __assign(__assign({}, state), { transitionRoute: null, transitionError: null, previousRoute: action.payload.previousRoute, route: action.payload.route }); case TRANSITION_ERROR: return __assign(__assign({}, state), { transitionRoute: action.payload.route, transitionError: action.payload.transitionError }); case CLEAR_ERRORS: return __assign(__assign({}, state), { transitionRoute: null, transitionError: null }); default: return state; } }; function createRouteNodeSelector(routeNode, reducerKey) { if (reducerKey === void 0) { reducerKey = 'router'; } var routerStateSelector = function (state) { return state[reducerKey] || (state.get && state.get(reducerKey)); }; var lastReturnedValue; return function (state) { var _a = routerStateSelector(state), route = _a.route, previousRoute = _a.previousRoute; var shouldUpdate = !route ? true : router5TransitionPath.shouldUpdateNode(routeNode)(route, previousRoute); if (!lastReturnedValue) { lastReturnedValue = { route: route, previousRoute: previousRoute }; } else if (!previousRoute || (previousRoute !== route && shouldUpdate)) { lastReturnedValue = { route: route, previousRoute: previousRoute }; } return lastReturnedValue; }; } exports.actionTypes = actionTypes; exports.actions = actions; exports.createRouteNodeSelector = createRouteNodeSelector; exports.reduxPlugin = reduxPluginFactory; exports.router5Middleware = router5ReduxMiddleware; exports.router5Reducer = router5Reducer;