'use client'; import { useEffect, useState } from 'react'; import { fetchApi } from '@/lib/utils/client'; import { NotePreview } from '@/types/notification'; import { NoteInboxResponse, NoteDetail } from '@/types/response/note/inbox'; export default function NoteInboxPage() { const [notes, setNotes] = useState([]); const [total, setTotal] = useState(0); const [unreadCount, setUnreadCount] = useState(0); const [page, setPage] = useState(1); const [loading, setLoading] = useState(true); const [selectedNote, setSelectedNote] = useState(null); useEffect(() => { loadNotes(); }, [page]); const loadNotes = async () => { setLoading(true); try { const res = await fetchApi(`/api/note/inbox?pageNum=${page}&perPage=20`); if (res.data) { setNotes(res.data.list || []); setTotal(res.data.total || 0); setUnreadCount(res.data.unreadCount || 0); } } catch {} setLoading(false); }; const openNote = async (note: NotePreview) => { // TODO: 상세 조회 API 호출 + 읽음 처리 setSelectedNote({ id: note.id, title: note.title, content: '(쪽지 내용 로딩...)', senderName: note.senderName || '시스템', createdAt: note.createdAt }); if (!note.isRead) { setNotes(prev => prev.map(n => n.id === note.id ? { ...n, isRead: true } : n)); setUnreadCount(prev => Math.max(0, prev - 1)); } }; const formatDate = (dateStr: string) => { const d = new Date(dateStr); return `${d.getFullYear()}-${(d.getMonth() + 1).toString().padStart(2, '0')}-${d.getDate().toString().padStart(2, '0')} ${d.getHours().toString().padStart(2, '0')}:${d.getMinutes().toString().padStart(2, '0')}`; }; return (

받은 쪽지함

안읽은 쪽지: {unreadCount}건 쪽지 보내기
{loading &&
로딩 중...
} {!loading && notes.length === 0 && (
쪽지가 없습니다
)}
{notes.map(note => (
openNote(note)} className={`flex items-center gap-3 p-3 rounded-lg cursor-pointer border transition-colors ${note.isRead ? 'bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700' : 'bg-blue-50 dark:bg-blue-950 border-blue-200 dark:border-blue-800'}`}>
{note.isSystem && 시스템} {note.title}
{note.senderName || '시스템'} · {formatDate(note.createdAt)}
{!note.isRead &&
}
))}
{total > 20 && (
{page} / {Math.ceil(total / 20)}
)} {/* 쪽지 상세 모달 */} {selectedNote && (
setSelectedNote(null)}>
e.stopPropagation()}>

{selectedNote.title}

{selectedNote.senderName} · {formatDate(selectedNote.createdAt)}
{selectedNote.content}
)}
); }