Skip to content

Commit a72e136

Browse files
authored
Ensure history navigation is correct after query update (#38086)
1 parent edf4ea3 commit a72e136

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

packages/next/shared/lib/router/router.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -903,6 +903,8 @@ export default class Router implements BaseRouter {
903903
Object.assign<{}, TransitionOptions, TransitionOptions>({}, options, {
904904
shallow: options.shallow && this._shallow,
905905
locale: options.locale || this.defaultLocale,
906+
// @ts-ignore internal value not exposed on types
907+
_h: 0,
906908
}),
907909
forcedScroll
908910
)

test/e2e/middleware-rewrites/test/index.test.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,23 @@ describe('Middleware Rewrite', () => {
5050
}, /Welcome Page A/)
5151
})
5252

53+
it('should rewrite correctly when navigating via history after query update', async () => {
54+
const browser = await webdriver(next.url, '/')
55+
await browser.elementByCss('#override-with-internal-rewrite').click()
56+
await check(() => {
57+
return browser.eval('document.documentElement.innerHTML')
58+
}, /Welcome Page A/)
59+
60+
await browser.refresh()
61+
await browser.waitForCondition(`!!window.next.router.isReady`)
62+
await browser.back()
63+
await browser.waitForElementByCss('#override-with-internal-rewrite')
64+
await browser.forward()
65+
await check(() => {
66+
return browser.eval('document.documentElement.innerHTML')
67+
}, /Welcome Page A/)
68+
})
69+
5370
it('should return HTML/data correctly for pre-rendered page', async () => {
5471
for (const slug of [
5572
'first',

test/integration/production/test/index.test.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,26 @@ describe('Production Usage', () => {
6868
await killApp(app)
6969
})
7070

71+
it('should navigate through history after query update', async () => {
72+
const browser = await webdriver(appPort, '/')
73+
await browser.eval('window.next.router.push("/about?a=b")')
74+
await browser.waitForElementByCss('.about-page')
75+
await browser.waitForCondition(`!!window.next.router.isReady`)
76+
77+
await browser.refresh()
78+
await browser.waitForCondition(`!!window.next.router.isReady`)
79+
await browser.back()
80+
await browser.waitForElementByCss('.index-page')
81+
await browser.forward()
82+
await browser.waitForElementByCss('.about-page')
83+
await browser.back()
84+
await browser.waitForElementByCss('.index-page')
85+
await browser.refresh()
86+
await browser.waitForCondition(`!!window.next.router.isReady`)
87+
await browser.forward()
88+
await browser.waitForElementByCss('.about-page')
89+
})
90+
7191
it('should not show target deprecation warning', () => {
7292
expect(output).not.toContain(
7393
'The `target` config is deprecated and will be removed in a future version'

0 commit comments

Comments
 (0)