'use client'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { getPost, deletePost } from '@/api/posts'; // ๐ ๏ธ getPostsByCategory ์ ๊ฑฐ import { getProfile } from '@/api/profile'; import MarkdownRenderer from '@/components/post/MarkdownRenderer'; import CommentList from '@/components/comment/CommentList'; import TOC from '@/components/post/TOC'; import { Loader2, Calendar, Eye, Folder, User, Edit2, Trash2, ArrowLeft, AlertCircle, ChevronLeft, ChevronRight } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { useAuthStore } from '@/store/authStore'; import Link from 'next/link'; interface PostDetailClientProps { slug: string; } export default function PostDetailClient({ slug }: PostDetailClientProps) { const router = useRouter(); const queryClient = useQueryClient(); const { role, _hasHydrated } = useAuthStore(); const isAdmin = _hasHydrated && role?.includes('ADMIN'); // 1. ๊ฒ์๊ธ ์์ธ ์กฐํ (์ด์ ์ฌ๊ธฐ์ prevPost, nextPost๊ฐ ํฌํจ๋จ) const { data: post, isLoading: isPostLoading, error } = useQuery({ queryKey: ['post', slug], queryFn: () => getPost(slug), enabled: !!slug, retry: 1, }); // ๐๏ธ ์ญ์ ๋จ: ๋ ์ด์ ํ๋ก ํธ์์ ์๋ค ๊ธ์ ์ฐพ๊ธฐ ์ํด ๋ชฉ๋ก์ ์กฐํํ ํ์๊ฐ ์์! /* const { data: neighborPosts } = useQuery({ queryKey: ['posts', 'category', post?.categoryName], queryFn: () => getPostsByCategory(post!.categoryName, 0, 100), enabled: !!post?.categoryName, staleTime: 1000 * 60 * 5, }); */ const { data: profile } = useQuery({ queryKey: ['profile'], queryFn: getProfile, }); const deleteMutation = useMutation({ mutationFn: deletePost, onSuccess: () => { alert('๊ฒ์๊ธ์ด ์ญ์ ๋์์ต๋๋ค.'); queryClient.invalidateQueries({ queryKey: ['posts'] }); router.push('/'); }, onError: (err: any) => { alert('์ญ์ ์คํจ: ' + (err.response?.data?.message || err.message)); }, }); if (isPostLoading) { return (
{isAuthError ? '๋ก๊ทธ์ธ์ด ํ์ํ๊ฑฐ๋ ๋น๊ณต๊ฐ ๊ฒ์๊ธ์ผ ์ ์์ต๋๋ค.' : errorMessage}