@gem-mine/durex-router
Version:
router for @gem-mine/durex
119 lines (89 loc) • 3.83 kB
JavaScript
;
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
);
}