connected-next-router
Version:
A Redux binding for Next.js Router
42 lines (41 loc) • 1.57 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var react_dom_1 = __importDefault(require("react-dom"));
var actions_1 = require("./actions");
var locationFromUrl_1 = __importDefault(require("./utils/locationFromUrl"));
var patchRouter = function (Router, store) {
var unpatchedMethods = {
set: Reflect.get(Router.router, 'set'),
};
Reflect.set(Router.router, 'set', function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (!unpatchedMethods.set) {
return Promise.resolve();
}
return new Promise(function (resolve, reject) {
react_dom_1.default.unstable_batchedUpdates(function () {
try {
var result = Reflect.apply(unpatchedMethods.set, Router.router, args);
if (result instanceof Promise)
result.then(resolve, reject);
else
resolve(result);
}
catch (err) {
reject(err);
}
store.dispatch((0, actions_1.onLocationChanged)((0, locationFromUrl_1.default)(Router.asPath)));
});
});
});
return function () {
Reflect.set(Router.router, 'set', unpatchedMethods.set);
};
};
exports.default = patchRouter;