Fix the redundant navigation error (#2286)

* Fix the redundant navigation error

* Fix the redundant navigation error for the profile selector settings button

* Wrap router push in function that prevents redundant navigation

* Improve duplicate route detection

Co-authored-by: PikachuEXE <pikachuexe@gmail.com>

* Remove unused function

Co-authored-by: PikachuEXE <pikachuexe@gmail.com>
This commit is contained in:
absidue 2022-06-21 04:29:39 +02:00 committed by GitHub
parent 8d816ed2fe
commit 5643419131
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 35 additions and 3 deletions

View File

@ -14,9 +14,41 @@ import Playlist from '../views/Playlist/Playlist.vue'
import Channel from '../views/Channel/Channel.vue' import Channel from '../views/Channel/Channel.vue'
import Watch from '../views/Watch/Watch.vue' import Watch from '../views/Watch/Watch.vue'
Vue.use(Router) class CustomRouter extends Router {
push(location) {
// only navigates if the location is not identical to the current location
const router = new Router({ const currentQueryUSP = new URLSearchParams(router.currentRoute.query)
let newPath = ''
let newQueryUSP = new URLSearchParams()
if (typeof location === 'string') {
if (location.includes('?')) {
const urlParts = location.split('?')
newPath = urlParts[0]
newQueryUSP = new URLSearchParams(urlParts[1])
} else {
newPath = location
// newQueryUSP already empty
}
} else {
newPath = location.path
newQueryUSP = new URLSearchParams(location.query)
}
const pathsAreDiff = router.currentRoute.path !== newPath
// Comparing `URLSearchParams` objects directly will always be different
const queriesAreDiff = newQueryUSP.toString() !== currentQueryUSP.toString()
if (pathsAreDiff || queriesAreDiff) {
return super.push(location)
}
}
}
Vue.use(CustomRouter)
const router = new CustomRouter({
routes: [ routes: [
{ {
path: '/', path: '/',