mirror of
https://github.com/kevin-DL/sapper.git
synced 2026-01-20 14:25:07 +00:00
tidy up
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import { writable } from 'svelte/store';
|
import { writable } from 'svelte/store';
|
||||||
|
|
||||||
export const stores = {
|
export const stores = {
|
||||||
preloading: writable(null),
|
preloading: writable(false),
|
||||||
page: writable(null)
|
page: writable(null)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -95,14 +95,9 @@ export function select_target(url: URL): Target {
|
|||||||
const part = route.parts[route.parts.length - 1];
|
const part = route.parts[route.parts.length - 1];
|
||||||
const params = part.params ? part.params(match) : {};
|
const params = part.params ? part.params(match) : {};
|
||||||
|
|
||||||
return {
|
const page = { path, query, params };
|
||||||
href: url.href,
|
|
||||||
path,
|
return { href: url.href, route, match, page };
|
||||||
route,
|
|
||||||
match,
|
|
||||||
query,
|
|
||||||
params
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -130,11 +125,8 @@ export async function navigate(target: Target, id: number, noscroll?: boolean, h
|
|||||||
|
|
||||||
cid = id;
|
cid = id;
|
||||||
|
|
||||||
if (root_component) {
|
if (root_component) stores.preloading.set(true);
|
||||||
stores.preloading.set({
|
|
||||||
// TODO path, params, query
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const loaded = prefetching && prefetching.href === target.href ?
|
const loaded = prefetching && prefetching.href === target.href ?
|
||||||
prefetching.promise :
|
prefetching.promise :
|
||||||
hydrate_target(target);
|
hydrate_target(target);
|
||||||
@@ -142,18 +134,18 @@ export async function navigate(target: Target, id: number, noscroll?: boolean, h
|
|||||||
prefetching = null;
|
prefetching = null;
|
||||||
|
|
||||||
const token = current_token = {};
|
const token = current_token = {};
|
||||||
const { redirect, page, props, branch } = await loaded;
|
const { redirect, props, branch } = await loaded;
|
||||||
if (token !== current_token) return; // a secondary navigation happened while we were loading
|
if (token !== current_token) return; // a secondary navigation happened while we were loading
|
||||||
|
|
||||||
if (redirect) return goto(redirect.location, { replaceState: true });
|
if (redirect) return goto(redirect.location, { replaceState: true });
|
||||||
|
|
||||||
await render(branch, props, page, scroll_history[id], noscroll, hash);
|
await render(branch, props, target.page, scroll_history[id], noscroll, hash);
|
||||||
if (document.activeElement) document.activeElement.blur();
|
if (document.activeElement) document.activeElement.blur();
|
||||||
}
|
}
|
||||||
|
|
||||||
async function render(branch: any[], props: any, page: Page, scroll: ScrollPosition, noscroll: boolean, hash: string) {
|
async function render(branch: any[], props: any, page: Page, scroll: ScrollPosition, noscroll: boolean, hash: string) {
|
||||||
stores.page.set(page);
|
stores.page.set(page);
|
||||||
stores.preloading.set(null);
|
stores.preloading.set(false);
|
||||||
|
|
||||||
if (root_component) {
|
if (root_component) {
|
||||||
root_component.props = props;
|
root_component.props = props;
|
||||||
@@ -203,11 +195,10 @@ async function render(branch: any[], props: any, page: Page, scroll: ScrollPosit
|
|||||||
export async function hydrate_target(target: Target): Promise<{
|
export async function hydrate_target(target: Target): Promise<{
|
||||||
redirect?: Redirect;
|
redirect?: Redirect;
|
||||||
props?: any;
|
props?: any;
|
||||||
page?: Page;
|
|
||||||
branch?: Array<{ Component: ComponentConstructor, preload: (page) => Promise<any>, segment: string }>
|
branch?: Array<{ Component: ComponentConstructor, preload: (page) => Promise<any>, segment: string }>
|
||||||
}> {
|
}> {
|
||||||
const { route, path, query, params } = target;
|
const { route, page } = target;
|
||||||
const segments = path.split('/').filter(Boolean);
|
const segments = page.path.split('/').filter(Boolean);
|
||||||
|
|
||||||
let redirect: Redirect = null;
|
let redirect: Redirect = null;
|
||||||
let error: { statusCode: number, message: Error | string } = null;
|
let error: { statusCode: number, message: Error | string } = null;
|
||||||
@@ -227,8 +218,8 @@ export async function hydrate_target(target: Target): Promise<{
|
|||||||
|
|
||||||
if (!root_preloaded) {
|
if (!root_preloaded) {
|
||||||
root_preloaded = initial_data.preloaded[0] || root_preload.call(preload_context, {
|
root_preloaded = initial_data.preloaded[0] || root_preload.call(preload_context, {
|
||||||
path,
|
path: page.path,
|
||||||
query,
|
query: page.query,
|
||||||
params: {}
|
params: {}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -248,8 +239,8 @@ export async function hydrate_target(target: Target): Promise<{
|
|||||||
if (ready || !initial_data.preloaded[i + 1]) {
|
if (ready || !initial_data.preloaded[i + 1]) {
|
||||||
preloaded = preload
|
preloaded = preload
|
||||||
? await preload.call(preload_context, {
|
? await preload.call(preload_context, {
|
||||||
path,
|
path: page.path,
|
||||||
query,
|
query: page.query,
|
||||||
params: part.params ? part.params(target.match) : {}
|
params: part.params ? part.params(target.match) : {}
|
||||||
})
|
})
|
||||||
: {};
|
: {};
|
||||||
@@ -266,12 +257,9 @@ export async function hydrate_target(target: Target): Promise<{
|
|||||||
|
|
||||||
if (redirect) return { redirect };
|
if (redirect) return { redirect };
|
||||||
|
|
||||||
const page = { path, query, params };
|
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
// TODO be nice if this was less of a special case
|
// TODO be nice if this was less of a special case
|
||||||
return {
|
return {
|
||||||
page,
|
|
||||||
props: {
|
props: {
|
||||||
child: {
|
child: {
|
||||||
component: ErrorComponent,
|
component: ErrorComponent,
|
||||||
@@ -298,7 +286,7 @@ export async function hydrate_target(target: Target): Promise<{
|
|||||||
level = level.props.child;
|
level = level.props.child;
|
||||||
});
|
});
|
||||||
|
|
||||||
return { props, page, branch };
|
return { props, branch };
|
||||||
}
|
}
|
||||||
|
|
||||||
function load_css(chunk: string) {
|
function load_css(chunk: string) {
|
||||||
|
|||||||
@@ -45,11 +45,9 @@ export type ScrollPosition = {
|
|||||||
|
|
||||||
export type Target = {
|
export type Target = {
|
||||||
href: string;
|
href: string;
|
||||||
path: string;
|
|
||||||
route: Route;
|
route: Route;
|
||||||
match: RegExpExecArray;
|
match: RegExpExecArray;
|
||||||
query: Record<string, string | string[]>;
|
page: Page;
|
||||||
params: Record<string, string>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Redirect = {
|
export type Redirect = {
|
||||||
|
|||||||
Reference in New Issue
Block a user