about summary refs log tree commit diff
path: root/src/state/models/ui/preferences.ts
diff options
context:
space:
mode:
authorPaul Frazee <pfrazee@gmail.com>2023-09-11 18:04:09 -0700
committerGitHub <noreply@github.com>2023-09-11 18:04:09 -0700
commit9e8b14f71008e11889bf0107938850433bcd2cd2 (patch)
treebdd9a7af0223f240e3a65c7984bdbe029001fe14 /src/state/models/ui/preferences.ts
parent0090371011e2b5f2c93bf8196ec461c34bf1c999 (diff)
downloadvoidsky-9e8b14f71008e11889bf0107938850433bcd2cd2.tar.zst
Add birth date gating to moderation settings (#1435)
* Add birth date preference, modal to set, link in settings, and age gate in moderation

* Styling fixes for android

* Fix types
Diffstat (limited to 'src/state/models/ui/preferences.ts')
-rw-r--r--src/state/models/ui/preferences.ts15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/state/models/ui/preferences.ts b/src/state/models/ui/preferences.ts
index 3b03cdca1..64ab4ecba 100644
--- a/src/state/models/ui/preferences.ts
+++ b/src/state/models/ui/preferences.ts
@@ -7,6 +7,7 @@ import {RootStoreModel} from '../root-store'
 import {ModerationOpts} from '@atproto/api'
 import {DEFAULT_FEEDS} from 'lib/constants'
 import {deviceLocales} from 'platform/detection'
+import {getAge} from 'lib/strings/time'
 import {LANGUAGES} from '../../../locale/languages'
 
 // TEMP we need to permanently convert 'show' to 'ignore', for now we manually convert -prf
@@ -47,6 +48,7 @@ export class PreferencesModel {
   contentLabels = new LabelPreferencesModel()
   savedFeeds: string[] = []
   pinnedFeeds: string[] = []
+  birthDate: Date | undefined = undefined
   homeFeedRepliesEnabled: boolean = true
   homeFeedRepliesThreshold: number = 2
   homeFeedRepostsEnabled: boolean = true
@@ -60,6 +62,13 @@ export class PreferencesModel {
     makeAutoObservable(this, {lock: false}, {autoBind: true})
   }
 
+  get userAge(): number | undefined {
+    if (!this.birthDate) {
+      return undefined
+    }
+    return getAge(this.birthDate)
+  }
+
   serialize() {
     return {
       contentLanguages: this.contentLanguages,
@@ -199,6 +208,7 @@ export class PreferencesModel {
         ) {
           this.pinnedFeeds = prefs.feeds.pinned
         }
+        this.birthDate = prefs.birthDate
       })
 
       // set defaults on missing items
@@ -430,6 +440,11 @@ export class PreferencesModel {
     )
   }
 
+  async setBirthDate(birthDate: Date) {
+    this.birthDate = birthDate
+    await this.rootStore.agent.setPersonalDetails({birthDate})
+  }
+
   toggleHomeFeedRepliesEnabled() {
     this.homeFeedRepliesEnabled = !this.homeFeedRepliesEnabled
   }