47 lines
1.6 KiB
TypeScript
47 lines
1.6 KiB
TypeScript
// 협상 도메인의 변경(useMutation) 훅.
|
|
import { useMutation, useQueryClient } from '@tanstack/react-query'
|
|
import { negotiationApi } from './negotiation.api'
|
|
import { negotiationKeys } from './negotiation.keys'
|
|
import type { ExtraInfoRequest, RejectRequest } from './negotiation.type'
|
|
|
|
/**
|
|
* 협상 세션 참여: 성공 시 세션 목록 캐시를 무효화해 상태를 갱신한다.
|
|
*/
|
|
export function useParticipateMutation() {
|
|
const queryClient = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: (sessionId: string) => negotiationApi.participate(sessionId),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: negotiationKeys.sessions() })
|
|
},
|
|
})
|
|
}
|
|
|
|
/**
|
|
* 협상 세션 거부: 성공 시 세션 목록 캐시를 무효화한다.
|
|
*/
|
|
export function useRejectMutation() {
|
|
const queryClient = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: ({ sessionId, request }: { sessionId: string; request: RejectRequest }) =>
|
|
negotiationApi.reject(sessionId, request),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: negotiationKeys.sessions() })
|
|
},
|
|
})
|
|
}
|
|
|
|
/**
|
|
* 협상완료 부가정보 저장: 성공 시 세션 목록 캐시를 무효화한다.
|
|
*/
|
|
export function useSaveExtraInfoMutation() {
|
|
const queryClient = useQueryClient()
|
|
return useMutation({
|
|
mutationFn: ({ sessionId, request }: { sessionId: string; request: ExtraInfoRequest }) =>
|
|
negotiationApi.saveExtraInfo(sessionId, request),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: negotiationKeys.sessions() })
|
|
},
|
|
})
|
|
}
|