about summary refs log tree commit diff
path: root/src/state/models
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/models')
-rw-r--r--src/state/models/root-store.ts4
-rw-r--r--src/state/models/shell-ui.ts22
2 files changed, 25 insertions, 1 deletions
diff --git a/src/state/models/root-store.ts b/src/state/models/root-store.ts
index 26f947c56..54578b4a5 100644
--- a/src/state/models/root-store.ts
+++ b/src/state/models/root-store.ts
@@ -67,6 +67,7 @@ export class RootStoreModel {
       me: this.me.serialize(),
       nav: this.nav.serialize(),
       onboard: this.onboard.serialize(),
+      shell: this.shell.serialize(),
     }
   }
 
@@ -84,6 +85,9 @@ export class RootStoreModel {
       if (hasProp(v, 'onboard')) {
         this.onboard.hydrate(v.onboard)
       }
+      if (hasProp(v, 'shell')) {
+        this.shell.hydrate(v.shell)
+      }
     }
   }
 
diff --git a/src/state/models/shell-ui.ts b/src/state/models/shell-ui.ts
index 6b3134ff2..52d081680 100644
--- a/src/state/models/shell-ui.ts
+++ b/src/state/models/shell-ui.ts
@@ -1,5 +1,6 @@
 import {makeAutoObservable} from 'mobx'
 import {ProfileViewModel} from './profile-view'
+import {isObj, hasProp} from '../lib/type-guards'
 
 export class ConfirmModal {
   name = 'confirm'
@@ -135,6 +136,7 @@ export interface ComposerOpts {
 }
 
 export class ShellUiModel {
+  darkMode = false
   minimalShellMode = false
   isMainMenuOpen = false
   isModalActive = false
@@ -156,7 +158,25 @@ export class ShellUiModel {
   composerOpts: ComposerOpts | undefined
 
   constructor() {
-    makeAutoObservable(this)
+    makeAutoObservable(this, {serialize: false, hydrate: false})
+  }
+
+  serialize(): unknown {
+    return {
+      darkMode: this.darkMode,
+    }
+  }
+
+  hydrate(v: unknown) {
+    if (isObj(v)) {
+      if (hasProp(v, 'darkMode') && typeof v.darkMode === 'boolean') {
+        this.darkMode = v.darkMode
+      }
+    }
+  }
+
+  setDarkMode(v: boolean) {
+    this.darkMode = v
   }
 
   setMinimalShellMode(v: boolean) {