import { useEffect, useState } from 'react'; // 클라이언트사이드 페이지네이션 단일 출처. // 서버가 전량(또는 큰 페이지)을 한 번에 주고, 검색·필터를 프론트에서 거른 뒤 // 그 결과 배열을 화면용으로 잘라 보여줄 때 쓴다(견적·카드 목록). // 서버 page/size 를 직접 보내는 useServerList 와 달리, 이 훅은 이미 받은 배열을 slice 만 한다. export function useClientPagination(items: T[], pageSize = 10) { const [page, setPage] = useState(1); const totalCount = items.length; const totalPages = Math.max(1, Math.ceil(totalCount / pageSize)); // 필터·삭제로 결과가 줄어 현재 페이지가 범위를 벗어나면 마지막 페이지로 당긴다. useEffect(() => { if (page > totalPages) setPage(totalPages); }, [page, totalPages]); const safePage = Math.min(page, totalPages); const pageItems = items.slice((safePage - 1) * pageSize, safePage * pageSize); return { page: safePage, setPage, pageSize, totalPages, totalCount, pageItems }; }