import { useState, useEffect } from 'react'; import { useAuthStore } from '@common/store/authStore'; import { fetchBoardPost, type BoardPostDetail } from '../services/boardApi'; // 카테고리 코드 → 표시명 const CATEGORY_LABELS: Record = { NOTICE: '공지사항', DATA: '자료실', QNA: 'Q&A', MANUAL: '해경매뉴얼', }; // 카테고리별 배지 색상 (NOTICE는 danger, 나머지는 중립) const CATEGORY_COLORS: Record = { NOTICE: 'bg-[color-mix(in_srgb,var(--color-danger)_15%,transparent)] text-color-danger', DATA: 'bg-bg-elevated text-fg-sub', QNA: 'bg-bg-elevated text-fg-sub', MANUAL: 'bg-bg-elevated text-fg-sub', }; interface BoardDetailViewProps { postSn: number; onBack: () => void; onEdit: () => void; onDelete: () => void; } export function BoardDetailView({ postSn, onBack, onEdit, onDelete }: BoardDetailViewProps) { const user = useAuthStore((s) => s.user); const [post, setPost] = useState(null); const [isLoading, setIsLoading] = useState(true); useEffect(() => { let cancelled = false; const load = async () => { setIsLoading(true); try { const data = await fetchBoardPost(postSn); if (!cancelled) setPost(data); } catch { if (!cancelled) { alert('게시글을 불러오는데 실패했습니다.'); onBack(); } } finally { if (!cancelled) setIsLoading(false); } }; load(); return () => { cancelled = true; }; }, [postSn, onBack]); if (isLoading || !post) { return (

게시글을 불러오는 중...

); } // 본인 게시글 여부 const isAuthor = user?.id === post.authorId; return (
{/* 헤더 */}
{isAuthor && (
)}
{/* 게시글 내용 */}
{/* 게시글 헤더 */}
{CATEGORY_LABELS[post.categoryCd] || post.categoryCd} {post.pinnedYn === 'Y' && ( 📌 고정 )}

{post.title}

작성자: {post.authorName} | 작성일: {new Date(post.regDtm).toLocaleDateString('ko-KR')} | 조회수: {post.viewCnt} {post.mdfcnDtm && ( <> | 수정일: {new Date(post.mdfcnDtm).toLocaleDateString('ko-KR')} )}
{/* 본문 */}
{post.content || '(내용 없음)'}
{/* 댓글 섹션 (향후 구현 예정) */}

댓글 기능은 향후 업데이트 예정입니다.

); }