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 downloadFile: (encodeFileNo: number) => Promise 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(`/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 ?? [], } }