From 60c49f18389ff625177a57277ef8f292a31097bf Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Sat, 28 Oct 2023 17:12:58 +0200 Subject: 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 --- src/pages/_app.tsx | 7 +++++-- src/pages/_document.tsx | 17 ++++++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) (limited to 'src/pages') diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 0c92c93..caf4a96 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -3,7 +3,7 @@ import { IntlProvider } from 'react-intl'; import '../styles/globals.scss'; import type { AppPropsWithLayout } from '../types'; import { settings } from '../utils/config'; -import { STORAGE_KEY } from '../utils/constants'; +import { PRISM_THEME_ATTRIBUTE, STORAGE_KEY } from '../utils/constants'; import { AckeeProvider, MotionProvider, @@ -37,7 +37,10 @@ const App = ({ Component, pageProps }: AppPropsWithLayout) => { attribute={STORAGE_KEY.THEME} storageKey={STORAGE_KEY.THEME} > - + {getLayout(, {})} 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" /> +