diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-12-05 18:17:03 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-05 18:17:03 -0800 |
commit | 712cd3fde55cca0444086e4512322832875d4836 (patch) | |
tree | cb8b59a4b4e46e5d96e9cba5179a9cd59de62293 /src/state/queries/util.ts | |
parent | accb25ccf2f0a00a82ff54f0659abd46e0ac8284 (diff) | |
download | voidsky-712cd3fde55cca0444086e4512322832875d4836.tar.zst |
Perf: Include quote posts in the post-thread placeholder (#2104)
Diffstat (limited to 'src/state/queries/util.ts')
-rw-r--r-- | src/state/queries/util.ts | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/state/queries/util.ts b/src/state/queries/util.ts index ed91a8f2a..b259b1922 100644 --- a/src/state/queries/util.ts +++ b/src/state/queries/util.ts @@ -1,4 +1,10 @@ import {QueryClient, QueryKey, InfiniteData} from '@tanstack/react-query' +import { + AppBskyEmbedRecord, + AppBskyEmbedRecordWithMedia, + AppBskyFeedDefs, + AppBskyFeedPost, +} from '@atproto/api' export function truncateAndInvalidate<T = any>( queryClient: QueryClient, @@ -15,3 +21,45 @@ export function truncateAndInvalidate<T = any>( }) queryClient.invalidateQueries({queryKey}) } + +export function getEmbeddedPost( + v: unknown, +): AppBskyEmbedRecord.ViewRecord | undefined { + if ( + AppBskyEmbedRecord.isView(v) && + AppBskyEmbedRecord.validateView(v).success + ) { + if ( + AppBskyEmbedRecord.isViewRecord(v.record) && + AppBskyFeedPost.isRecord(v.record.value) && + AppBskyFeedPost.validateRecord(v.record.value).success + ) { + return v.record + } + } + if ( + AppBskyEmbedRecordWithMedia.isView(v) && + AppBskyEmbedRecordWithMedia.validateView(v).success + ) { + if ( + AppBskyEmbedRecord.isViewRecord(v.record.record) && + AppBskyFeedPost.isRecord(v.record.record.value) && + AppBskyFeedPost.validateRecord(v.record.record.value).success + ) { + return v.record.record + } + } +} + +export function embedViewRecordToPostView( + v: AppBskyEmbedRecord.ViewRecord, +): AppBskyFeedDefs.PostView { + return { + uri: v.uri, + cid: v.cid, + author: v.author, + record: v.value, + indexedAt: v.indexedAt, + labels: v.labels, + } +} |