diff --git a/packages/react-native/src/apis/queries/mypage/useMyBadgeQuery.ts b/packages/react-native/src/apis/queries/mypage/useMyBadgeQuery.ts index 9f76d312..78e72088 100644 --- a/packages/react-native/src/apis/queries/mypage/useMyBadgeQuery.ts +++ b/packages/react-native/src/apis/queries/mypage/useMyBadgeQuery.ts @@ -4,12 +4,18 @@ import { BADGE_MAPPER, Region } from '@/constants/CITY'; import QUERY_KEYS from '@/constants/QUERY_KEYS'; import { ServerResponse } from '@/types/response'; import unique from '@/utils/unique'; +import { badgePath } from '@/components/common/Badge'; interface BadgeResponse { region: Region; count: number; } +interface Badge { + count: number; + badgeRegion: keyof typeof badgePath; +} + export default function useMyBadgeQuery() { const authAxios = useAuthAxios(); const getBadges = async () => { @@ -21,7 +27,16 @@ export default function useMyBadgeQuery() { badgeRegion: BADGE_MAPPER[badge.region], })); - return unique(badges, 'badgeRegion'); + return badges.reduce((merge, item) => { + const findedItem = merge.find( + (element) => element.badgeRegion === item.badgeRegion, + ); + if (findedItem) { + findedItem.count += item.count; + return merge; + } + return [...merge, item]; + }, [] as Badge[]); }; return useSuspenseQuery({ diff --git a/packages/react-native/src/apis/queries/spot/useSpotDetailQuery.ts b/packages/react-native/src/apis/queries/spot/useSpotDetailQuery.ts index df47d534..0b055022 100644 --- a/packages/react-native/src/apis/queries/spot/useSpotDetailQuery.ts +++ b/packages/react-native/src/apis/queries/spot/useSpotDetailQuery.ts @@ -9,7 +9,7 @@ interface UseSpotDetailQueryParams { } export interface SpotResponse { - id: number; + id?: number; contentId: number; title: string; image: string; diff --git a/packages/react-native/src/apis/useAuthAxios.ts b/packages/react-native/src/apis/useAuthAxios.ts index 352358ef..4e2fd22a 100644 --- a/packages/react-native/src/apis/useAuthAxios.ts +++ b/packages/react-native/src/apis/useAuthAxios.ts @@ -24,9 +24,9 @@ const getNewToken = async (baseURL: string, refresh: string) => { }; const requestDebounceKeyValue: Record = {}; -const controller = new AbortController(); const useAuthAxios = () => { + const controller = new AbortController(); const { access, refresh, setAccess, setRefresh } = useToken(); const instance = axios.create({ @@ -53,7 +53,6 @@ const useAuthAxios = () => { const requestKey = config.url; const isExistRequest = requestDebounceKeyValue[requestKey] === currentTime.getTime(); - if (isExistRequest) { controller.abort(); return config; diff --git a/packages/react-native/src/pages/TripPlanner/TripPlannerDetail.tsx b/packages/react-native/src/pages/TripPlanner/TripPlannerDetail.tsx index bcef057c..605dede6 100644 --- a/packages/react-native/src/pages/TripPlanner/TripPlannerDetail.tsx +++ b/packages/react-native/src/pages/TripPlanner/TripPlannerDetail.tsx @@ -29,7 +29,7 @@ export default withSuspense(function TripPlannerDetail() { ); const deleteSpot = () => { - if (!targetSpot) return; + if (!targetSpot || !targetSpot.id) return; deleteSelectedSpots(targetSpot.id); };