Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions src/app/university/application/ScorePageContent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,7 @@ const ScorePageContent = () => {
data: scoreResponseData = initialData,
isError,
isLoading,
} = useGetApplicationsList({
retry: false,
});
} = useGetApplicationsList();

const filteredAndSortedData = useMemo(() => {
// ✨ 1. 대학 이름(koreanName)을 기준으로 중복을 제거하는 헬퍼 함수
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ const ClientModal = () => {
return (
<>
{isFetching ? (
<div aria-live="polite" aria-busy="true" className="fixed inset-0 z-50 flex items-center justify-center">
<div aria-live="polite" aria-busy="true" className="fixed inset-0 z-50 flex items-center justify-center bg-black/30 cursor-wait">
<CloudSpinner />
</div>
) : null}
Expand Down
34 changes: 23 additions & 11 deletions src/lib/react-query/queryClient.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,41 @@
import type { AxiosError } from "axios";

import { toast } from "@/lib/zustand/useToastStore";
import { QueryClient } from "@tanstack/react-query";
import { MutationCache, QueryCache, QueryClient } from "@tanstack/react-query";

const queryClient = new QueryClient({
queryCache: new QueryCache({
onError: (error) => {
// query 실패 시 전역 에러 토스트 (401 제외)
const axiosError = error as AxiosError<{ message?: string }>;
const status = axiosError?.response?.status;
if (status === 401) return; // 인증 오류는 토스트 표시 X

const errorMessage =
axiosError?.response?.data?.message || axiosError?.message || "오류가 발생했습니다. 다시 시도해주세요.";
toast.error(errorMessage);
},
}),
mutationCache: new MutationCache({
onError: (error) => {
// mutation 실패 시 전역 에러 토스트
const axiosError = error as AxiosError<{ message?: string }>;
const errorMessage =
axiosError?.response?.data?.message || axiosError?.message || "오류가 발생했습니다. 다시 시도해주세요.";
toast.error(errorMessage);
},
}),
defaultOptions: {
queries: {
staleTime: 5 * 60 * 1000, // 데이터 신선도(5분)
gcTime: 30 * 60 * 1000, // 캐시 보존시간(30분)
retry: (failureCount, error) => {
const status = (error as AxiosError | undefined)?.response?.status;
if (status === 401) return false; // 인증 오류는 재시도 X
return failureCount < 3; // 그 외에는 최대 3회까지 재시도
return failureCount < 1; // 그 외에는 최대 1회까지 재시도
},
refetchOnWindowFocus: false, // 창 포커스 복귀 시 refetch 비활성
},
mutations: {
onError: (error) => {
// mutation 실패 시 전역 에러 토스트
const axiosError = error as AxiosError<{ message?: string }>;
const errorMessage =
axiosError?.response?.data?.message || axiosError?.message || "오류가 발생했습니다. 다시 시도해주세요.";
toast.error(errorMessage);
},
},
},
});

Expand Down
Loading