mirror of
https://github.com/kevin-DL/sapper.git
synced 2026-01-18 21:45:12 +00:00
Merge pull request #663 from sveltejs/skipped-segments
Handle skipped segments
This commit is contained in:
@@ -288,14 +288,22 @@ export async function hydrate_target(target: Target): Promise<{
|
|||||||
let l = 1;
|
let l = 1;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
let segment_dirty = false;
|
||||||
branch = await Promise.all(route.parts.map(async (part, i) => {
|
branch = await Promise.all(route.parts.map(async (part, i) => {
|
||||||
|
const segment = segments[i];
|
||||||
|
|
||||||
|
if (current_branch[i] && current_branch[i].segment !== segment) segment_dirty = true;
|
||||||
|
|
||||||
props.segments[l] = segments[i + 1]; // TODO make this less confusing
|
props.segments[l] = segments[i + 1]; // TODO make this less confusing
|
||||||
if (!part) return null;
|
if (!part) return { segment };
|
||||||
|
|
||||||
const j = l++;
|
const j = l++;
|
||||||
|
|
||||||
const segment = segments[i];
|
if (!session_dirty && !segment_dirty && current_branch[i] && current_branch[i].part === part.i) {
|
||||||
if (!session_dirty && current_branch[i] && current_branch[i].segment === segment && current_branch[i].part === part.i) return current_branch[i];
|
return current_branch[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
segment_dirty = false;
|
||||||
|
|
||||||
const { default: component, preload } = await load_component(components[part.i]);
|
const { default: component, preload } = await load_component(components[part.i]);
|
||||||
|
|
||||||
|
|||||||
14
test/apps/basics/src/routes/skipped/[one]/[two].svelte
Normal file
14
test/apps/basics/src/routes/skipped/[one]/[two].svelte
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<script context="module">
|
||||||
|
export function preload({ params }) {
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export let one;
|
||||||
|
export let two;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<h1>{one}:{two}</h1>
|
||||||
|
|
||||||
|
<a href="skipped/y/1">skipped/y/1</a>
|
||||||
@@ -282,7 +282,7 @@ describe('basics', function() {
|
|||||||
assert.equal(await title(), 'bar');
|
assert.equal(await title(), 'bar');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('navigates to ...rest', async () => {
|
it('navigates to ...rest', async () => {
|
||||||
await page.goto(`${base}/abc/xyz`);
|
await page.goto(`${base}/abc/xyz`);
|
||||||
await start();
|
await start();
|
||||||
|
|
||||||
@@ -298,8 +298,8 @@ describe('basics', function() {
|
|||||||
await page.evaluate(() => document.body.textContent),
|
await page.evaluate(() => document.body.textContent),
|
||||||
'xyz,abc,qwe'
|
'xyz,abc,qwe'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('navigates between dynamic routes with same segments', async () => {
|
it('navigates between dynamic routes with same segments', async () => {
|
||||||
await page.goto(`${base}/dirs/bar/xyz`);
|
await page.goto(`${base}/dirs/bar/xyz`);
|
||||||
await start();
|
await start();
|
||||||
@@ -310,7 +310,7 @@ describe('basics', function() {
|
|||||||
await wait(50);
|
await wait(50);
|
||||||
assert.equal(await title(), 'B page');
|
assert.equal(await title(), 'B page');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('runs server route handlers before page handlers, if they match', async () => {
|
it('runs server route handlers before page handlers, if they match', async () => {
|
||||||
const json = await get(`${base}/middleware`, {
|
const json = await get(`${base}/middleware`, {
|
||||||
headers: {
|
headers: {
|
||||||
@@ -324,4 +324,18 @@ describe('basics', function() {
|
|||||||
|
|
||||||
assert.ok(html.body.indexOf('<h1>HTML</h1>') !== -1);
|
assert.ok(html.body.indexOf('<h1>HTML</h1>') !== -1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('invalidates page when a segment is skipped', async () => {
|
||||||
|
await page.goto(`${base}/skipped/x/1`);
|
||||||
|
await start();
|
||||||
|
await prefetchRoutes();
|
||||||
|
|
||||||
|
await page.click('a[href="skipped/y/1"]');
|
||||||
|
await wait(50);
|
||||||
|
|
||||||
|
assert.equal(
|
||||||
|
await title(),
|
||||||
|
'y:1'
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user