11'use client'
22
3- import { useEffect , useRef , useState } from 'react'
3+ import { useCallback , useEffect , useRef , useState } from 'react'
44import { FetchLoading } from 'fetch-loading'
55import { Badge } from '@/components/ui/badge'
66import {
@@ -12,45 +12,45 @@ import {
1212 CardTitle ,
1313} from '@/components/ui/card'
1414import fetchFeedItems from '@/api/fetchFeedItems'
15+ import { FeedItemsType } from '@/types/types'
16+ import { getItemFromSessionStorage } from '@/utils/getItemFromSessionStorage'
1517
1618const Feed = ( ) => {
1719 const PAGE_SIZE = 10
1820 const nextPage = useRef < number > ( 1 )
19- const [ feedItems , setFeedItems ] = useState <
20- Array < {
21- postId : number
22- id : number
23- name : string
24- email : string
25- body : string
26- } >
27- > ( [ ] )
21+ const [ feedItems , setFeedItems ] = useState < Array < FeedItemsType > > ( [ ] )
2822 const [ isLoading , setIsLoading ] = useState ( false )
2923
30- const loadMore = async ( ) => {
24+ const loadMoreItems = useCallback ( async ( ) => {
3125 if ( isLoading ) return
3226 setIsLoading ( true )
3327 await fetchFeedItems ( nextPage , PAGE_SIZE , setFeedItems )
3428 setIsLoading ( false )
35- }
29+ } , [ isLoading ] )
3630
3731 useEffect ( ( ) => {
38- loadMore ( )
39- } , [ ] )
32+ const parsedStorageData = getItemFromSessionStorage ( )
33+ setFeedItems ( parsedStorageData ?. feedItems || [ ] )
34+ nextPage . current = parsedStorageData ?. nextPage || 1
35+
36+ if ( ! parsedStorageData ?. feedItems ?. length ) {
37+ loadMoreItems ( )
38+ }
39+ } , [ loadMoreItems ] )
4040
4141 useEffect ( ( ) => {
4242 const handleScroll = ( ) => {
4343 if (
4444 window . innerHeight + window . scrollY >=
4545 document . body . offsetHeight - 96
4646 ) {
47- loadMore ( )
47+ loadMoreItems ( )
4848 }
4949 }
5050
5151 window . addEventListener ( 'scroll' , handleScroll )
5252 return ( ) => window . removeEventListener ( 'scroll' , handleScroll )
53- } , [ isLoading ] )
53+ } , [ isLoading , loadMoreItems ] )
5454
5555 return (
5656 < main
0 commit comments