Skip to content

Commit 9126405

Browse files
outsource feed use effects
1 parent 7675483 commit 9126405

File tree

3 files changed

+58
-28
lines changed

3 files changed

+58
-28
lines changed

src/components/feed/Feed.tsx

Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use client'
22

3-
import { useCallback, useContext, useEffect, useRef, useState } from 'react'
3+
import { useCallback, useContext, useRef, useState } from 'react'
44
import { FetchLoading } from 'fetch-loading'
55
import { Badge } from '@/components/ui/badge'
66
import { Button } from '@/components/ui/button'
@@ -20,11 +20,12 @@ import {
2020
CarouselPrevious,
2121
} from '@/components/ui/carousel'
2222
import { Skeleton } from '@/components/ui/skeleton'
23-
import fetchFeedItems from '@/api/fetchFeedItems'
2423
import { ContextContentLoaded } from '@/context/ContextContentLoaded'
2524
import { ContextTopTenPosts } from '@/context/ContextTopTenPosts'
2625
import { FeedItemsType } from '@/types/types'
27-
import { getItemFromSessionStorage } from '@/utils/getItemFromSessionStorage'
26+
import { fetchFeedItems } from '@/api/fetchFeedItems'
27+
import { useLoadFeedItems } from '@/hooks/useLoadFeedItems'
28+
import { useLoadMoreFeedItems } from '@/hooks/useLoadMoreFeedItems'
2829

2930
const Feed = () => {
3031
const contextContentLoaded = useContext(ContextContentLoaded)
@@ -58,31 +59,8 @@ const Feed = () => {
5859
setIsLoading(false)
5960
}, [isLoading, setContentLoaded])
6061

61-
useEffect(() => {
62-
const parsedStorageData = getItemFromSessionStorage()
63-
setFeedItems(parsedStorageData?.feedItems || [])
64-
nextPage.current = parsedStorageData?.nextPage || 1
65-
66-
if (!parsedStorageData?.feedItems?.length) {
67-
loadMoreItems()
68-
} else {
69-
setContentLoaded((prev) => ({ ...prev, posts: true }))
70-
}
71-
}, [loadMoreItems, setContentLoaded])
72-
73-
useEffect(() => {
74-
const handleScroll = () => {
75-
if (
76-
window.innerHeight + window.scrollY >=
77-
document.body.offsetHeight - 96
78-
) {
79-
loadMoreItems()
80-
}
81-
}
82-
83-
window.addEventListener('scroll', handleScroll)
84-
return () => window.removeEventListener('scroll', handleScroll)
85-
}, [isLoading, loadMoreItems])
62+
useLoadFeedItems(loadMoreItems, nextPage, setContentLoaded, setFeedItems)
63+
useLoadMoreFeedItems(isLoading, loadMoreItems)
8664

8765
return (
8866
<main

src/hooks/useLoadFeedItems.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
'use client'
2+
3+
import { Dispatch, RefObject, SetStateAction, useEffect } from 'react'
4+
import { FeedItemsType } from '@/types/types'
5+
import { getItemFromSessionStorage } from '@/utils/getItemFromSessionStorage'
6+
7+
export const useLoadFeedItems = (
8+
loadMoreItems: () => Promise<void>,
9+
nextPage: RefObject<number>,
10+
setContentLoaded: Dispatch<
11+
SetStateAction<{
12+
posts: boolean
13+
quote: boolean
14+
users: boolean
15+
}>
16+
>,
17+
setFeedItems: Dispatch<SetStateAction<FeedItemsType[]>>
18+
) => {
19+
useEffect(() => {
20+
const parsedStorageData = getItemFromSessionStorage()
21+
setFeedItems(parsedStorageData?.feedItems || [])
22+
nextPage.current = parsedStorageData?.nextPage || 1
23+
24+
if (!parsedStorageData?.feedItems?.length) {
25+
loadMoreItems()
26+
} else {
27+
setContentLoaded((prev) => ({ ...prev, posts: true }))
28+
}
29+
}, [loadMoreItems, setContentLoaded])
30+
}

src/hooks/useLoadMoreFeedItems.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
'use client'
2+
3+
import { useEffect } from 'react'
4+
5+
export const useLoadMoreFeedItems = (
6+
isLoading: boolean,
7+
loadMoreItems: () => Promise<void>
8+
) => {
9+
useEffect(() => {
10+
const handleScroll = () => {
11+
if (
12+
window.innerHeight + window.scrollY >=
13+
document.body.offsetHeight - 96
14+
) {
15+
loadMoreItems()
16+
}
17+
}
18+
19+
window.addEventListener('scroll', handleScroll)
20+
return () => window.removeEventListener('scroll', handleScroll)
21+
}, [isLoading, loadMoreItems])
22+
}

0 commit comments

Comments
 (0)