'use client'; import { useCallback, useEffect, useState } from 'react'; import { fetchApi } from '@/lib/utils/client'; import Loading from '@/app/component/Loading'; import Pagination from '@/app/component/Pagination'; import NavTabs from '../navTabs'; import { ITEM_KIND_LABEL, ITEM_KIND_DESC, DIRECT_USE_KINDS } from '@/types/account/items'; import type { MemberItemRow, MemberItemsResponse, UseItemResult } from '@/types/account/items'; const PER_PAGE = 20; export default function MemberItemsPage() { const [items, setItems] = useState([]); const [total, setTotal] = useState(0); const [page, setPage] = useState(1); const [loading, setLoading] = useState(true); const [busyID, setBusyID] = useState(null); const load = useCallback(async () => { setLoading(true); const res = await fetchApi(`/api/member/me/items?page=${page}&perPage=${PER_PAGE}`, { silent: true }); if (res.success && res.data) { setItems(res.data.list); setTotal(res.data.total); } else { setItems([]); setTotal(0); } setLoading(false); }, [page]); useEffect(() => { load(); }, [load]); const useItem = async (item: MemberItemRow) => { if (item.kind === 'PostReset' && !confirm('신고·댓글이 없는 예전 게시글이 모두 삭제됩니다. 계속하시겠어요?')) { return; } setBusyID(item.id); const res = await fetchApi(`/api/member/me/items/${item.id}/use`, { method: 'POST', silent: true }); setBusyID(null); if (res.success && res.data) { alert(res.data.message || '아이템을 사용했습니다.'); await load(); } else { alert(res.message || '아이템 사용에 실패했습니다.'); } }; return ( <>

아이템

상점에서 구매한 소모품 아이템입니다. 채팅 밴 해제·예전 글 초기화·경험치 부스터는 여기서 바로 사용하고, 쪽지권·프로필 변경권은 해당 기능 이용 시 자동으로 사용됩니다.

미사용 {total.toLocaleString()}개
{loading ? ( ) : items.length === 0 ? (
보유한 아이템이 없습니다.
) : ( <>
    {items.map((item) => { const directUse = DIRECT_USE_KINDS.includes(item.kind); return (
  • {item.thumbnail ? ( // eslint-disable-next-line @next/next/no-img-element {item.productName} ) : ( 🎁 )}
    {ITEM_KIND_LABEL[item.kind] ?? item.productName} {item.kind === 'ExpBooster' && item.durationDays > 0 && ( ({item.durationDays}일) )}
    {ITEM_KIND_DESC[item.kind]}
    {directUse ? ( ) : ( 기능 이용 시 사용 )}
  • ); })}

)}
); }