@@ -13,13 +13,26 @@ import { useAnchoredMenu } from '@shared/hooks/useAnchoredMenu';
1313import { belowOf } from '@shared/utils/anchorPosition' ;
1414import NoArticles from '@pages/myBookmark/components/NoArticles/NoArticles' ;
1515import { Icon } from '@pinback/design-system/icons' ;
16+ import { useQueryClient } from '@tanstack/react-query' ;
17+ import { usePutArticleReadStatus } from '@shared/apis/queries' ;
1618
1719const MyBookmark = ( ) => {
1820 const [ activeBadge , setActiveBadge ] = useState < 'all' | 'notRead' > ( 'all' ) ;
21+ const [ isEditOpen , setIsEditOpen ] = useState ( false ) ;
22+
1923 const [ searchParams ] = useSearchParams ( ) ;
2024 const category = searchParams . get ( 'category' ) ;
2125 const categoryId = searchParams . get ( 'id' ) ;
22- const [ isEditOpen , setIsEditOpen ] = useState ( false ) ;
26+
27+ const queryClient = useQueryClient ( ) ;
28+ const { data : articles } = useGetBookmarkArticles ( 0 , 20 ) ;
29+ const { data : unreadArticles } = useGetBookmarkUnreadArticles ( 0 , 20 ) ;
30+ const { data : categoryArticles } = useGetCategoryBookmarkArticles (
31+ categoryId ,
32+ 1 ,
33+ 10
34+ ) ;
35+ const { mutate : updateToReadStatus } = usePutArticleReadStatus ( ) ;
2336
2437 const {
2538 state : menu ,
@@ -32,14 +45,6 @@ const MyBookmark = () => {
3245 const getBookmarkTitle = ( id : number | null ) =>
3346 id == null ? '' : ( REMIND_MOCK_DATA . find ( ( d ) => d . id === id ) ?. title ?? '' ) ;
3447
35- const { data : articles } = useGetBookmarkArticles ( 0 , 20 ) ;
36- const { data : unreadArticles } = useGetBookmarkUnreadArticles ( 0 , 20 ) ;
37- const { data : categoryArticles } = useGetCategoryBookmarkArticles (
38- categoryId ,
39- 1 ,
40- 10
41- ) ;
42-
4348 const articlesToDisplay =
4449 activeBadge === 'all' ? articles ?. articles : unreadArticles ?. articles ;
4550
@@ -93,7 +98,27 @@ const MyBookmark = () => {
9398 content = { article . memo }
9499 category = { article . category . categoryName }
95100 date = { new Date ( article . createdAt ) . toLocaleDateString ( 'ko-KR' ) }
96- onClick = { ( ) => { } }
101+ onClick = { ( ) => {
102+ window . open ( article . url , '_blank' ) ;
103+
104+ updateToReadStatus ( article . articleId , {
105+ onSuccess : ( ) => {
106+ // TODO: 쿼리키 팩토리 패턴 적용
107+ queryClient . invalidateQueries ( {
108+ queryKey : [ 'bookmarkReadArticles' ] ,
109+ } ) ;
110+ queryClient . invalidateQueries ( {
111+ queryKey : [ 'bookmarkUnreadArticles' ] ,
112+ } ) ;
113+ queryClient . invalidateQueries ( {
114+ queryKey : [ 'categoryBookmarkArticles' ] ,
115+ } ) ;
116+ } ,
117+ onError : ( error ) => {
118+ console . error ( error ) ;
119+ } ,
120+ } ) ;
121+ } }
97122 onOptionsClick = { ( e ) =>
98123 openMenu ( article . articleId , e . currentTarget )
99124 }
0 commit comments