|
1 |
| -import { setupProgress } from '@inertiajs/core' |
| 1 | +import { setupProgress, router } from '@inertiajs/core' |
2 | 2 | import App from './App.svelte'
|
| 3 | +import SSR from './SSR.svelte' |
| 4 | +import store from './store' |
3 | 5 |
|
4 |
| -export default async function createInertiaApp({ id = 'app', resolve, setup, progress = {}, page, render }) { |
| 6 | +export default async function createInertiaApp({ id = 'app', resolve, setup, progress = {}, page, visitOptions }) { |
5 | 7 | const isServer = typeof window === 'undefined'
|
6 | 8 | const el = isServer ? null : document.getElementById(id)
|
7 | 9 | const initialPage = page || JSON.parse(el.dataset.page)
|
8 | 10 | const resolveComponent = (name) => Promise.resolve(resolve(name))
|
| 11 | + const initialComponent = await resolveComponent(initialPage.component) |
| 12 | + |
9 | 13 |
|
10 |
| - let head = [] |
11 |
| - |
12 |
| - const svelteApp = await resolveComponent(initialPage.component).then((initialComponent) => { |
| 14 | + if (!isServer) { |
| 15 | + router.init({ |
| 16 | + initialPage, |
| 17 | + resolveComponent, |
| 18 | + swapComponent: async ({ component, page, preserveState }) => { |
| 19 | + store.update((current) => ({ |
| 20 | + component, |
| 21 | + page, |
| 22 | + key: preserveState ? current.key : Date.now() |
| 23 | + })) |
| 24 | + } |
| 25 | + }) |
| 26 | + if (progress) setupProgress(progress) |
13 | 27 | return setup({
|
14 | 28 | el,
|
15 | 29 | App,
|
16 | 30 | props: {
|
17 | 31 | initialPage,
|
18 | 32 | initialComponent,
|
19 | 33 | resolveComponent,
|
20 |
| - onHeadUpdate: isServer ? (elements) => (head = elements) : null, |
| 34 | + visitOptions |
21 | 35 | },
|
22 | 36 | })
|
23 |
| - }) |
24 |
| - |
25 |
| - if (!isServer && progress) { |
26 |
| - setupProgress(progress) |
27 | 37 | }
|
28 | 38 |
|
29 | 39 | if (isServer) {
|
30 |
| - // TODO |
| 40 | + store.set({ |
| 41 | + component: initialComponent, |
| 42 | + page: initialPage, |
| 43 | + key: null |
| 44 | + }) |
| 45 | + const { html, head } = SSR.render({id, initialPage}) |
| 46 | + return { |
| 47 | + body: html, |
| 48 | + head: [head] |
| 49 | + } |
31 | 50 | }
|
32 | 51 | }
|
0 commit comments