@@ -2,7 +2,7 @@ import React, { useEffect, useState } from 'react';
22import { useNavigate } from 'react-router' ;
33
44import { getSharePostDetail , getSharePostList } from '@/apis/share' ;
5- import { SharePostResponse } from '@/apis/share' ;
5+ import { SharePostResponse , SharePost } from '@/apis/share' ;
66import ModalBackgroundWrapper from '@/components/ModalBackgroundWrapper' ;
77import ModalOverlay from '@/components/ModalOverlay' ;
88
@@ -14,20 +14,30 @@ interface ShowShareAccessModalProps {
1414const ShowShareAccessModal = ( { onClose } : ShowShareAccessModalProps ) => {
1515 const navigate = useNavigate ( ) ;
1616
17- const [ sharePosts , setSharePosts ] = useState < SharePostResponse > ( ) ;
17+ const [ sharePosts , setSharePosts ] = useState < SharePost [ ] > ( [ ] ) ;
18+ const [ currentPage , setCurrentPage ] = useState ( 1 ) ;
19+ const [ hasMore , setHasMore ] = useState ( true ) ;
20+
21+ const fetchPosts = async ( page : number ) => {
22+ try {
23+ const data : SharePostResponse = await getSharePostList ( page , 10 ) ;
24+ setSharePosts ( ( prev ) => [ ...prev , ...data . content ] ) ;
25+ setHasMore ( page < data . totalPages ) ;
26+ } catch ( error ) {
27+ console . error ( '❌ 게시글 목록을 불러오는 데 실패했습니다.' , error ) ;
28+ }
29+ } ;
1830
1931 useEffect ( ( ) => {
20- const fetchPosts = async ( ) => {
21- try {
22- const data = await getSharePostList ( 1 , 10 ) ;
23- setSharePosts ( data ) ;
24- } catch ( error ) {
25- console . error ( '❌ 게시글 목록을 불러오는 데 실패했습니다.' , error ) ;
26- }
27- } ;
32+ fetchPosts ( currentPage ) ;
33+ } , [ currentPage ] ) ;
2834
29- fetchPosts ( ) ;
30- } , [ ] ) ;
35+ const handleScroll = ( e : React . UIEvent < HTMLDivElement > ) => {
36+ const { scrollTop, scrollHeight, clientHeight } = e . currentTarget ;
37+ if ( scrollTop + clientHeight >= scrollHeight - 10 && hasMore ) {
38+ setCurrentPage ( ( prev ) => prev + 1 ) ;
39+ }
40+ } ;
3141
3242 const handleNavigation = async ( sharePostId : number ) => {
3343 try {
@@ -55,8 +65,11 @@ const ShowShareAccessModal = ({ onClose }: ShowShareAccessModalProps) => {
5565 허락 여부를 체크해주세요!
5666 </ p >
5767 </ div >
58- < div className = "mt-6 flex max-h-60 min-h-auto w-[251px] flex-col gap-[10px] overflow-y-scroll [&::-webkit-scrollbar]:hidden" >
59- { sharePosts ?. content . map ( ( post ) => (
68+ < div
69+ className = "mt-6 flex max-h-60 min-h-auto w-[251px] flex-col gap-[10px] overflow-y-scroll [&::-webkit-scrollbar]:hidden"
70+ onScroll = { handleScroll }
71+ >
72+ { sharePosts ?. map ( ( post ) => (
6073 < button
6174 className = "text-gray-80 body-m flex h-10 w-full items-center justify-between gap-1 rounded-lg bg-white p-3"
6275 key = { post . sharePostId }
0 commit comments