]> git.ipfire.org Git - thirdparty/vuejs/router.git/commitdiff
chore: add sample go to playground
authorEduardo San Martin Morote <posva13@gmail.com>
Fri, 11 Sep 2020 16:40:30 +0000 (18:40 +0200)
committerEduardo San Martin Morote <posva13@gmail.com>
Fri, 11 Sep 2020 16:40:30 +0000 (18:40 +0200)
playground/router.ts

index 6e6e713844fc6185e3b7dbab4b16dbff1adcd7b0..9a2a32b7526f9f350638a4ffc675467de8b08ed9 100644 (file)
@@ -207,6 +207,44 @@ router.afterEach((to, from) => {
   // )
 })
 
+export function go(delta: number) {
+  return new Promise((resolve, reject) => {
+    function popStateListener() {
+      clearTimeout(timeout)
+    }
+    window.addEventListener('popstate', popStateListener)
+
+    function clearHooks() {
+      removeAfterEach()
+      removeOnError()
+      window.removeEventListener('popstate', popStateListener)
+    }
+
+    // if the popstate event is not called, consider this a failure
+    const timeout = setTimeout(() => {
+      clearHooks()
+      reject(new Error('Failed to use router.go()'))
+      // using 0 leads to false positives
+    }, 1)
+
+    setImmediate
+
+    const removeAfterEach = router.afterEach((_to, _from, failure) => {
+      clearHooks()
+      resolve(failure)
+    })
+    const removeOnError = router.onError(err => {
+      clearHooks()
+      reject(err)
+    })
+
+    router.go(delta)
+  })
+}
+
+// @ts-ignore
+window._go = go
+
 router.beforeEach((to, from, next) => {
   // console.log('second guard')
   if (to.query.to) next(to.query.to as string)