From 638ba3ce5cc626906bd02ccaaf58430ba8f26b6b Mon Sep 17 00:00:00 2001
From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com>
Date: Fri, 15 Sep 2023 17:52:01 -0500
Subject: [PATCH] feat: display all posts on home page
---
convex/posts.ts | 43 +++++++++++++++++++++++++++++++++++
src/app/page.tsx | 11 ++++++++-
src/components/AllPosts.tsx | 39 +++++++++++++++++++++++++++++++
src/components/Navbar.tsx | 14 ++++++++++++
src/components/UserButton.tsx | 3 ++-
src/components/UserPosts.tsx | 2 +-
6 files changed, 109 insertions(+), 3 deletions(-)
create mode 100644 src/components/AllPosts.tsx
diff --git a/convex/posts.ts b/convex/posts.ts
index 2b04cb7..c96b296 100644
--- a/convex/posts.ts
+++ b/convex/posts.ts
@@ -160,3 +160,46 @@ export const getUserPostCount = query({
return posts.length;
},
});
+
+export const getAllPostsWithUser = query({
+ args: { paginationOpts: paginationOptsValidator },
+ handler: async (ctx, args) => {
+ const posts = await ctx.db
+ .query('posts')
+ .filter(q => q.eq(q.field('parentPostId'), undefined))
+ .order('desc')
+ .paginate(args.paginationOpts);
+
+ const postsWithUser = await Promise.all(
+ posts.page.map(async post => {
+ const user = await ctx.db.get(post.userId);
+
+ if (user === null) {
+ return {
+ ...post,
+ user: {
+ _id: '' as Id<'users'>,
+ _creationTime: 0,
+ clerkUsername: null,
+ clerkImageUrl: '',
+ clerkUserId: '',
+ },
+ };
+ }
+
+ return {
+ ...post,
+ user: {
+ _id: user._id,
+ _creationTime: user._creationTime,
+ clerkUsername: user.clerkUser.username,
+ clerkImageUrl: user.clerkUser.image_url,
+ clerkUserId: user.clerkUser.id,
+ },
+ };
+ })
+ );
+
+ return { ...posts, page: postsWithUser };
+ },
+});
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 1cdf8fa..0f8b653 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,3 +1,12 @@
+import AllPosts from '@/components/AllPosts';
+
export default function Home() {
- return ;
+ return (
+ Home
+