Fix a bunch of type errors and add a type-check to the github workflows (#837)
* Add yarn type-check * Rename to yarn typecheck * Fix a collection of type errors * Add typecheck to automated tests * add `dist` to exluded folders tsconfig --------- Co-authored-by: Ansh Nanda <anshnanda10@gmail.com>
This commit is contained in:
parent
46c9de7c18
commit
e8843ded5b
23 changed files with 168 additions and 82 deletions
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
})
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
import {AppBskyActorDefs} from '@atproto/api'
|
||||
import {
|
||||
AppBskyActorDefs,
|
||||
AppBskyGraphGetFollows as GetFollows,
|
||||
} from '@atproto/api'
|
||||
import {makeAutoObservable, runInAction} from 'mobx'
|
||||
import sampleSize from 'lodash.samplesize'
|
||||
import {bundleAsync} from 'lib/async/bundle'
|
||||
|
@ -43,11 +46,12 @@ export class FoafsModel {
|
|||
{
|
||||
let cursor
|
||||
for (let i = 0; i < 10; i++) {
|
||||
const res = await this.rootStore.agent.getFollows({
|
||||
actor: this.rootStore.me.did,
|
||||
cursor,
|
||||
limit: 100,
|
||||
})
|
||||
const res: GetFollows.Response =
|
||||
await this.rootStore.agent.getFollows({
|
||||
actor: this.rootStore.me.did,
|
||||
cursor,
|
||||
limit: 100,
|
||||
})
|
||||
this.rootStore.me.follows.hydrateProfiles(res.data.follows)
|
||||
if (!res.data.cursor) {
|
||||
break
|
||||
|
|
|
@ -67,7 +67,7 @@ export class PostsFeedItemModel {
|
|||
}
|
||||
|
||||
get rootUri(): string {
|
||||
if (this.reply?.root.uri) {
|
||||
if (typeof this.reply?.root.uri === 'string') {
|
||||
return this.reply.root.uri
|
||||
}
|
||||
return this.post.uri
|
||||
|
|
|
@ -61,7 +61,7 @@ export class ListsListModel {
|
|||
}
|
||||
this._xLoading(replace)
|
||||
try {
|
||||
let res
|
||||
let res: GetLists.Response
|
||||
if (this.source === 'my-modlists') {
|
||||
res = {
|
||||
success: true,
|
||||
|
@ -170,7 +170,7 @@ async function fetchAllUserLists(
|
|||
|
||||
let cursor
|
||||
for (let i = 0; i < 100; i++) {
|
||||
const res = await store.agent.app.bsky.graph.getLists({
|
||||
const res: GetLists.Response = await store.agent.app.bsky.graph.getLists({
|
||||
actor: did,
|
||||
cursor,
|
||||
limit: 50,
|
||||
|
@ -199,10 +199,11 @@ async function fetchAllMyMuteLists(
|
|||
|
||||
let cursor
|
||||
for (let i = 0; i < 100; i++) {
|
||||
const res = await store.agent.app.bsky.graph.getListMutes({
|
||||
cursor,
|
||||
limit: 50,
|
||||
})
|
||||
const res: GetListMutes.Response =
|
||||
await store.agent.app.bsky.graph.getListMutes({
|
||||
cursor,
|
||||
limit: 50,
|
||||
})
|
||||
cursor = res.data.cursor
|
||||
acc.data.lists = acc.data.lists.concat(res.data.lists)
|
||||
if (!cursor) {
|
||||
|
|
|
@ -8,6 +8,12 @@ import {ImageModel} from '../media/image'
|
|||
import {ListModel} from '../content/list'
|
||||
import {GalleryModel} from '../media/gallery'
|
||||
|
||||
export type ColorMode = 'system' | 'light' | 'dark'
|
||||
|
||||
export function isColorMode(v: unknown): v is ColorMode {
|
||||
return v === 'system' || v === 'light' || v === 'dark'
|
||||
}
|
||||
|
||||
export interface ConfirmModal {
|
||||
name: 'confirm'
|
||||
title: string
|
||||
|
@ -189,7 +195,7 @@ export interface ComposerOpts {
|
|||
}
|
||||
|
||||
export class ShellUiModel {
|
||||
colorMode = 'system'
|
||||
colorMode: ColorMode = 'system'
|
||||
minimalShellMode = false
|
||||
isDrawerOpen = false
|
||||
isDrawerSwipeDisabled = false
|
||||
|
@ -216,13 +222,13 @@ export class ShellUiModel {
|
|||
|
||||
hydrate(v: unknown) {
|
||||
if (isObj(v)) {
|
||||
if (hasProp(v, 'colorMode') && typeof v.colorMode === 'string') {
|
||||
if (hasProp(v, 'colorMode') && isColorMode(v.colorMode)) {
|
||||
this.colorMode = v.colorMode
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setColorMode(mode: string) {
|
||||
setColorMode(mode: ColorMode) {
|
||||
this.colorMode = mode
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue