Follow system theme by default
authorAjay Bura <ajbura@gmail.com>
Sat, 9 Jul 2022 12:38:35 +0000 (18:08 +0530)
committerAjay Bura <ajbura@gmail.com>
Sat, 9 Jul 2022 12:38:35 +0000 (18:08 +0530)
.github/PULL_REQUEST_TEMPLATE.md
src/app/organisms/settings/Settings.jsx
src/client/state/settings.js
src/index.jsx

index a8a04e76dcb2662686f52b481441b0012d774888..1292f1d24d0e1c8c99285e9467fb7290a1738f90 100644 (file)
@@ -1,4 +1,4 @@
-<!-- Please read https://github.com/ajbura/cinny/CONTRIBUTING.md before submitting your pull request -->
+<!-- Please read https://github.com/ajbura/cinny/blob/dev/CONTRIBUTING.md before submitting your pull request -->
 
 ### Description
 <!-- Please include a summary of the change. Please also include relevant motivation and context. List any dependencies that are required for this change. -->
index 82b948adf7176c740f17098bd0dacdb6f71917e3..b0f45f41e518cbd9d3496990fa78917b7fb5b94e 100644 (file)
@@ -57,23 +57,25 @@ function AppearanceSection() {
           )}
           content={<Text variant="b3">Use light or dark mode based on the system settings.</Text>}
         />
-        {!settings.useSystemTheme && (
-          <SettingTile
-            title="Theme"
-            content={(
-              <SegmentedControls
-                selected={settings.getThemeIndex()}
-                segments={[
-                  { text: 'Light' },
-                  { text: 'Silver' },
-                  { text: 'Dark' },
-                  { text: 'Butter' },
-                ]}
-                onSelect={(index) => settings.setTheme(index)}
-              />
-          )}
-          />
+        <SettingTile
+          title="Theme"
+          content={(
+            <SegmentedControls
+              selected={settings.useSystemTheme ? -1 : settings.getThemeIndex()}
+              segments={[
+                { text: 'Light' },
+                { text: 'Silver' },
+                { text: 'Dark' },
+                { text: 'Butter' },
+              ]}
+              onSelect={(index) => {
+                if (settings.useSystemTheme) toggleSystemTheme();
+                settings.setTheme(index);
+                updateState({});
+              }}
+            />
         )}
+        />
       </div>
       <div className="settings-appearance__card">
         <MenuHeader>Room messages</MenuHeader>
index 0f476ef8835380e6b1b61b3ceee3b633c8d6645a..32f55fcc611ed9cec8c0c983d650f44b53e327ed 100644 (file)
@@ -48,31 +48,43 @@ class Settings extends EventEmitter {
     return this.themes[this.themeIndex];
   }
 
-  setTheme(themeIndex) {
-    const appBody = document.getElementById('appBody');
-
-    appBody.classList.remove('system-theme');
+  _clearTheme() {
+    document.body.classList.remove('system-theme');
     this.themes.forEach((themeName) => {
       if (themeName === '') return;
-      appBody.classList.remove(themeName);
+      document.body.classList.remove(themeName);
     });
-    // If use system theme is enabled
-    // we will override current theme choice with system theme
+  }
+
+  applyTheme() {
+    this._clearTheme();
     if (this.useSystemTheme) {
-      appBody.classList.add('system-theme');
-    } else if (this.themes[themeIndex] !== '') {
-      appBody.classList.add(this.themes[themeIndex]);
+      document.body.classList.add('system-theme');
+    } else if (this.themes[this.themeIndex]) {
+      document.body.classList.add(this.themes[this.themeIndex]);
     }
-    setSettings('themeIndex', themeIndex);
+  }
+
+  setTheme(themeIndex) {
     this.themeIndex = themeIndex;
+    setSettings('themeIndex', this.themeIndex);
+    this.applyTheme();
+  }
+
+  toggleUseSystemTheme() {
+    this.useSystemTheme = !this.useSystemTheme;
+    setSettings('useSystemTheme', this.useSystemTheme);
+    this.applyTheme();
+
+    this.emit(cons.events.settings.SYSTEM_THEME_TOGGLED, this.useSystemTheme);
   }
 
   getUseSystemTheme() {
     if (typeof this.useSystemTheme === 'boolean') return this.useSystemTheme;
 
     const settings = getSettings();
-    if (settings === null) return false;
-    if (typeof settings.useSystemTheme === 'undefined') return false;
+    if (settings === null) return true;
+    if (typeof settings.useSystemTheme === 'undefined') return true;
     return settings.useSystemTheme;
   }
 
@@ -138,12 +150,7 @@ class Settings extends EventEmitter {
   setter(action) {
     const actions = {
       [cons.actions.settings.TOGGLE_SYSTEM_THEME]: () => {
-        this.useSystemTheme = !this.useSystemTheme;
-
-        setSettings('useSystemTheme', this.useSystemTheme);
-        this.setTheme(this.themeIndex);
-
-        this.emit(cons.events.settings.SYSTEM_THEME_TOGGLED, this.useSystemTheme);
+        this.toggleUseSystemTheme();
       },
       [cons.actions.settings.TOGGLE_MARKDOWN]: () => {
         this.isMarkdown = !this.isMarkdown;
index 69fff62f5103296a875b5386c688e17f75f9a524..55f8656b1c291802119bebbc7a9e05b7655d7fe4 100644 (file)
@@ -7,7 +7,7 @@ import settings from './client/state/settings';
 
 import App from './app/pages/App';
 
-settings.setTheme(settings.getThemeIndex());
+settings.applyTheme();
 
 ReactDom.render(
   <App />,