diff --git a/config/inertia.ts b/config/inertia.ts
index 3ba86e8..ccd2ace 100644
--- a/config/inertia.ts
+++ b/config/inertia.ts
@@ -1,7 +1,9 @@
+import { isSSREnableForPage } from '#config/ssr';
import {
- PREFER_DARK_THEME,
DARK_THEME_DEFAULT_VALUE,
+ PREFER_DARK_THEME,
} from '#user/constants/theme';
+import logger from '@adonisjs/core/services/logger';
import { defineConfig } from '@adonisjs/inertia';
export default defineConfig({
@@ -32,5 +34,10 @@ export default defineConfig({
ssr: {
enabled: true,
entrypoint: 'inertia/app/ssr.tsx',
+ pages: (_, page) => {
+ const ssrEnabled = isSSREnableForPage(page);
+ logger.debug(`Page "${page}" SSR enabled: ${ssrEnabled}`);
+ return ssrEnabled;
+ },
},
});
diff --git a/config/ssr.ts b/config/ssr.ts
new file mode 100644
index 0000000..1628e98
--- /dev/null
+++ b/config/ssr.ts
@@ -0,0 +1,2 @@
+export const CSR_ROUTES = ['dashboard'];
+export const isSSREnableForPage = (page: string) => !CSR_ROUTES.includes(page);
diff --git a/inertia/app/app.tsx b/inertia/app/app.tsx
index 60c0d73..744c577 100644
--- a/inertia/app/app.tsx
+++ b/inertia/app/app.tsx
@@ -1,8 +1,9 @@
import { resolvePageComponent } from '@adonisjs/inertia/helpers';
import { createInertiaApp } from '@inertiajs/react';
+import { isSSREnableForPage } from 'config-ssr';
import 'dayjs/locale/en';
import 'dayjs/locale/fr';
-import { hydrateRoot } from 'react-dom/client';
+import { createRoot, hydrateRoot } from 'react-dom/client';
import '../i18n/index';
const appName = import.meta.env.VITE_APP_NAME || 'MyLinks';
@@ -20,6 +21,13 @@ createInertiaApp({
},
setup({ el, App, props }) {
- hydrateRoot(el, );
+ const componentName = props.initialPage.component;
+ const isSSREnabled = isSSREnableForPage(componentName);
+ console.debug(`Page "${componentName}" SSR enabled: ${isSSREnabled}`);
+ if (isSSREnabled) {
+ hydrateRoot(el, );
+ } else {
+ createRoot(el).render();
+ }
},
});
diff --git a/inertia/tsconfig.json b/inertia/tsconfig.json
index 77d8195..f910425 100644
--- a/inertia/tsconfig.json
+++ b/inertia/tsconfig.json
@@ -6,8 +6,9 @@
"jsx": "react-jsx",
"resolveJsonModule": true,
"paths": {
- "~/*": ["./*"]
+ "~/*": ["./*"],
+ "config-ssr": ["../config/ssr"]
}
},
- "include": ["./**/*.ts", "./**/*.tsx"]
+ "include": ["./**/*.ts", "./**/*.tsx", "../config/ssr.ts"]
}
diff --git a/vite.config.ts b/vite.config.ts
index 6019734..7d075ec 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,8 +1,8 @@
-import { defineConfig } from 'vite';
import { getDirname } from '@adonisjs/core/helpers';
import inertia from '@adonisjs/inertia/client';
-import react from '@vitejs/plugin-react';
import adonisjs from '@adonisjs/vite/client';
+import react from '@vitejs/plugin-react';
+import { defineConfig } from 'vite';
export default defineConfig({
plugins: [
@@ -21,6 +21,7 @@ export default defineConfig({
resolve: {
alias: {
'~/': `${getDirname(import.meta.url)}/inertia/`,
+ 'config-ssr': `${getDirname(import.meta.url)}/config/ssr.ts`,
},
},
});