diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-01-03 13:08:56 -0600 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2023-01-03 13:08:56 -0600 |
commit | b9b096500063a38fdf3858a362858b447103ec07 (patch) | |
tree | 1f1c8e7001cf409ea1416f0c96ea70877f861e12 /src/state/models/post-thread-view.ts | |
parent | 1acef14a1c6e342cb707620905b484fae4c53cff (diff) | |
download | voidsky-b9b096500063a38fdf3858a362858b447103ec07.tar.zst |
Implement validation and proper type detection
Diffstat (limited to 'src/state/models/post-thread-view.ts')
-rw-r--r-- | src/state/models/post-thread-view.ts | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/src/state/models/post-thread-view.ts b/src/state/models/post-thread-view.ts index b7c33cfbd..f19335539 100644 --- a/src/state/models/post-thread-view.ts +++ b/src/state/models/post-thread-view.ts @@ -1,5 +1,8 @@ import {makeAutoObservable, runInAction} from 'mobx' -import {AppBskyFeedGetPostThread as GetPostThread} from '@atproto/api' +import { + AppBskyFeedGetPostThread as GetPostThread, + AppBskyFeedPost as FeedPost, +} from '@atproto/api' import {AtUri} from '../../third-party/uri' import {RootStoreModel} from './root-store' import * as apilib from '../lib/api' @@ -19,7 +22,8 @@ export class PostThreadViewPostModel { _hasMore = false // data - post: GetPostThread.ThreadViewPost['post'] + post: FeedPost.View + postRecord?: FeedPost.Record parent?: PostThreadViewPostModel | GetPostThread.NotFoundPost replies?: (PostThreadViewPostModel | GetPostThread.NotFoundPost)[] @@ -30,6 +34,22 @@ export class PostThreadViewPostModel { ) { this._reactKey = reactKey this.post = v.post + if (FeedPost.isRecord(this.post.record)) { + const valid = FeedPost.validateRecord(this.post.record) + if (valid.success) { + this.postRecord = this.post.record + } else { + rootStore.log.warn( + 'Received an invalid app.bsky.feed.post record', + valid.error, + ) + } + } else { + rootStore.log.warn( + 'app.bsky.feed.getPostThread served an unexpected record type', + this.post.record, + ) + } // replies and parent are handled via assignTreeModels makeAutoObservable(this, {rootStore: false}) } @@ -278,7 +298,6 @@ export class PostThreadViewModel { } private _replaceAll(res: GetPostThread.Response) { - // TODO: validate .record // sortThread(res.data.thread) TODO needed? const keyGen = reactKeyGenerator() const thread = new PostThreadViewPostModel( |