39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import { createInertiaApp } from "@inertiajs/react";
|
|
import axios from "axios";
|
|
import { resolvePageComponent } from "laravel-vite-plugin/inertia-helpers";
|
|
import type { ComponentType } from "react";
|
|
import { createRoot, hydrateRoot } from "react-dom/client";
|
|
|
|
type PageComponent = ComponentType<Record<string, unknown>>;
|
|
|
|
interface PageModule {
|
|
default: PageComponent;
|
|
}
|
|
|
|
const appName: string = (import.meta.env as Record<string, string>)
|
|
.VITE_APP_NAME;
|
|
const appPages = import.meta.glob<PageModule>("./*/Pages/**/*.tsx");
|
|
|
|
void createInertiaApp({
|
|
title: (title) => `${title} - ${appName}`,
|
|
resolve: async (name) => {
|
|
const page = await resolvePageComponent<PageModule>(
|
|
`./${name}.tsx`,
|
|
appPages,
|
|
);
|
|
return page.default;
|
|
},
|
|
setup({ el, App, props }) {
|
|
if (el.childElementCount > 0) {
|
|
hydrateRoot(el, <App {...props} />);
|
|
} else {
|
|
createRoot(el).render(<App {...props} />);
|
|
}
|
|
},
|
|
progress: {
|
|
color: "#4B5563",
|
|
},
|
|
});
|
|
|
|
window.axios = axios;
|
|
window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";
|