hackatime/app/javascript/entrypoints/inertia.ts
2026-02-10 00:00:37 +00:00

48 lines
1.4 KiB
TypeScript

import { createInertiaApp, type ResolvedComponent } from '@inertiajs/svelte'
import { hydrate, mount } from 'svelte'
import AppLayout from '../layouts/AppLayout.svelte'
createInertiaApp({
// Disable progress bar
//
// see https://inertia-rails.dev/guide/progress-indicators
// progress: false,
resolve: (name) => {
const pages = import.meta.glob<ResolvedComponent>('../pages/**/*.svelte', {
eager: true,
})
const page = pages[`../pages/${name}.svelte`]
if (!page) {
console.error(`Missing Inertia page component: '${name}.svelte'`)
}
return { default: page.default, layout: page.layout || AppLayout } as ResolvedComponent
},
setup({ el, App, props }) {
if (el) {
const hasServerMarkup = el.hasChildNodes()
const render = hasServerMarkup ? hydrate : mount
render(App, { target: el, props })
} else {
console.error(
'Missing root element.\n\n' +
'If you see this error, it probably means you load Inertia.js on non-Inertia pages.\n' +
'Consider moving <%= vite_typescript_tag "inertia" %> to the Inertia-specific layout instead.',
)
}
},
defaults: {
form: {
forceIndicesArrayFormatInFormData: false,
},
future: {
useScriptElementForInitialPage: true,
useDataInertiaHeadAttribute: true,
useDialogForErrorModal: true,
preserveEqualProps: true,
},
},
})