diff options
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, + } +} |