From 34cf953fde81c891f87b829cf472f0ccb11551d8 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 16 Jul 2018 14:27:13 -0400 Subject: [PATCH] use serialized preloaded data --- src/runtime/index.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/runtime/index.ts b/src/runtime/index.ts index a10d743..21a885b 100644 --- a/src/runtime/index.ts +++ b/src/runtime/index.ts @@ -79,6 +79,8 @@ function render(data: any, scroll: ScrollPosition, token: {}) { if (scroll) { window.scrollTo(scroll.x, scroll.y); } + + ready = true; } function prepare_page(target: Target): Promise<{ @@ -104,7 +106,7 @@ function prepare_page(target: Target): Promise<{ } }; - return Promise.all(page.parts.map(async part => { + return Promise.all(page.parts.map(async (part, i) => { const { default: Component } = await part.component(); const req = { path, @@ -112,12 +114,11 @@ function prepare_page(target: Target): Promise<{ params: part.params ? part.params(target.match) : {} }; - return { - Component, - preloaded: Component.preload - ? await Component.preload.call(preload_context, req) - : {} - }; + const preloaded = ready || !initial_data.preloaded[i] + ? Component.preload ? await Component.preload.call(preload_context, req) : {} + : initial_data.preloaded[i]; + + return { Component, preloaded }; })).catch(err => { error = { statusCode: 500, message: err }; return []; @@ -281,6 +282,7 @@ function trigger_prefetch(event: MouseEvent | TouchEvent) { } let inited: boolean; +let ready = false; export function init(opts: { App: ComponentConstructor, target: Node, routes: Routes, store?: (data: any) => Store }) { if (opts instanceof HTMLElement) {