Skip to content

Commit 7daef9a

Browse files
authored
Merge pull request #345 from Team-TenTen/bug/#344/link-like
링크 좋아요가 반영되지 않는 문제 수정
2 parents 8aeaaa3 + 95f816e commit 7daef9a

File tree

5 files changed

+37
-49
lines changed

5 files changed

+37
-49
lines changed

src/components/PopularLink/PopularLinkList/PopularLinkList.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ const PopularLinkList = () => {
5454
url={link.url}
5555
tagName={link.tagName}
5656
tagColor={link.tagColor as ChipColors}
57-
isInitLiked={link.isLiked}
58-
likeInitCount={link.likeCount}
57+
isLiked={link.isLiked}
58+
likeCount={link.likeCount}
5959
type="card"
6060
/>
6161
</SwiperSlide>

src/components/common/LinkItem/LinkItem.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ export interface LinkItemProps {
4444
tagName: string
4545
tagColor: ChipColors
4646
readUsers?: linkViewHistories[]
47-
isInitLiked?: boolean
48-
likeInitCount: number
47+
isLiked: boolean
48+
likeCount: number
4949
read?: boolean
5050
summary?: boolean
5151
edit?: boolean
@@ -62,8 +62,8 @@ const LinkItem = ({
6262
tagName,
6363
tagColor,
6464
readUsers,
65-
isInitLiked,
66-
likeInitCount,
65+
isLiked,
66+
likeCount,
6767
read = false,
6868
summary = false,
6969
edit = false,
@@ -110,11 +110,9 @@ const LinkItem = ({
110110
linkId,
111111
})
112112
const { handleSaveReadInfo } = useReadSaveLink({ spaceId, linkId })
113-
const { isLiked, likeCount, handleClickLike } = useLikeLink({
113+
const { handleClickLike } = useLikeLink({
114114
spaceId,
115115
linkId,
116-
isLikedValue: isInitLiked,
117-
likeCountValue: likeInitCount,
118116
})
119117
return (
120118
<>
Lines changed: 14 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,35 @@
1-
import { useCallback, useMemo, useState } from 'react'
1+
import { useCallback } from 'react'
22
import { useDeleteLikeLink, usePostLikeLink } from '@/services/link/useLink'
3-
import { debounce } from 'lodash'
4-
import useToggle from '../../Toggle/hooks/useToggle'
53

64
export interface UseLikeLinkProps {
75
spaceId?: number
86
linkId: number
9-
isLikedValue?: boolean
10-
likeCountValue: number
117
}
128

13-
const useLikeLink = ({
14-
linkId,
15-
isLikedValue,
16-
likeCountValue,
17-
}: UseLikeLinkProps) => {
18-
const [isLiked, likeToggle] = useToggle(isLikedValue)
19-
const [likeCount, setLikeCount] = useState<number>(likeCountValue)
9+
const useLikeLink = ({ spaceId, linkId }: UseLikeLinkProps) => {
10+
const { mutate: deleteLikeLink } = useDeleteLikeLink({ spaceId })
11+
const { mutate: postLikeLink } = usePostLikeLink({ spaceId })
2012

21-
const { mutate: deleteLikeLink } = useDeleteLikeLink()
22-
const { mutate: postLikeLink } = usePostLikeLink()
13+
const handleRemoveLike = useCallback(() => {
14+
deleteLikeLink({ linkId })
15+
}, [deleteLikeLink, linkId])
2316

24-
const debounceUnLikeLink = useMemo(
25-
() =>
26-
debounce(async () => {
27-
await deleteLikeLink({ linkId })
28-
}, 300),
29-
[deleteLikeLink, linkId],
30-
)
31-
32-
const debounceLikeLink = useMemo(
33-
() =>
34-
debounce(async () => {
35-
await postLikeLink({ linkId })
36-
}, 300),
37-
[postLikeLink, linkId],
38-
)
17+
const handleAddLike = useCallback(() => {
18+
postLikeLink({ linkId })
19+
}, [postLikeLink, linkId])
3920

4021
const handleClickLike = useCallback(
4122
(isLike: boolean) => {
42-
likeToggle()
4323
if (isLike) {
44-
setLikeCount((prev) => prev - 1)
45-
debounceUnLikeLink()
24+
handleRemoveLike()
4625
} else {
47-
setLikeCount((prev) => prev + 1)
48-
debounceLikeLink()
26+
handleAddLike()
4927
}
5028
},
51-
[likeToggle, debounceUnLikeLink, debounceLikeLink],
29+
[handleRemoveLike, handleAddLike],
5230
)
5331

54-
return { isLiked, likeCount, handleClickLike }
32+
return { handleClickLike }
5533
}
5634

5735
export default useLikeLink

src/components/common/LinkList/LinkList.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,8 @@ const LinkList = ({
151151
tagName={link.tagName}
152152
tagColor={link.tagColor}
153153
readUsers={link.linkViewHistories}
154-
isInitLiked={link.isLiked}
155-
likeInitCount={link.likeCount}
154+
isLiked={link.isLiked}
155+
likeCount={link.likeCount}
156156
read={read}
157157
summary={summary}
158158
edit={edit}

src/services/link/useLink.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,9 @@ export const fetchGetPopularLinks = async () => {
124124
}
125125

126126
// 링크 좋아요
127-
export const usePostLikeLink = () => {
127+
export const usePostLikeLink = ({ spaceId }: { spaceId?: number }) => {
128+
const queryClient = useQueryClient()
129+
128130
return useMutation({
129131
mutationFn: async (query: ILikeLink['query']) => {
130132
const response = await apiClient.post(
@@ -133,19 +135,29 @@ export const usePostLikeLink = () => {
133135
)
134136
return response
135137
},
138+
onSuccess: () => {
139+
queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.LINKS, spaceId] })
140+
queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.POPULAR_LINKS] })
141+
},
136142
onError: (error: Error) => {
137143
console.log(error)
138144
},
139145
})
140146
}
141147

142148
// 링크 좋아요 취소
143-
export const useDeleteLikeLink = () => {
149+
export const useDeleteLikeLink = ({ spaceId }: { spaceId?: number }) => {
150+
const queryClient = useQueryClient()
151+
144152
return useMutation({
145153
mutationFn: async (query: ILikeLink['query']) => {
146154
const response = await apiClient.delete(`/api/links/${query.linkId}/like`)
147155
return response
148156
},
157+
onSuccess: () => {
158+
queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.LINKS, spaceId] })
159+
queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.POPULAR_LINKS] })
160+
},
149161
onError: (error: Error) => {
150162
console.log(error)
151163
},

0 commit comments

Comments
 (0)