Skip to content

resolveInertiaPage ​

A helper function for your frontend that does a lot of heavy lifting when it comes to resolving which page, layout and template to load, and how to load them.

Available for all frameworks (Vue, React and Svelte).

Usage ​

The theme bootstrapper should have already added this to your app.js(x) and ssr.js(x) files.

js
import { createSSRApp, h } from "vue";
import { createInertiaApp } from "@inertiajs/vue3";
import { resolveInertiaPage } from "@evo-mark/inertia-wordpress/vue"; 

createInertiaApp({
  resolve: resolveInertiaPage(
    import.meta.glob("./pages/**/*.vue", { eager: false }),
  ),
  // ...
});
jsx
import { createInertiaApp } from "@inertiajs/react";
import { hydrateRoot, createRoot } from "react-dom/client";
import { resolveInertiaPage } from "@evo-mark/inertia-wordpress/react"; 

createInertiaApp({
  resolve: resolveInertiaPage(
    import.meta.glob("./pages/**/*.jsx", { eager: false }),
  ),
  // ...
});
js
import { createInertiaApp } from "@inertiajs/svelte";
import { hydrate, mount } from "svelte";
import { resolveInertiaPage } from "@evo-mark/inertia-wordpress/svelte"; 

createInertiaApp({
  resolve: resolveInertiaPage(
    import.meta.glob("./pages/**/*.svelte", { eager: true }),
  ),
  // ...
});

The function accepts three arguments:

Arg #1: Page glob ​

Required

This is the import meta glob of your page files. You can use either eager-loaded or lazy-loaded pages depending on your needs.

You can only render a page if it's included in this glob.

See the Official InertiaJS website for more details on code-splitting.

Arg #2: Default Layout ​

Optional

A layout component that automatically wraps the page unless the page itself overrides it.

Useful for default headers and headers that will be part of every page.

Arg #3: Options Object ​

Optional

An object that contains additional arguments for the function.

layoutCallback ​

If you want a little more control over your default layout, you can provide a callback

js
import Layout1 from './Layout';
import Layout2 from './Layout2';

// ...
resolve: resolveInertiaPage(
    import.meta.glob("./pages/**/*.vue", { eager: false }),
    null, // Notice that the 2nd argument is null
    { // Notice that this 3rd argument is an object
        /**
         * @param { string } name The page name that is being loaded
         * @param { VNode } resolvedPage The resolved page vNode
         * @param { ?VNode } resolvedTemplate If the post is assigned a template, the resolved vNode
         */
        layoutCallback:  (name, resolvedPage, resolvedTemplate) => {
            if (name.startsWith('account')) return Layout2;
            else return Layout;
        }
    }
),

templates ​

Another glob that will be used for rendering a page template see next section

js
resolve: resolveInertiaPage(
    import.meta.glob("./pages/**/*.vue"),
    DefaultLayout,
    { // Notice that this 3rd argument is an object
        templates: import.meta.glob("./templates/**/*.vue") 
    }
),

Released under the Apache2 License.