103 lines
3.3 KiB
TypeScript
103 lines
3.3 KiB
TypeScript
import { InquiryList, Inquiry, InquirySaveResponse, CommonCode } from '@/types/Inquiry'
|
|
import { useAxios } from '@/hooks/useAxios'
|
|
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
|
|
import { useInquiryFilterStore } from '@/store/inquiryFilterStore'
|
|
import { useMemo } from 'react'
|
|
import { useSessionStore } from '@/store/session'
|
|
|
|
export function useInquiry(
|
|
qnoNo?: number,
|
|
compCd?: string,
|
|
): {
|
|
inquiryList: InquiryList[]
|
|
isLoadingInquiryList: boolean
|
|
inquiryDetail: Inquiry | null
|
|
isLoadingInquiryDetail: boolean
|
|
isSavingInquiry: boolean
|
|
saveInquiry: (formData: FormData) => Promise<InquirySaveResponse>
|
|
downloadFile: (encodeFileNo: number) => Promise<File>
|
|
commonCodeList: CommonCode[]
|
|
} {
|
|
const queryClient = useQueryClient()
|
|
const { inquiryListRequest, offset } = useInquiryFilterStore()
|
|
const { session } = useSessionStore()
|
|
const { axiosInstance } = useAxios()
|
|
|
|
const { data: inquiryList, isLoading: isLoadingInquiryList } = useQuery({
|
|
queryKey: ['inquiryList', inquiryListRequest, offset],
|
|
queryFn: async () => {
|
|
try {
|
|
const resp = await axiosInstance(null).get<{ data: InquiryList[] }>(`/api/qna/list`, {
|
|
params: { inquiryListRequest, startRow: offset, endRow: offset + 9 },
|
|
})
|
|
return resp.data.data
|
|
} catch (error: any) {
|
|
console.error(error.response.data)
|
|
return []
|
|
}
|
|
},
|
|
enabled: !!inquiryListRequest,
|
|
})
|
|
|
|
const inquriyListData = useMemo(() => {
|
|
if (isLoadingInquiryList) {
|
|
return { inquiryList: [] }
|
|
}
|
|
return {
|
|
inquiryList: inquiryList ?? [],
|
|
}
|
|
}, [inquiryList, isLoadingInquiryList])
|
|
|
|
const { data: inquiryDetail, isLoading: isLoadingInquiryDetail } = useQuery({
|
|
queryKey: ['inquiryDetail', qnoNo, compCd, session?.userId],
|
|
queryFn: async () => {
|
|
try {
|
|
const resp = await axiosInstance(null).get<{ data: Inquiry }>(`/api/qna/detail`, {
|
|
params: { qnoNo, compCd, langCd: 'JA', loginId: session?.userId ?? '' },
|
|
})
|
|
return resp.data.data
|
|
} catch (error: any) {
|
|
console.error(error.response)
|
|
return null
|
|
}
|
|
},
|
|
enabled: qnoNo !== undefined && compCd !== undefined,
|
|
})
|
|
|
|
const { mutateAsync: saveInquiry, isPending: isSavingInquiry } = useMutation({
|
|
mutationFn: async (formData: FormData) => {
|
|
const resp = await axiosInstance(null).post<{ data: InquirySaveResponse }>('/api/qna/save', formData)
|
|
return resp.data.data
|
|
},
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: ['inquiryList'] })
|
|
},
|
|
})
|
|
|
|
const downloadFile = async (encodeFileNo: number) => {
|
|
const resp = await axiosInstance(null).get<File>(`/api/qna/file`, { params: { encodeFileNo } })
|
|
return resp.data
|
|
}
|
|
|
|
const { data: commonCodeList, isLoading: isLoadingCommonCodeList } = useQuery({
|
|
queryKey: ['commonCodeList'],
|
|
queryFn: async () => {
|
|
const resp = await axiosInstance(null).get<{ data: CommonCode[] }>(`/api/qna`)
|
|
return resp.data
|
|
},
|
|
staleTime: Infinity,
|
|
gcTime: Infinity,
|
|
})
|
|
|
|
return {
|
|
inquiryList: inquriyListData.inquiryList,
|
|
inquiryDetail: inquiryDetail ?? null,
|
|
isLoadingInquiryList,
|
|
isLoadingInquiryDetail,
|
|
isSavingInquiry,
|
|
saveInquiry,
|
|
downloadFile,
|
|
commonCodeList: commonCodeList?.data ?? [],
|
|
}
|
|
}
|