From 01e6cd0f68e0d95261c8c85626c015fa615ca52c Mon Sep 17 00:00:00 2001 From: danieldeng2 <danieldeng223@gmail.com> Date: Thu, 3 Sep 2020 11:40:58 +0100 Subject: [PATCH] Defaults theme to follow system --- src/components/App.tsx | 14 ++++++++++++- src/components/pages/SettingsModal/index.tsx | 21 +++++++++++++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/components/App.tsx b/src/components/App.tsx index e15d87e03..5d6092942 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -38,8 +38,12 @@ class App extends React.Component<{}, AppState> { }%`; const currentTheme = localStorage.getItem("theme"); - if (currentTheme) { + if (currentTheme == "light" || currentTheme == "dark") { document.documentElement.setAttribute("data-theme", currentTheme); + } else { + let mq = window.matchMedia("(prefers-color-scheme: dark)"); + mq.addListener((mq) => this.setDarkTheme(mq.matches)); + this.setDarkTheme(mq.matches); } window.addEventListener("resize", () => { @@ -51,6 +55,13 @@ class App extends React.Component<{}, AppState> { this.showOrHideSideBars(); } + setDarkTheme(toSet: boolean) { + document.documentElement.setAttribute( + "data-theme", + toSet ? "dark" : "light" + ); + } + toggleLeftBar() { if (window.innerWidth <= 1024) { this.setState({ @@ -108,6 +119,7 @@ class App extends React.Component<{}, AppState> { fileView={this.state.fileView} onCardViewClick={() => this.setFileView("card")} onListViewClick={() => this.setFileView("list")} + setDarkTheme={(b) => this.setDarkTheme(b)} /> <Switch> diff --git a/src/components/pages/SettingsModal/index.tsx b/src/components/pages/SettingsModal/index.tsx index d87e33390..c93ccd389 100644 --- a/src/components/pages/SettingsModal/index.tsx +++ b/src/components/pages/SettingsModal/index.tsx @@ -13,6 +13,7 @@ interface Props { show: boolean; onHide: any; fileView: string; + setDarkTheme: (toSet: boolean) => any; onCardViewClick: (event: React.MouseEvent) => void; onListViewClick: (event: React.MouseEvent) => void; } @@ -21,6 +22,7 @@ const SettingsModal: React.FC<Props> = ({ show, onHide, fileView, + setDarkTheme, onCardViewClick, onListViewClick, }) => { @@ -29,7 +31,7 @@ const SettingsModal: React.FC<Props> = ({ "90" ); - const [theme, setTheme] = useLocalStorage("theme", "light"); + const [theme, setTheme] = useLocalStorage("theme", "default"); return ( <Modal @@ -72,11 +74,24 @@ const SettingsModal: React.FC<Props> = ({ <Form.Group style={{ alignItems: "center" }}> <Form.Label>Theme</Form.Label> <ButtonGroup style={{ float: "right" }}> + <Button + className={styles.modalToggleButton} + active={theme === "default"} + onClick={() => { + let mq = window.matchMedia("(prefers-color-scheme: dark)"); + mq.addListener((mq) => setDarkTheme(mq.matches)); + setDarkTheme(mq.matches); + setTheme("default"); + }} + variant="secondary" + > + Default + </Button> <Button className={styles.modalToggleButton} active={theme === "light"} onClick={() => { - document.documentElement.setAttribute("data-theme", "light"); + setDarkTheme(false); setTheme("light"); }} variant="secondary" @@ -87,7 +102,7 @@ const SettingsModal: React.FC<Props> = ({ className={styles.modalToggleButton} active={theme === "dark"} onClick={() => { - document.documentElement.setAttribute("data-theme", "dark"); + setDarkTheme(true); setTheme("dark"); }} variant="secondary" -- GitLab