From 6005374340f76b5a3fe014890f1096e4aae93517 Mon Sep 17 00:00:00 2001 From: Sonny Date: Fri, 15 Nov 2024 18:42:42 +0100 Subject: [PATCH] feat: remove SSR for dasboard page --- config/inertia.ts | 9 ++++++++- config/ssr.ts | 2 ++ inertia/app/app.tsx | 12 ++++++++++-- inertia/tsconfig.json | 5 +++-- vite.config.ts | 5 +++-- 5 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 config/ssr.ts 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`, }, }, });