about summary refs log tree commit diff
path: root/src/state/models/profile-view.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/models/profile-view.ts')
-rw-r--r--src/state/models/profile-view.ts30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/state/models/profile-view.ts b/src/state/models/profile-view.ts
index 83389c82d..787e69e3f 100644
--- a/src/state/models/profile-view.ts
+++ b/src/state/models/profile-view.ts
@@ -1,9 +1,10 @@
 import {makeAutoObservable, runInAction} from 'mobx'
+import {Image as PickedImage} from 'react-native-image-crop-picker'
 import * as GetProfile from '../../third-party/api/src/client/types/app/bsky/actor/getProfile'
 import * as Profile from '../../third-party/api/src/client/types/app/bsky/actor/profile'
+import {Main as DeclRef} from '../../third-party/api/src/client/types/app/bsky/system/declRef'
 import {Entity} from '../../third-party/api/src/client/types/app/bsky/feed/post'
 import {extractEntities} from '../../lib/strings'
-import {Declaration} from './_common'
 import {RootStoreModel} from './root-store'
 import * as apilib from '../lib/api'
 
@@ -30,13 +31,14 @@ export class ProfileViewModel {
   // data
   did: string = ''
   handle: string = ''
-  declaration: Declaration = {
+  declaration: DeclRef = {
     cid: '',
     actorType: '',
   }
   creator: string = ''
   displayName?: string
   description?: string
+  avatar?: string
   followersCount: number = 0
   followsCount: number = 0
   membersCount: number = 0
@@ -44,7 +46,6 @@ export class ProfileViewModel {
   myState = new ProfileViewMyStateModel()
 
   // TODO TEMP data to be implemented in the protocol
-  userAvatar: string | null = null
   userBanner: string | null = null
 
   // added data
@@ -120,15 +121,27 @@ export class ProfileViewModel {
   }
 
   async updateProfile(
-    fn: (existing?: Profile.Record) => Profile.Record,
-    userAvatar: string | null, // TODO TEMP
+    updates: Profile.Record,
+    newUserAvatar: PickedImage | undefined,
     userBanner: string | null, // TODO TEMP
   ) {
-    // TODO TEMP add userBanner & userAvatar in the protocol when suported
-    this.userAvatar = userAvatar
+    // TODO TEMP add userBanner to the protocol when suported
     this.userBanner = userBanner
 
-    await apilib.updateProfile(this.rootStore, this.did, fn)
+    if (newUserAvatar) {
+      const res = await this.rootStore.api.com.atproto.blob.upload(
+        newUserAvatar.path, // this will be special-cased by the fetch monkeypatch in /src/state/lib/api.ts
+        {
+          encoding: newUserAvatar.mime,
+        },
+      )
+      updates.avatar = {
+        cid: res.data.cid,
+        mimeType: newUserAvatar.mime,
+      }
+    }
+    await this.rootStore.api.app.bsky.actor.updateProfile(updates)
+    await this.rootStore.me.load()
     await this.refresh()
   }
 
@@ -173,6 +186,7 @@ export class ProfileViewModel {
     this.creator = res.data.creator
     this.displayName = res.data.displayName
     this.description = res.data.description
+    this.avatar = res.data.avatar
     this.followersCount = res.data.followersCount
     this.followsCount = res.data.followsCount
     this.membersCount = res.data.membersCount