Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/fix-page-state-invalidate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@sveltejs/kit': patch
---

fix: preserve `$page.state` when calling `invalidate` or `invalidateAll`
2 changes: 1 addition & 1 deletion packages/kit/src/runtime/client/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@ export async function start(_app, _target, hydrate) {
_start_router();
}

async function _invalidate(include_load_functions = true, reset_page_state = true) {
async function _invalidate(include_load_functions = true, reset_page_state = false) {
// Accept all invalidations as they come, don't swallow any while another invalidation
// is running because subsequent invalidations may make earlier ones outdated,
// but batch multiple synchronous invalidations.
Expand Down
15 changes: 15 additions & 0 deletions packages/kit/test/apps/basics/test/client.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1615,6 +1615,21 @@
await expect(page.locator('span')).not.toHaveText(now);
});

test('Preserves page state when invalidating', async ({ page }) => {
await page.goto('/shallow-routing/push-state');
await expect(page.locator('p')).toHaveText('active: false');

await page.locator('[data-id="one"]').click();
await expect(page.locator('p')).toHaveText('active: true');

const now = /** @type {string} */ (await page.locator('span').textContent());

await page.locator('[data-id="invalidate"]').click();
await expect(page.locator('span')).not.toHaveText(now);
// page.state should be preserved after invalidation (#11783)
await expect(page.locator('p')).toHaveText('active: true');
});

test('Does not navigate when going back to shallow route', async ({ baseURL, page }) => {
await page.goto('/shallow-routing/push-state');
await page.locator('[data-id="two"]').click();
Expand Down Expand Up @@ -1666,7 +1681,7 @@
await page.locator('button').click();
await expect(page.locator('p')).toHaveText('count: 1');
});

Check warning on line 1684 in packages/kit/test/apps/basics/test/client.test.js

View workflow job for this annotation

GitHub Actions / test-kit-server-side-route-resolution (dev)

flaky test: reroute does not get applied to external URLs

retries: 2
test('replaceState does not loop infinitely in $effect', async ({ page }) => {
await page.goto('/shallow-routing/replace-state/effect');
await expect(page.locator('p')).toHaveText('count: 0');
Expand Down Expand Up @@ -1719,7 +1734,7 @@
await page.goto('/reroute/preload-data');
await page.click('button');
await page.waitForSelector('pre');
expect(await page.textContent('pre')).toContain('"success": true');

Check warning on line 1737 in packages/kit/test/apps/basics/test/client.test.js

View workflow job for this annotation

GitHub Actions / test-kit-server-side-route-resolution (build)

flaky test: does not block next paint

retries: 2
});

test('reroute does not get applied to external URLs', async ({ page }) => {
Expand Down
Loading