UNPKG

hc-materials

Version:

基于react的通用组件库

133 lines (101 loc) 4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RouteHelper = void 0; var _propTypes = _interopRequireDefault(require("prop-types")); var _url = _interopRequireDefault(require("url")); var _qs = _interopRequireDefault(require("qs")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var RouteHelper = /*#__PURE__*/ function () { function RouteHelper(context) { var _this = this; _classCallCheck(this, RouteHelper); this.history = context.history; this._fns = []; this.location = this.history.location; this.applyChange(null, location.pathname + location.search + location.hash); this.history.listen(function (location) { _this.location = location; _this.applyChange(null, location.pathname + location.search + location.hash); }); } _createClass(RouteHelper, [{ key: "replace", value: function replace(query) { var url = this.location.pathname + this.location.search + this.location.hash; var u = _url["default"].parse(url, true); u.search = _qs["default"].stringify(_extends(u.query || {}, query)); delete u.query; this.history.replace(_url["default"].format(u)); } }, { key: "push", value: function push(url, query, force) { if (!url) { url = this.location.pathname; } // 解析url,并把queryStr解析为object if (Object(url) === url) { url = url.pathname + url.search + url.hash; } if (query) { var u = _url["default"].parse(url, true); u.search = _qs["default"].stringify(_extends(u.query || {}, query)); delete u.query; url = _url["default"].format(u); } // 得到最后的url this.history.push(url, force ? query : this.location.state); } }, { key: "watch", value: function watch(watcher, callback) { this._fns.push({ watcher: watcher, callback: callback }); } }, { key: "unwatch", value: function unwatch(watcher) { var index = this._fns.findIndex(function (cfg) { return cfg.watcher === watcher; }); this._fns.splice(index, 1); } }, { key: "applyChange", value: function applyChange(query, url) { var newState = {}; if (url) { var u = _url["default"].parse(url, true); _extends(newState, u.query); } if (query) { _extends(newState, query); } try { var cfg; for (var i = 0, len = this._fns.length; i < len; i++) { cfg = this._fns[i]; if (cfg.watcher(newState, this.state)) { cfg.callback(newState); } } } catch (e) { window.console.error(e); } this.state = newState; } }]); return RouteHelper; }(); exports.RouteHelper = RouteHelper; RouteHelper.contextTypes = { history: _propTypes["default"].object.isRequired };