UNPKG

@gem-mine/durex-router

Version:

router for @gem-mine/durex

119 lines (89 loc) 3.83 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.config = undefined; var _from = require('babel-runtime/core-js/array/from'); var _from2 = _interopRequireDefault(_from); var _iterator = require('babel-runtime/core-js/symbol/iterator'); var _iterator2 = _interopRequireDefault(_iterator); var _symbol = require('babel-runtime/core-js/symbol'); var _symbol2 = _interopRequireDefault(_symbol); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; }; exports.createHistory = createHistory; exports.default = Router; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _history2 = require('history'); var _connectedReactRouter = require('connected-react-router'); var _durex = require('@gem-mine/durex'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return (0, _from2.default)(arr); } } var history = null; /** * @param opts: hash/browser/memory/{mode: hash/browser/memory, basename:} * @returns History */ function createHistory(opts) { // 兼容历史错误,opts 应该是个对象,但中间版本是 string,导致路由模式只能是 hash var mode = (typeof opts === 'undefined' ? 'undefined' : _typeof(opts)) === 'object' ? opts.mode : opts; if (!history) { var type = mode || 'hash'; if (['hash', 'memory', 'browser'].indexOf(type) === -1) { console.error('mode should be one of hash/memory/browser'); } else { var historyModes = { browser: _history2.createBrowserHistory, hash: _history2.createHashHistory, memory: _history2.createMemoryHistory }; history = historyModes[type](opts); } (0, _durex.addMiddleware)(routerMiddleware()); (0, _durex.addReducer)({ router: (0, _connectedReactRouter.connectRouter)(history) }); } return history; } /** * `createHistory(opts)` alias `router.config(opts)` */ var config = exports.config = createHistory; function routerMiddleware() { return function (_ref) { var getState = _ref.getState, dispatch = _ref.dispatch; // Add `push`, `replace`, `go`, `goForward` and `goBack` methods to actions.routing, // when called, will dispatch the crresponding action provided by react-router-redux. _durex.actions.router = (0, _keys2.default)(_connectedReactRouter.routerActions).reduce(function (memo, action) { memo[action] = function () { dispatch(_connectedReactRouter.routerActions[action].apply(_connectedReactRouter.routerActions, arguments)); }; return memo; }, {}); return function (next) { return function (action) { var _history; if (action.type !== _connectedReactRouter.CALL_HISTORY_METHOD) { return next(action); } var _action$payload = action.payload, method = _action$payload.method, args = _action$payload.args; (_history = history)[method].apply(_history, _toConsumableArray(args)); }; }; }; } function Router(_ref2) { var children = _ref2.children; // ConnectedRouter will use the store from Provider automatically return _react2.default.createElement( _connectedReactRouter.ConnectedRouter, { history: history }, children ); }