about summary refs log tree commit diff
path: root/src/state/models/ui/preferences.ts
diff options
context:
space:
mode:
authorAnsh Nanda <anshnanda10@gmail.com>2023-05-23 14:18:35 -0700
committerAnsh Nanda <anshnanda10@gmail.com>2023-05-23 14:18:35 -0700
commitb561a51ed9f798194c3c6a72eefab562a773f2c9 (patch)
tree1cede1243bddef26b4f619e933246cc80b667ad5 /src/state/models/ui/preferences.ts
parent52a8879754e07c3e0aa90a40fdc27dfdc40fd450 (diff)
downloadvoidsky-b561a51ed9f798194c3c6a72eefab562a773f2c9.tar.zst
add button to reset preferences in dev mode
Diffstat (limited to 'src/state/models/ui/preferences.ts')
-rw-r--r--src/state/models/ui/preferences.ts32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/state/models/ui/preferences.ts b/src/state/models/ui/preferences.ts
index c85faf658..c4b6da0f6 100644
--- a/src/state/models/ui/preferences.ts
+++ b/src/state/models/ui/preferences.ts
@@ -63,6 +63,11 @@ export class PreferencesModel {
     }
   }
 
+  /**
+   * The function hydrates an object with properties related to content languages, labels, saved feeds,
+   * and pinned feeds that it gets from the parameter `v` (probably local storage)
+   * @param {unknown} v - the data object to hydrate from
+   */
   hydrate(v: unknown) {
     if (isObj(v)) {
       if (
@@ -95,6 +100,9 @@ export class PreferencesModel {
     }
   }
 
+  /**
+   * This function fetches preferences and sets defaults for missing items.
+   */
   async sync() {
     // fetch preferences
     let hasSavedFeedsPref = false
@@ -153,6 +161,15 @@ export class PreferencesModel {
     }
   }
 
+  /**
+   * This function updates the preferences of a user and allows for a callback function to be executed
+   * before the update.
+   * @param cb - cb is a callback function that takes in a single parameter of type
+   * AppBskyActorDefs.Preferences and returns either a boolean or void. This callback function is used to
+   * update the preferences of the user. The function is called with the current preferences as an
+   * argument and if the callback returns false, the preferences are not updated.
+   * @returns void
+   */
   async update(cb: (prefs: AppBskyActorDefs.Preferences) => boolean | void) {
     const res = await this.rootStore.agent.app.bsky.actor.getPreferences({})
     if (cb(res.data.preferences) === false) {
@@ -163,6 +180,21 @@ export class PreferencesModel {
     })
   }
 
+  /**
+   * This function resets the preferences to an empty array of no preferences.
+   */
+  async reset() {
+    runInAction(() => {
+      this.contentLabels = new LabelPreferencesModel()
+      this.contentLanguages = deviceLocales.map(locale => locale.languageCode)
+      this.savedFeeds = []
+      this.pinnedFeeds = []
+    })
+    await this.rootStore.agent.app.bsky.actor.putPreferences({
+      preferences: [],
+    })
+  }
+
   hasContentLanguage(code2: string) {
     return this.contentLanguages.includes(code2)
   }