From 4e272b09466426e54f3de6731871f9ab7e79c1cd Mon Sep 17 00:00:00 2001 From: d0422 Date: Tue, 24 Sep 2024 17:46:49 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20spot=20=EC=B6=94=EA=B0=80=EC=8B=9C?= =?UTF-8?q?=20contentTypeId=EB=A5=BC=20=EA=B0=99=EC=9D=B4=20=EC=A0=84?= =?UTF-8?q?=EC=86=A1=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mutations/useSelectedSpotAddMutation.ts | 36 +++++++++++++++++++ .../src/apis/queries/detail/useDetailQuery.ts | 2 ++ .../apis/queries/spot/useSpotDetailQuery.ts | 2 ++ packages/react-native/src/pages/Detail.tsx | 4 +++ .../react-native/src/pages/HomeSpotAdd.tsx | 22 +++++++++--- 5 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 packages/react-native/src/apis/mutations/useSelectedSpotAddMutation.ts diff --git a/packages/react-native/src/apis/mutations/useSelectedSpotAddMutation.ts b/packages/react-native/src/apis/mutations/useSelectedSpotAddMutation.ts new file mode 100644 index 00000000..e8ca51c7 --- /dev/null +++ b/packages/react-native/src/apis/mutations/useSelectedSpotAddMutation.ts @@ -0,0 +1,36 @@ +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { SpotResponse } from '../queries/spot/useSpotDetailQuery'; +import useAuthAxios from '../useAuthAxios'; +import QUERY_KEYS from '@/constants/QUERY_KEYS'; + +interface AddSpotToPlanRequest { + planId: number; + spotList: SpotResponse[]; +} + +export default function useSelectedSpotAddMutation() { + const authAxios = useAuthAxios(); + const queryClient = useQueryClient(); + + const addSpotToPlan = async ({ planId, spotList }: AddSpotToPlanRequest) => { + await authAxios.post( + `/api/schedule/selected-spot/${planId}`, + spotList.map((spot) => ({ + title: spot.title, + addr1: spot.addr1, + addr2: spot.addr2, + contentId: spot.contentId, + image: spot.image, + dist: spot.dist, + contentTypeId: spot.contentTypeId, + })), + ); + }; + + return useMutation({ + mutationFn: addSpotToPlan, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.TRIP_PLANS] }); + }, + }); +} diff --git a/packages/react-native/src/apis/queries/detail/useDetailQuery.ts b/packages/react-native/src/apis/queries/detail/useDetailQuery.ts index 2bc7b280..b9b3c337 100644 --- a/packages/react-native/src/apis/queries/detail/useDetailQuery.ts +++ b/packages/react-native/src/apis/queries/detail/useDetailQuery.ts @@ -18,6 +18,8 @@ interface DetailResponse { isLiked: boolean; likeCount: number; posterUrl: string; + contentTypeId: string; + dist: string; } export default function useDetailQuery({ diff --git a/packages/react-native/src/apis/queries/spot/useSpotDetailQuery.ts b/packages/react-native/src/apis/queries/spot/useSpotDetailQuery.ts index 3c888869..52f65e46 100644 --- a/packages/react-native/src/apis/queries/spot/useSpotDetailQuery.ts +++ b/packages/react-native/src/apis/queries/spot/useSpotDetailQuery.ts @@ -16,6 +16,8 @@ export interface SpotResponse { latitude: number; longitude: number; overview: string; + contentTypeId: string; + dist: string; } export default function useSpotDetailQuery({ id }: UseSpotDetailQueryParams) { diff --git a/packages/react-native/src/pages/Detail.tsx b/packages/react-native/src/pages/Detail.tsx index 72b8d36a..d2118b59 100644 --- a/packages/react-native/src/pages/Detail.tsx +++ b/packages/react-native/src/pages/Detail.tsx @@ -34,6 +34,8 @@ const Detail = withSuspense(() => { isLiked, city, region, + dist, + contentTypeId, } = data; const handleAddPlan = () => { @@ -50,6 +52,8 @@ const Detail = withSuspense(() => { longitude, latitude, overview, + dist, + contentTypeId, }, ], }); diff --git a/packages/react-native/src/pages/HomeSpotAdd.tsx b/packages/react-native/src/pages/HomeSpotAdd.tsx index ac9c6f06..7d6ccfbb 100644 --- a/packages/react-native/src/pages/HomeSpotAdd.tsx +++ b/packages/react-native/src/pages/HomeSpotAdd.tsx @@ -1,14 +1,15 @@ import { useState } from 'react'; import { Dimensions, View } from 'react-native'; import { Button, FloatingPlusButton, Font } from 'design-system'; -import { useRoute } from '@react-navigation/native'; +import { useNavigation, useRoute } from '@react-navigation/native'; import useTripPlansQuery from '@/apis/queries/tripPlan/useTripPlansQuery'; import Header from '@/components/common/Header'; import withSuspense from '@/components/HOC/withSuspense'; import EmptyPlan from '@/components/tripPlan/EmptyPlan'; import TripPlanCard, { CARD_GAP } from '@/components/tripPlan/TripPlanCard'; import BackGroundGradient from '@/layouts/BackGroundGradient'; -import { StackRouteProps } from '@/types/navigation'; +import { StackNavigation, StackRouteProps } from '@/types/navigation'; +import useSelectedSpotAddMutation from '@/apis/mutations/useSelectedSpotAddMutation'; const { height } = Dimensions.get('window'); @@ -17,6 +18,15 @@ export default withSuspense(function HomeSpotAdd() { const { data } = useTripPlansQuery(); const [tripId, setTripId] = useState(); const isEmpty = data.length === 0; + const { mutateAsync } = useSelectedSpotAddMutation(); + const navigation = useNavigation>(); + + const add = () => { + if (tripId) { + mutateAsync({ planId: tripId, spotList: route.params.spots }); + } + navigation.goBack(); + }; return ( <> @@ -58,13 +68,17 @@ export default withSuspense(function HomeSpotAdd() { - - {}} /> + navigation.navigate('TripPlanner/Post')} + /> ); }); From bd5ae32c37227e7c6967cdbfcb5e7020c97b5191 Mon Sep 17 00:00:00 2001 From: d0422 Date: Tue, 24 Sep 2024 18:02:04 +0900 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20=EB=A6=AC=EB=B7=B0=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/react-native/src/pages/HomeSpotAdd.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/react-native/src/pages/HomeSpotAdd.tsx b/packages/react-native/src/pages/HomeSpotAdd.tsx index 7d6ccfbb..2f8c68c3 100644 --- a/packages/react-native/src/pages/HomeSpotAdd.tsx +++ b/packages/react-native/src/pages/HomeSpotAdd.tsx @@ -22,9 +22,9 @@ export default withSuspense(function HomeSpotAdd() { const navigation = useNavigation>(); const add = () => { - if (tripId) { - mutateAsync({ planId: tripId, spotList: route.params.spots }); - } + if (!tripId) return; + + mutateAsync({ planId: tripId, spotList: route.params.spots }); navigation.goBack(); };