connected-next-router
Version:
A Redux binding for Next.js Router
37 lines (36 loc) • 1.27 kB
JavaScript
import ReactDOM from 'react-dom';
import { onLocationChanged } from './actions';
import locationFromUrl from './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) {
ReactDOM.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(onLocationChanged(locationFromUrl(Router.asPath)));
});
});
});
return function () {
Reflect.set(Router.router, 'set', unpatchedMethods.set);
};
};
export default patchRouter;