about summary refs log tree commit diff
path: root/src/state/queries/util.ts
diff options
context:
space:
mode:
authorPaul Frazee <pfrazee@gmail.com>2023-12-05 18:17:03 -0800
committerGitHub <noreply@github.com>2023-12-05 18:17:03 -0800
commit712cd3fde55cca0444086e4512322832875d4836 (patch)
treecb8b59a4b4e46e5d96e9cba5179a9cd59de62293 /src/state/queries/util.ts
parentaccb25ccf2f0a00a82ff54f0659abd46e0ac8284 (diff)
downloadvoidsky-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.ts48
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,
+  }
+}