aboutsummaryrefslogtreecommitdiffstats
path: root/src/pages/_document.tsx
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2023-10-28 17:12:58 +0200
committerArmand Philippot <git@armandphilippot.com>2023-11-11 18:15:27 +0100
commit60c49f18389ff625177a57277ef8f292a31097bf (patch)
tree76b0f1f1792b57659e54d282f93df70088446e3c /src/pages/_document.tsx
parent05f1dfc6896d3affa7c494a1b955f230d836a4b7 (diff)
refactor(providers,hooks): rewrite PrismThemeProvider & usePrismTheme
* reuse Theme provider logic * move DOM mutation from provider to hook * add a script to init theme before page load
Diffstat (limited to 'src/pages/_document.tsx')
-rw-r--r--src/pages/_document.tsx17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/pages/_document.tsx b/src/pages/_document.tsx
index 7e3b5e6..6d065cd 100644
--- a/src/pages/_document.tsx
+++ b/src/pages/_document.tsx
@@ -1,6 +1,12 @@
import { Html, Head, Main, NextScript } from 'next/document';
import Script from 'next/script';
-import { STORAGE_KEY } from '../utils/constants';
+import {
+ PRISM_THEME_ATTRIBUTE,
+ STORAGE_KEY,
+ VALID_THEMES,
+} from '../utils/constants';
+
+const validPrismThemesStr = VALID_THEMES.map((t) => `"${t}"`);
// eslint-disable-next-line @typescript-eslint/no-shadow -- Required by NextJs
export default function Document() {
@@ -25,6 +31,15 @@ export default function Document() {
// eslint-disable-next-line react/jsx-no-literals
strategy="beforeInteractive"
/>
+ <Script
+ dangerouslySetInnerHTML={{
+ __html: `!function(){const t=localStorage.getItem("${STORAGE_KEY.PRISM}"),e="string"==typeof t?JSON.parse(t):void 0,s=e&&[${validPrismThemesStr}].includes(e)?e:"system";document.documentElement.setAttribute("${PRISM_THEME_ATTRIBUTE}",s)}();`,
+ }}
+ // eslint-disable-next-line react/jsx-no-literals
+ id="prism-theme-hydration"
+ // eslint-disable-next-line react/jsx-no-literals
+ strategy="beforeInteractive"
+ />
</Head>
<body>
<Main />