Skip to content

Commit

Permalink
Add hook to handle logo theme updates
Browse files Browse the repository at this point in the history
  • Loading branch information
keianhzo committed Jul 15, 2022
1 parent 813e441 commit 92bf55a
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 30 deletions.
12 changes: 3 additions & 9 deletions src/react-components/misc/AppLogo.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,14 @@ import PropTypes from "prop-types";
import configs from "../../utils/configs";
import { ReactComponent as HmcLogo } from "../icons/HmcLogo.svg";
import { isHmc } from "../../utils/isHmc";
import { useDarkMode } from "../styles/theme";
import { useLogo } from "../styles/theme";

export function AppLogo({ className, forceConfigurableLogo }) {
const darkMode = useDarkMode();
const logo = useLogo();
if (isHmc() && !forceConfigurableLogo) {
return <HmcLogo className="hmc-logo" />;
} else {
return (
<img
className={className}
alt={configs.translation("app-name")}
src={(darkMode && configs.image("logo_dark")) || configs.image("logo")}
/>
);
return <img className={className} alt={configs.translation("app-name")} src={logo} />;
}
}

Expand Down
69 changes: 48 additions & 21 deletions src/react-components/styles/theme.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { useCallback, useEffect, useState } from "react";
import PropTypes from "prop-types";
import { getColorSchemePref } from "../../utils/get-color-scheme-pref";
import configs from "../../utils/configs";

let config = process.env.APP_CONFIG;

Expand Down Expand Up @@ -35,30 +37,33 @@ export function useDarkMode() {
[setDarkMode]
);

useEffect(() => {
const darkmodeQuery = window.matchMedia("(prefers-color-scheme: dark)");

setDarkMode(darkmodeQuery.matches);

// This is a workaround for old Safari.
// Prior to Safari 14, MediaQueryList is based on EventTarget, so you must use
// addListener() and removeListener() to observe media query lists.
// https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList/addListener
// We may remove this workaround when no one will use Safari 13 or before.
if (darkmodeQuery.addEventListener) {
darkmodeQuery.addEventListener("change", changeListener);
} else {
darkmodeQuery.addListener(changeListener);
}
useEffect(
() => {
const darkmodeQuery = window.matchMedia("(prefers-color-scheme: dark)");

return () => {
if (darkmodeQuery.removeEventListener) {
darkmodeQuery.removeEventListener("change", changeListener);
setDarkMode(darkmodeQuery.matches);

// This is a workaround for old Safari.
// Prior to Safari 14, MediaQueryList is based on EventTarget, so you must use
// addListener() and removeListener() to observe media query lists.
// https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList/addListener
// We may remove this workaround when no one will use Safari 13 or before.
if (darkmodeQuery.addEventListener) {
darkmodeQuery.addEventListener("change", changeListener);
} else {
darkmodeQuery.removeListener(changeListener);
darkmodeQuery.addListener(changeListener);
}
};
}, []);

return () => {
if (darkmodeQuery.removeEventListener) {
darkmodeQuery.removeEventListener("change", changeListener);
} else {
darkmodeQuery.removeListener(changeListener);
}
};
},
[changeListener]
);

return darkMode;
}
Expand Down Expand Up @@ -112,6 +117,28 @@ export function useTheme(themeId) {
);
}

function getCurrentTheme() {
if (!Array.isArray(themes)) return;

const preferredThemeId = window.APP.store?.state?.preferences?.theme;
if (preferredThemeId) {
return themes.find(t => t.id === preferredThemeId);
} else {
return getColorSchemePref();
}
}

function getAppLogo(darkMode) {
const theme = getCurrentTheme();
const shouldUseDarkLogo = theme ? theme.darkModeDefault : darkMode;
return (shouldUseDarkLogo && configs.image("logo_dark")) || configs.image("logo");
}

export function useLogo() {
const darkMode = useDarkMode();
return getAppLogo(darkMode);
}

export function useThemeFromStore(store) {
const [themeId, setThemeId] = useState(store?.state?.preferences?.theme);

Expand Down

0 comments on commit 92bf55a

Please sign in to comment.