Skip to content

Commit 0766df1

Browse files
committed
[All] Pass the full page object to resolveComponent inertiajs#1864
1 parent 7f67d71 commit 0766df1

File tree

7 files changed

+15
-14
lines changed

7 files changed

+15
-14
lines changed

packages/core/src/page.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class CurrentPage {
5050
history.clear()
5151
}
5252

53-
return this.resolve(page.component).then((component) => {
53+
return this.resolve(page.component, page).then((component) => {
5454
if (componentId !== this.componentId) {
5555
// Component has changed since we started resolving this component, bail
5656
return
@@ -102,7 +102,7 @@ class CurrentPage {
102102
preserveState?: PreserveStateOption
103103
} = {},
104104
) {
105-
return this.resolve(page.component).then((component) => {
105+
return this.resolve(page.component, page).then((component) => {
106106
this.page = page
107107
this.cleared = false
108108
return this.swap({ component, page, preserveState })
@@ -149,8 +149,8 @@ class CurrentPage {
149149
return this.swapComponent({ component, page, preserveState })
150150
}
151151

152-
public resolve(component: string): Promise<Component> {
153-
return Promise.resolve(this.resolveComponent(component))
152+
public resolve(component: string, page: Page): Promise<Component> {
153+
return Promise.resolve(this.resolveComponent(component, page))
154154
}
155155

156156
public isTheSame(page: Page): boolean {

packages/core/src/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export interface ClientSideVisitOptions {
5959
preserveState?: VisitOptions['preserveState']
6060
}
6161

62-
export type PageResolver = (name: string) => Component
62+
export type PageResolver = (name: string, page: Page) => Component
6363

6464
export type PageHandler = ({
6565
component,

packages/react/src/createInertiaApp.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,12 @@ export default async function createInertiaApp<SharedProps extends PageProps = P
7878
const el = isServer ? null : document.getElementById(id)
7979
const initialPage = page || JSON.parse(el.dataset.page)
8080
// @ts-expect-error
81-
const resolveComponent = (name) => Promise.resolve(resolve(name)).then((module) => module.default || module)
81+
const resolveComponent = (name, page) => Promise.resolve(resolve(name, page)).then((module) => module.default || module)
8282

8383
let head = []
8484

8585
const reactApp = await Promise.all([
86-
resolveComponent(initialPage.component),
86+
resolveComponent(initialPage.component, initialPage),
8787
router.decryptHistory().catch(() => {}),
8888
]).then(([initialComponent]) => {
8989
return setup({

packages/svelte/src/createInertiaApp.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ export default async function createInertiaApp({
3636
const isServer = typeof window === 'undefined'
3737
const el = isServer ? null : document.getElementById(id)
3838
const initialPage: Page = page || JSON.parse(el?.dataset.page || '{}')
39-
const resolveComponent = (name: string) => Promise.resolve(resolve(name))
39+
const resolveComponent = (name: string, page: Page) => Promise.resolve(resolve(name, page))
4040

4141
const [initialComponent] = await Promise.all([
42-
resolveComponent(initialPage.component),
42+
resolveComponent(initialPage.component, initialPage),
4343
router.decryptHistory().catch(() => {}),
4444
])
4545

packages/svelte/src/types.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import type { ComponentType } from 'svelte'
2+
import type { Page } from '@jamesst20/inertia-core'
23
import type { RenderFunction, RenderProps } from './components/Render.svelte'
34

4-
export type ComponentResolver = (name: string) => ResolvedComponent | Promise<ResolvedComponent>
5+
export type ComponentResolver = (name: string, page: Page) => ResolvedComponent | Promise<ResolvedComponent>
56

67
export type LayoutResolver = (h: RenderFunction, page: RenderProps) => RenderProps
78

packages/vue3/src/app.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import useForm from './useForm'
1818
export interface InertiaAppProps {
1919
initialPage: Page
2020
initialComponent?: object
21-
resolveComponent?: (name: string) => DefineComponent | Promise<DefineComponent>
21+
resolveComponent?: (name: string, page: Page) => DefineComponent | Promise<DefineComponent>
2222
titleCallback?: (title: string) => string
2323
onHeadUpdate?: (elements: string[]) => void
2424
}

packages/vue3/src/createInertiaApp.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import App, { InertiaApp, InertiaAppProps, plugin } from './app'
44

55
interface CreateInertiaAppProps {
66
id?: string
7-
resolve: (name: string) => DefineComponent | Promise<DefineComponent> | { default: DefineComponent }
7+
resolve: (name: string, page: Page) => DefineComponent | Promise<DefineComponent> | { default: DefineComponent }
88
setup: (props: { el: Element; App: InertiaApp; props: InertiaAppProps; plugin: Plugin }) => void | VueApp
99
title?: (title: string) => string
1010
progress?:
@@ -31,12 +31,12 @@ export default async function createInertiaApp({
3131
const isServer = typeof window === 'undefined'
3232
const el = isServer ? null : document.getElementById(id)
3333
const initialPage = page || JSON.parse(el.dataset.page)
34-
const resolveComponent = (name) => Promise.resolve(resolve(name)).then((module) => module.default || module)
34+
const resolveComponent = (name, page) => Promise.resolve(resolve(name, page)).then((module) => module.default || module)
3535

3636
let head = []
3737

3838
const vueApp = await Promise.all([
39-
resolveComponent(initialPage.component),
39+
resolveComponent(initialPage.component, initialPage),
4040
router.decryptHistory().catch(() => {}),
4141
]).then(([initialComponent]) => {
4242
return setup({

0 commit comments

Comments
 (0)