DocSpace-client/packages/common/utils/useThemeDetector.js

34 lines
869 B
JavaScript

import { useEffect, useState } from "react";
export const useThemeDetector = () => {
const isDesktopClient = window["AscDesktopEditor"] !== undefined;
const [systemTheme, setSystemTheme] = useState(
isDesktopClient
? window?.RendererProcessVariable?.theme?.type === "dark"
? "Dark"
: "Base"
: window?.matchMedia("(prefers-color-scheme: dark)").matches
? "Dark"
: "Base"
);
const systemThemeListener = (e) => {
setSystemTheme(e.matches ? "Dark" : "Base");
};
useEffect(() => {
if (isDesktopClient) return;
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
mediaQuery.addEventListener("change", systemThemeListener);
return () => {
if (isDesktopClient) return;
mediaQuery.removeEventListener(systemThemeListener);
};
}, []);
return systemTheme;
};