|
1 |
| -import { setupProgress } from '@inertiajs/core' |
| 1 | +import { router, setupProgress } 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) |
9 | 12 |
|
10 |
| - let head = [] |
| 13 | + if (!isServer) { |
| 14 | + router.init({ |
| 15 | + initialPage, |
| 16 | + resolveComponent, |
| 17 | + swapComponent: async ({ component, page, preserveState }) => { |
| 18 | + store.update((current) => ({ |
| 19 | + component, |
| 20 | + page, |
| 21 | + key: preserveState ? current.key : Date.now(), |
| 22 | + })) |
| 23 | + }, |
| 24 | + }) |
| 25 | + |
| 26 | + if (progress) { |
| 27 | + setupProgress(progress) |
| 28 | + } |
11 | 29 |
|
12 |
| - const svelteApp = await resolveComponent(initialPage.component).then((initialComponent) => { |
13 | 30 | return setup({
|
14 | 31 | el,
|
15 | 32 | App,
|
16 | 33 | props: {
|
17 | 34 | initialPage,
|
18 | 35 | initialComponent,
|
19 | 36 | resolveComponent,
|
20 |
| - onHeadUpdate: isServer ? (elements) => (head = elements) : null, |
| 37 | + visitOptions, |
21 | 38 | },
|
22 | 39 | })
|
23 |
| - }) |
24 |
| - |
25 |
| - if (!isServer && progress) { |
26 |
| - setupProgress(progress) |
27 | 40 | }
|
28 | 41 |
|
29 | 42 | if (isServer) {
|
30 |
| - // TODO |
| 43 | + store.set({ |
| 44 | + component: initialComponent, |
| 45 | + page: initialPage, |
| 46 | + key: null, |
| 47 | + }) |
| 48 | + |
| 49 | + const { html, head } = SSR.render({ id, initialPage }) |
| 50 | + |
| 51 | + return { |
| 52 | + body: html, |
| 53 | + head: [head], |
| 54 | + } |
31 | 55 | }
|
32 | 56 | }
|
0 commit comments