|
1 | 1 | 'use client';
|
2 | 2 |
|
3 |
| -import { useEffect } from 'react'; |
4 |
| -import { useInView } from 'react-intersection-observer'; |
5 |
| -import { useInfiniteQuery } from '@tanstack/react-query'; |
6 | 3 | import { getBoardList } from '@/service/board';
|
7 | 4 | import { BoardList } from '@/types/types';
|
| 5 | +import useInfiniteScroll from '../common/useInfiniteScroll'; |
8 | 6 |
|
9 |
| -interface InfiniteScrollProps { |
10 |
| - infiniteQueryKey: string[]; |
11 |
| - pageParameter?: number; |
12 |
| - pageSize?: number; |
13 |
| - inViewThreshold?: number; |
14 |
| -} |
15 |
| - |
16 |
| -export default function useGetBoardList({ |
17 |
| - infiniteQueryKey, |
18 |
| - pageParameter = 1, |
19 |
| - pageSize = 5, |
20 |
| -}: InfiniteScrollProps) { |
21 |
| - const { data, fetchNextPage, isLoading, hasNextPage, isFetchingNextPage } = |
22 |
| - useInfiniteQuery({ |
23 |
| - queryKey: infiniteQueryKey, |
24 |
| - queryFn: ({ pageParam = pageParameter }): Promise<BoardList> => |
25 |
| - getBoardList({ pageParam, pageSize }), |
26 |
| - getNextPageParam: (boardlist) => |
27 |
| - boardlist.last ? undefined : boardlist.number + 1, |
28 |
| - select: (d) => ({ |
29 |
| - pages: d.pages.flatMap((page) => page), |
30 |
| - pageParams: d.pageParams, |
31 |
| - }), |
| 7 | +export default function useGetBoardList() { |
| 8 | + const { data, isLoading, Observer, hasNextPage } = |
| 9 | + useInfiniteScroll<BoardList>({ |
| 10 | + queryKey: 'boardsList', |
| 11 | + firstPageParam: 0, |
| 12 | + queryFn: getBoardList, |
| 13 | + getNextPageParamFn: (boardList) => |
| 14 | + boardList.last ? undefined : boardList.number + 1, |
32 | 15 | });
|
33 | 16 |
|
34 |
| - // 무한 스크롤 화면 가장 아래 부분 탐지하는 observer |
35 |
| - function Observer({ children }: { children: React.ReactNode }) { |
36 |
| - const { ref, inView } = useInView({ threshold: 1 }); |
37 |
| - |
38 |
| - useEffect(() => { |
39 |
| - if (inView && hasNextPage) { |
40 |
| - fetchNextPage(); |
41 |
| - } |
42 |
| - }, [inView]); |
43 |
| - |
44 |
| - if (!hasNextPage || !data) return null; |
45 |
| - return ( |
46 |
| - <div ref={ref}>{isLoading || isFetchingNextPage ? children : null}</div> |
47 |
| - ); |
48 |
| - } |
49 |
| - |
50 | 17 | return {
|
51 | 18 | Observer,
|
52 | 19 | data,
|
|
0 commit comments