about summary refs log tree commit diff
path: root/src/state/models/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/models/ui')
-rw-r--r--src/state/models/ui/create-account.ts1
-rw-r--r--src/state/models/ui/preferences.ts15
-rw-r--r--src/state/models/ui/shell.ts5
3 files changed, 21 insertions, 0 deletions
diff --git a/src/state/models/ui/create-account.ts b/src/state/models/ui/create-account.ts
index c5d9f6d9b..d595b200b 100644
--- a/src/state/models/ui/create-account.ts
+++ b/src/state/models/ui/create-account.ts
@@ -118,6 +118,7 @@ export class CreateAccountModel {
         password: this.password,
         inviteCode: this.inviteCode,
       })
+      /* dont await */ this.rootStore.preferences.setBirthDate(this.birthDate)
       track('Create Account')
     } catch (e: any) {
       this.rootStore.onboarding.skip() // undo starting the onboard
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
   }
diff --git a/src/state/models/ui/shell.ts b/src/state/models/ui/shell.ts
index 33fdd5710..647513563 100644
--- a/src/state/models/ui/shell.ts
+++ b/src/state/models/ui/shell.ts
@@ -136,6 +136,10 @@ export interface PostLanguagesSettingsModal {
   name: 'post-languages-settings'
 }
 
+export interface BirthDateSettingsModal {
+  name: 'birth-date-settings'
+}
+
 export type Modal =
   // Account
   | AddAppPasswordModal
@@ -143,6 +147,7 @@ export type Modal =
   | DeleteAccountModal
   | EditProfileModal
   | ProfilePreviewModal
+  | BirthDateSettingsModal
 
   // Curation
   | ContentFilteringSettingsModal