Skip to content

Commit abd5126

Browse files
committed
[All] Pass the full page object to resolveComponent inertiajs#1864
1 parent f809834 commit abd5126

File tree

9 files changed

+17
-16
lines changed

9 files changed

+17
-16
lines changed

packages/core/src/router.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,7 @@ export class Router {
462462
preserveState?: PreserveStateOption
463463
} = {},
464464
): Promise<void> {
465-
return Promise.resolve(this.resolveComponent(page.component)).then((component) => {
465+
return Promise.resolve(this.resolveComponent(page.component, page)).then((component) => {
466466
if (visitId === this.visitId) {
467467
page.scrollRegions = page.scrollRegions || []
468468
page.rememberedState = page.rememberedState || {}
@@ -494,7 +494,7 @@ export class Router {
494494
if (event.state !== null) {
495495
const page = event.state
496496
const visitId = this.createVisitId()
497-
Promise.resolve(this.resolveComponent(page.component)).then((component) => {
497+
Promise.resolve(this.resolveComponent(page.component, page)).then((component) => {
498498
if (visitId === this.visitId) {
499499
this.page = page
500500
this.swapComponent({ component, page, preserveState: false }).then(() => {

packages/core/src/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export interface Page<SharedProps extends PageProps = PageProps> {
4343
rememberedState: Record<string, unknown>
4444
}
4545

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

4848
export type PageHandler = ({
4949
component,

packages/react/src/createInertiaApp.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,11 @@ 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

85-
const reactApp = await resolveComponent(initialPage.component).then((initialComponent) => {
85+
const reactApp = await resolveComponent(initialPage.component, initialPage).then((initialComponent) => {
8686
return setup({
8787
// @ts-expect-error
8888
el,

packages/svelte/src/lib/createInertiaApp.ts

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

45-
await resolveComponent(initialPage.component).then((initialComponent) => {
45+
await resolveComponent(initialPage.component, initialPage).then((initialComponent) => {
4646
store.set({
4747
component: initialComponent,
4848
page: initialPage,

packages/svelte/src/lib/types.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
import type { Page } from '@inertiajs/core'
12
import type { ComponentType } from 'svelte'
23

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

56
export type ResolvedComponent = {
67
default?: ComponentType

packages/vue2/src/app.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import useForm from './useForm'
88
export interface InertiaProps {
99
initialPage: Page
1010
initialComponent?: object
11-
resolveComponent?: (name: string) => Component
11+
resolveComponent?: (name: string, page: Page) => Component
1212
titleCallback?: (title: string) => string
1313
onHeadUpdate?: (elements: string[]) => void
1414
}

packages/vue2/src/createInertiaApp.ts

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

55
interface CreateInertiaAppProps {
66
id?: string
7-
resolve: (name: string) => Component | Promise<Component> | { default: Component }
7+
resolve: (name: string, page: Page) => Component | Promise<Component> | { default: Component }
88
setup: (props: {
99
el: Element
1010
App: InertiaApp
@@ -40,11 +40,11 @@ export default async function createInertiaApp({
4040
const el = isServer ? null : document.getElementById(id)
4141
const initialPage = page || JSON.parse(el.dataset.page)
4242
// @ts-expect-error
43-
const resolveComponent = (name) => Promise.resolve(resolve(name)).then((module) => module.default || module)
43+
const resolveComponent = (name, page) => Promise.resolve(resolve(name, page)).then((module) => module.default || module)
4444

4545
let head = []
4646

47-
const vueApp = await resolveComponent(initialPage.component).then((initialComponent) => {
47+
const vueApp = await resolveComponent(initialPage.component, initialPage).then((initialComponent) => {
4848
return setup({
4949
el,
5050
App,

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,11 +31,11 @@ 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

38-
const vueApp = await resolveComponent(initialPage.component).then((initialComponent) => {
38+
const vueApp = await resolveComponent(initialPage.component, initialPage).then((initialComponent) => {
3939
return setup({
4040
el,
4141
App,

0 commit comments

Comments
 (0)