From b441b781a02cf4594cf3ea314ca8fe023fd3e2cd Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Tue, 12 Sep 2023 16:56:07 -0500 Subject: [PATCH] feat: add reply editor to post page --- src/app/page.tsx | 2 +- src/app/posts/[id]/page.tsx | 45 +++++++++++++++++++++++++++++++------ src/components/Editor.tsx | 5 ++++- src/components/Post.tsx | 21 +++++++++++++---- 4 files changed, 60 insertions(+), 13 deletions(-) diff --git a/src/app/page.tsx b/src/app/page.tsx index 7bff2ad..1cdf8fa 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,3 +1,3 @@ export default function Home() { - return
; + return
; } diff --git a/src/app/posts/[id]/page.tsx b/src/app/posts/[id]/page.tsx index 1a0b329..f1bec51 100644 --- a/src/app/posts/[id]/page.tsx +++ b/src/app/posts/[id]/page.tsx @@ -1,12 +1,22 @@ 'use client'; +import Editor from '@/components/Editor'; import Post from '@/components/Post'; import SpinningLoader from '@/components/SpinningLoader'; +import { useUser } from '@clerk/nextjs'; import { useQuery } from 'convex/react'; +import Image from 'next/image'; import { api } from '../../../../convex/_generated/api'; import { Id } from '../../../../convex/_generated/dataModel'; -export default function PostPage({ params }: { params: { id: string } }) { +export default function PostPage({ + params, + searchParams, +}: { + params: { id: string }; + searchParams: { reply?: boolean }; +}) { + const user = useUser(); const post = useQuery(api.posts.getPostById, { id: params.id as Id<'posts'>, }); @@ -18,14 +28,35 @@ export default function PostPage({ params }: { params: { id: string } }) { return (
-
+
{post === undefined ? ( - +
+ Loading post... +
) : ( - + <> +
+ +
+
+ {user.isSignedIn !== true ? null : ( +
+ user profile image +
+ )} + +
+ )}
diff --git a/src/components/Editor.tsx b/src/components/Editor.tsx index 562cf3e..0073fe5 100644 --- a/src/components/Editor.tsx +++ b/src/components/Editor.tsx @@ -36,7 +36,10 @@ export default function Editor({ post }: { post?: Doc<'posts'> }) { ]; const [mode, setMode] = useState<'write' | 'preview'>('write'); - const { editorRef } = useCodeMirror({ doc: currentDoc, extensions }); + const { editorRef } = useCodeMirror({ + doc: currentDoc, + extensions, + }); async function handleSubmit(e: FormEvent) { e.preventDefault(); diff --git a/src/components/Post.tsx b/src/components/Post.tsx index 6129124..49f0f14 100644 --- a/src/components/Post.tsx +++ b/src/components/Post.tsx @@ -6,7 +6,8 @@ import { useMutation } from 'convex/react'; import Image from 'next/image'; import Link from 'next/link'; import { useEffect, useRef, useState } from 'react'; -import { BiDotsHorizontalRounded } from 'react-icons/bi'; +import { BiDotsHorizontalRounded, BiSolidLike } from 'react-icons/bi'; +import { BsFillReplyFill } from 'react-icons/bs'; import { GoDotFill } from 'react-icons/go'; import { api } from '../../convex/_generated/api'; import PostContent from './PostContent'; @@ -14,9 +15,11 @@ import PostContent from './PostContent'; export default function Post({ post, limit = true, + showReply = true, }: { post: PostWithUserDto; limit?: boolean; + showReply?: boolean; }) { const deletePostById = useMutation(api.posts.deletePostById); const modalRef = useRef(null); @@ -29,6 +32,7 @@ export default function Post({ }); const dayOfMonth = createdPostDate.getDate(); const content = limit ? post.content.slice(0, 10) : post.content; + const postLink = `/posts/${post._id}`; // TODO: Add reply and like buttons @@ -92,7 +96,7 @@ export default function Post({
  • setModalOpen(false)} - href={`/posts/${post._id}/edit`} + href={`${postLink}/edit`} > Edit post @@ -118,13 +122,22 @@ export default function Post({ {limit && post.content.length > 10 ? ( Show more ) : null} -
    +
    + {showReply ? ( + + + + ) : null} + +
    );