31 lines
879 B
JavaScript
31 lines
879 B
JavaScript
// @flow
|
|
import * as React from "react";
|
|
import { useTheme } from "styled-components";
|
|
import useStores from "hooks/useStores";
|
|
|
|
export default function PageTheme() {
|
|
const { ui } = useStores();
|
|
const theme = useTheme();
|
|
|
|
React.useEffect(() => {
|
|
// wider page background beyond the React root
|
|
if (document.body) {
|
|
document.body.style.background = theme.background;
|
|
}
|
|
|
|
// theme-color adjusts the title bar color for desktop PWA
|
|
const themeElement = document.querySelector('meta[name="theme-color"]');
|
|
if (themeElement) {
|
|
themeElement.setAttribute("content", theme.background);
|
|
}
|
|
|
|
// user-agent controls and scrollbars
|
|
const csElement = document.querySelector('meta[name="color-scheme"]');
|
|
if (csElement) {
|
|
csElement.setAttribute("content", ui.resolvedTheme);
|
|
}
|
|
}, [theme, ui.resolvedTheme]);
|
|
|
|
return null;
|
|
}
|