diff options
Diffstat (limited to 'src/state/models/content/profile.ts')
-rw-r--r-- | src/state/models/content/profile.ts | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/state/models/content/profile.ts b/src/state/models/content/profile.ts index ea75d19c6..dddf488a3 100644 --- a/src/state/models/content/profile.ts +++ b/src/state/models/content/profile.ts @@ -1,5 +1,6 @@ import {makeAutoObservable, runInAction} from 'mobx' import { + AtUri, ComAtprotoLabelDefs, AppBskyActorGetProfile as GetProfile, AppBskyActorProfile, @@ -23,6 +24,8 @@ export class ProfileViewerModel { muted?: boolean following?: string followedBy?: string + blockedBy?: boolean + blocking?: string constructor() { makeAutoObservable(this) @@ -86,6 +89,8 @@ export class ProfileModel { accountLabels: filterAccountLabels(this.labels), profileLabels: filterProfileLabels(this.labels), isMuted: this.viewer?.muted || false, + isBlocking: !!this.viewer?.blocking || false, + isBlockedBy: !!this.viewer?.blockedBy || false, } } @@ -185,6 +190,33 @@ export class ProfileModel { await this.refresh() } + async blockAccount() { + const res = await this.rootStore.agent.app.bsky.graph.block.create( + { + repo: this.rootStore.me.did, + }, + { + subject: this.did, + createdAt: new Date().toISOString(), + }, + ) + this.viewer.blocking = res.uri + await this.refresh() + } + + async unblockAccount() { + if (!this.viewer.blocking) { + return + } + const {rkey} = new AtUri(this.viewer.blocking) + await this.rootStore.agent.app.bsky.graph.block.delete({ + repo: this.rootStore.me.did, + rkey, + }) + this.viewer.blocking = undefined + await this.refresh() + } + // state transitions // = |