11import { infiniteQueryOptions , queryOptions } from '@tanstack/react-query' ;
2- import type { ChatMessagesResponse } from './entity' ;
3- import { getChatMessages , getChatRooms } from '.' ;
2+ import { getChatMessages , getChatRooms , getSearchChat , getInvitableFriends } from '@/apis/chat' ;
3+ import type { ChatMessagesResponse , SortBy } from '@/apis/chat/entity' ;
4+
5+ interface ChatMessagesPageParam {
6+ page : number ;
7+ useMessageId : boolean ;
8+ }
49
510export const chatQueryKeys = {
611 all : [ 'chat' ] as const ,
712 rooms : ( ) => [ ...chatQueryKeys . all , 'rooms' ] as const ,
8- messages : ( chatRoomId : number ) => [ ...chatQueryKeys . all , 'messages' , chatRoomId ] as const ,
13+ messagesByRoom : ( chatRoomId : number ) => [ ...chatQueryKeys . all , 'messages' , chatRoomId ] as const ,
14+ messages : ( chatRoomId : number , messageId ?: number ) =>
15+ [ ...chatQueryKeys . messagesByRoom ( chatRoomId ) , messageId ?? 'latest' ] as const ,
916 disabledMessages : ( ) => [ ...chatQueryKeys . all , 'messages' , 'disabled' ] as const ,
17+ search : ( keyword : string ) => [ ...chatQueryKeys . all , 'search' , keyword ] ,
18+ invite : ( query : string , sortBy : SortBy ) => [ ...chatQueryKeys . all , 'invite' , query , sortBy ] ,
1019} ;
1120
1221export const chatQueries = {
@@ -15,18 +24,35 @@ export const chatQueries = {
1524 queryKey : chatQueryKeys . rooms ( ) ,
1625 queryFn : getChatRooms ,
1726 } ) ,
18- messages : ( chatRoomId ?: number , limit = 20 ) =>
27+ messages : ( chatRoomId ?: number , messageId ?: number , limit = 20 ) =>
1928 infiniteQueryOptions ( {
20- queryKey : chatRoomId ? chatQueryKeys . messages ( chatRoomId ) : chatQueryKeys . disabledMessages ( ) ,
29+ queryKey : chatRoomId ? chatQueryKeys . messages ( chatRoomId , messageId ) : chatQueryKeys . disabledMessages ( ) ,
2130 queryFn : ( { pageParam } ) =>
2231 getChatMessages ( {
2332 chatRoomId : chatRoomId ! ,
24- page : pageParam ,
33+ messageId : pageParam . useMessageId ? messageId : undefined ,
34+ page : pageParam . page ,
2535 limit,
2636 } ) ,
27- initialPageParam : 1 ,
37+ initialPageParam : { page : 1 , useMessageId : Boolean ( messageId ) } satisfies ChatMessagesPageParam ,
2838 getNextPageParam : ( lastPage : ChatMessagesResponse ) =>
29- lastPage . currentPage < lastPage . totalPage ? lastPage . currentPage + 1 : undefined ,
39+ lastPage . currentPage < lastPage . totalPage
40+ ? ( { page : lastPage . currentPage + 1 , useMessageId : false } satisfies ChatMessagesPageParam )
41+ : undefined ,
42+ getPreviousPageParam : ( firstPage : ChatMessagesResponse ) =>
43+ firstPage . currentPage > 1
44+ ? ( { page : firstPage . currentPage - 1 , useMessageId : false } satisfies ChatMessagesPageParam )
45+ : undefined ,
3046 enabled : Boolean ( chatRoomId ) ,
3147 } ) ,
48+ search : ( keyword : string ) =>
49+ queryOptions ( {
50+ queryKey : chatQueryKeys . search ( keyword ) ,
51+ queryFn : ( ) => getSearchChat ( { keyword, page : 1 , limit : 20 } ) ,
52+ } ) ,
53+ invite : ( query : string , sortBy : SortBy ) =>
54+ queryOptions ( {
55+ queryKey : chatQueryKeys . invite ( query , sortBy ) ,
56+ queryFn : ( ) => getInvitableFriends ( { query, sortBy, page : 1 , limit : 20 } ) ,
57+ } ) ,
3258} ;
0 commit comments