diff options
Diffstat (limited to 'src/state/models/content')
-rw-r--r-- | src/state/models/content/list-membership.ts | 25 | ||||
-rw-r--r-- | src/state/models/content/list.ts | 39 |
2 files changed, 50 insertions, 14 deletions
diff --git a/src/state/models/content/list-membership.ts b/src/state/models/content/list-membership.ts index b4af4472b..20d9b60af 100644 --- a/src/state/models/content/list-membership.ts +++ b/src/state/models/content/list-membership.ts @@ -9,6 +9,16 @@ interface Membership { value: AppBskyGraphListitem.Record } +interface ListitemRecord { + uri: string + value: AppBskyGraphListitem.Record +} + +interface ListitemListResponse { + cursor?: string + records: ListitemRecord[] +} + export class ListMembershipModel { // data memberships: Membership[] = [] @@ -32,13 +42,14 @@ export class ListMembershipModel { // it needs to be replaced with server side list membership queries // -prf let cursor - let records = [] + let records: ListitemRecord[] = [] for (let i = 0; i < 100; i++) { - const res = await this.rootStore.agent.app.bsky.graph.listitem.list({ - repo: this.rootStore.me.did, - cursor, - limit: PAGE_SIZE, - }) + const res: ListitemListResponse = + await this.rootStore.agent.app.bsky.graph.listitem.list({ + repo: this.rootStore.me.did, + cursor, + limit: PAGE_SIZE, + }) records = records.concat( res.records.filter(record => record.value.subject === this.subject), ) @@ -99,7 +110,7 @@ export class ListMembershipModel { }) } - async updateTo(uris: string) { + async updateTo(uris: string[]) { for (const uri of uris) { await this.add(uri) } diff --git a/src/state/models/content/list.ts b/src/state/models/content/list.ts index 673ee9430..3913d3e62 100644 --- a/src/state/models/content/list.ts +++ b/src/state/models/content/list.ts @@ -4,6 +4,7 @@ import { AppBskyGraphGetList as GetList, AppBskyGraphDefs as GraphDefs, AppBskyGraphList, + AppBskyGraphListitem, } from '@atproto/api' import {Image as RNImage} from 'react-native-image-crop-picker' import {RootStoreModel} from '../root-store' @@ -13,6 +14,16 @@ import {bundleAsync} from 'lib/async/bundle' const PAGE_SIZE = 30 +interface ListitemRecord { + uri: string + value: AppBskyGraphListitem.Record +} + +interface ListitemListResponse { + cursor?: string + records: ListitemRecord[] +} + export class ListModel { // state isLoading = false @@ -33,7 +44,7 @@ export class ListModel { name, description, avatar, - }: {name: string; description: string; avatar: RNImage | undefined}, + }: {name: string; description: string; avatar: RNImage | null | undefined}, ) { const record: AppBskyGraphList.Record = { purpose: 'app.bsky.graph.defs#modlist', @@ -124,6 +135,9 @@ export class ListModel { description: string avatar: RNImage | null | undefined }) { + if (!this.list) { + return + } if (!this.isOwner) { throw new Error('Cannot edit this list') } @@ -157,15 +171,20 @@ export class ListModel { } async delete() { + if (!this.list) { + return + } + // fetch all the listitem records that belong to this list let cursor - let records = [] + let records: ListitemRecord[] = [] for (let i = 0; i < 100; i++) { - const res = await this.rootStore.agent.app.bsky.graph.listitem.list({ - repo: this.rootStore.me.did, - cursor, - limit: PAGE_SIZE, - }) + const res: ListitemListResponse = + await this.rootStore.agent.app.bsky.graph.listitem.list({ + repo: this.rootStore.me.did, + cursor, + limit: PAGE_SIZE, + }) records = records.concat( res.records.filter(record => record.value.list === this.uri), ) @@ -193,6 +212,9 @@ export class ListModel { } async subscribe() { + if (!this.list) { + return + } await this.rootStore.agent.app.bsky.graph.muteActorList({ list: this.list.uri, }) @@ -200,6 +222,9 @@ export class ListModel { } async unsubscribe() { + if (!this.list) { + return + } await this.rootStore.agent.app.bsky.graph.unmuteActorList({ list: this.list.uri, }) |