mirror of https://github.com/rancher/dashboard.git
81 lines
2.5 KiB
JavaScript
81 lines
2.5 KiB
JavaScript
// import VueRouter from 'vue-router';
|
|
import isEqual from 'lodash/isEqual';
|
|
import { queryParamsFor } from '@shell/utils/router';
|
|
|
|
// We're consuming the errors of the push and replace functions based on this comment:
|
|
// https://github.com/vuejs/vue-router/issues/2881#issuecomment-520554378
|
|
|
|
// const originalPush = VueRouter.prototype.push;
|
|
|
|
// VueRouter.prototype.push = function push(location, onResolve, onReject) {
|
|
// if (onResolve || onReject) {
|
|
// return originalPush.call(this, location, onResolve, onReject);
|
|
// }
|
|
|
|
// return originalPush?.call(this, location)?.catch((err) => {
|
|
// if (VueRouter.isNavigationFailure(err)) {
|
|
// // If there really is an error, throw it
|
|
// return Promise.reject(err);
|
|
// }
|
|
|
|
// // Otherwise resolve to false to indicate the original push call didn't go to its original destination.
|
|
// return Promise.resolve(false);
|
|
// });
|
|
// };
|
|
|
|
// const originalReplace = VueRouter.prototype.replace;
|
|
|
|
// VueRouter.prototype.replace = function replace(location, onResolve, onReject) {
|
|
// if (onResolve || onReject) {
|
|
// return originalReplace.call(this, location, onResolve, onReject);
|
|
// }
|
|
|
|
// return originalReplace.call(this, location).catch((err) => {
|
|
// if (VueRouter.isNavigationFailure(err)) {
|
|
// // resolve err
|
|
// return err;
|
|
// }
|
|
|
|
// // rethrow error
|
|
// return Promise.reject(err);
|
|
// });
|
|
// };
|
|
|
|
// VueRouter.prototype.applyQuery = function(qp, defaults = {}) {
|
|
// const query = queryParamsFor(this.currentRoute.query, qp, defaults);
|
|
// const hash = this.currentRoute.hash || '';
|
|
|
|
// if ( isEqual(query, this.currentRoute.query) ) {
|
|
// return;
|
|
// }
|
|
|
|
// return this.replace({ query, hash }).catch((err) => {
|
|
// if ( err?.name === 'NavigationDuplicated' ) {
|
|
// // Do nothing, this is fine...
|
|
// // https://github.com/vuejs/vue-router/issues/2872
|
|
// } else {
|
|
// throw err;
|
|
// }
|
|
// });
|
|
// };
|
|
|
|
export const extendRouter = (router) => {
|
|
router.applyQuery = function(qp, defaults = {}) {
|
|
const query = queryParamsFor(router.currentRoute.value.query, qp, defaults);
|
|
const hash = router.currentRoute.value.hash || '';
|
|
|
|
if (isEqual(query, router.currentRoute.value.query)) {
|
|
return;
|
|
}
|
|
|
|
return router.replace({ query, hash }).catch((err) => {
|
|
if (err && err.name === 'NavigationDuplicated') {
|
|
// Do nothing, this is fine...
|
|
// https://github.com/vuejs/vue-router/issues/2872
|
|
} else {
|
|
throw err;
|
|
}
|
|
});
|
|
};
|
|
};
|