diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index cacb8510..b6a3f85f 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -1603,7 +1603,7 @@ SPEC CHECKSUMS:
SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d
Sentry: 2f6baed15a3f8056b875fc903dc3dcb2903117f4
SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
- Yoga: a716eea57d0d3430219c0a5a233e1e93ee931eb7
+ Yoga: 9e6a04eacbd94f97d94577017e9f23b3ab41cf6c
PODFILE CHECKSUM: a5154c1a06e55c4e97b95a73eb73a827154c2962
diff --git a/ios/modutaxi.xcodeproj/project.pbxproj b/ios/modutaxi.xcodeproj/project.pbxproj
index c3880313..b5e8e061 100644
--- a/ios/modutaxi.xcodeproj/project.pbxproj
+++ b/ios/modutaxi.xcodeproj/project.pbxproj
@@ -697,7 +697,10 @@
"-DFOLLY_USE_LIBCPP=1",
"-DFOLLY_CFG_NO_COROUTINES=1",
);
- OTHER_LDFLAGS = "$(inherited) ";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ " ",
+ );
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
USE_HERMES = true;
@@ -777,7 +780,10 @@
"-DFOLLY_USE_LIBCPP=1",
"-DFOLLY_CFG_NO_COROUTINES=1",
);
- OTHER_LDFLAGS = "$(inherited) ";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ " ",
+ );
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
USE_HERMES = true;
diff --git a/package-lock.json b/package-lock.json
index a3861cb7..eabc6044 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -48,6 +48,7 @@
"react-native-month-year-picker": "^1.9.0",
"react-native-permissions": "^4.1.4",
"react-native-reanimated": "^3.8.1",
+ "react-native-reanimated-carousel": "^3.5.1",
"react-native-redash": "^18.1.3",
"react-native-safe-area-context": "^4.9.0",
"react-native-screens": "^3.29.0",
@@ -16465,8 +16466,6 @@
},
"node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"inBundle": true,
"license": "MIT",
"dependencies": {
@@ -17081,8 +17080,6 @@
},
"node_modules/npm/node_modules/cross-spawn/node_modules/which": {
"version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"inBundle": true,
"license": "ISC",
"dependencies": {
@@ -17128,8 +17125,6 @@
},
"node_modules/npm/node_modules/debug/node_modules/ms": {
"version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"inBundle": true,
"license": "MIT"
},
@@ -18273,8 +18268,6 @@
},
"node_modules/npm/node_modules/semver/node_modules/lru-cache": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"inBundle": true,
"license": "ISC",
"dependencies": {
@@ -18694,8 +18687,6 @@
},
"node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
"version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"inBundle": true,
"license": "MIT",
"dependencies": {
@@ -18730,8 +18721,6 @@
},
"node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": {
"version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"inBundle": true,
"license": "MIT",
"dependencies": {
@@ -20424,6 +20413,17 @@
"react-native": "*"
}
},
+ "node_modules/react-native-reanimated-carousel": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/react-native-reanimated-carousel/-/react-native-reanimated-carousel-3.5.1.tgz",
+ "integrity": "sha512-9BBQV6JAYSQm2lV7MFtT4mzapXmW4IZO6s38gfiJL84Jg23ivGB1UykcNQauKgtHyhtW2NuZJzItb1s42lM+hA==",
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-native": ">=0.6.0",
+ "react-native-gesture-handler": ">=2.0.0",
+ "react-native-reanimated": ">=3.0.0"
+ }
+ },
"node_modules/react-native-redash": {
"version": "18.1.3",
"resolved": "https://registry.npmjs.org/react-native-redash/-/react-native-redash-18.1.3.tgz",
diff --git a/package.json b/package.json
index 7db30229..c57f2db1 100644
--- a/package.json
+++ b/package.json
@@ -52,6 +52,7 @@
"react-native-month-year-picker": "^1.9.0",
"react-native-permissions": "^4.1.4",
"react-native-reanimated": "^3.8.1",
+ "react-native-reanimated-carousel": "^3.5.1",
"react-native-redash": "^18.1.3",
"react-native-safe-area-context": "^4.9.0",
"react-native-screens": "^3.29.0",
diff --git a/src/assets/images/Home/AdvertiseBanner1.svg b/src/assets/images/Home/AdvertiseBanner1.svg
new file mode 100644
index 00000000..21efded7
--- /dev/null
+++ b/src/assets/images/Home/AdvertiseBanner1.svg
@@ -0,0 +1,255 @@
+
diff --git a/src/assets/images/Home/AdvertiseBanner2.svg b/src/assets/images/Home/AdvertiseBanner2.svg
new file mode 100644
index 00000000..dc981333
--- /dev/null
+++ b/src/assets/images/Home/AdvertiseBanner2.svg
@@ -0,0 +1,41 @@
+
diff --git a/src/components/Home/AdvertiseBanner.tsx b/src/components/Home/AdvertiseBanner.tsx
new file mode 100644
index 00000000..3f084cfe
--- /dev/null
+++ b/src/components/Home/AdvertiseBanner.tsx
@@ -0,0 +1,63 @@
+import React, { useState } from 'react';
+import Carousel from 'react-native-reanimated-carousel';
+import { View, Text, Linking, Pressable, Dimensions } from 'react-native';
+
+import AdvertiseBanner1 from '@assets/images/Home/AdvertiseBanner1.svg';
+import AdvertiseBanner2 from '@assets/images/Home/AdvertiseBanner2.svg';
+
+const AdvertiseBannerComponent: React.FC = () => {
+ const [advertiseIndex, setAdvertiseIndex] = useState(0);
+
+ const width = Dimensions.get('window').width;
+
+ // 이미지와 URL을 객체로 묶어서 배열로 설정
+ const advertiseBanners = [
+ {
+ image: AdvertiseBanner1,
+ url: 'https://material-roquefort-92e.notion.site/18c75d54626c41cebb05838bffae800f?pvs=4',
+ },
+ {
+ image: AdvertiseBanner2,
+ url: 'https://material-roquefort-92e.notion.site/100-40f440e153a548dc9e3a6859ebedd71a?pvs=4',
+ },
+ ];
+
+ // 이미지 클릭 시 해당 URL로 이동
+ const handleImagePress = (url: string) => {
+ Linking.openURL(url);
+ };
+
+ return (
+
+ setAdvertiseIndex(index)}
+ style={{ borderRadius: 12 }}
+ renderItem={({ index }) => {
+ const ImageComponent = advertiseBanners[index].image;
+ const url = advertiseBanners[index].url;
+ return (
+ handleImagePress(url)}>
+ {/* SVG 이미지 렌더링 */}
+
+
+
+ );
+ }}
+ />
+
+
+ {advertiseIndex + 1}
+ / 2
+
+
+ );
+};
+
+export default AdvertiseBannerComponent;
diff --git a/src/components/Search/ArrivalSearchBox.tsx b/src/components/Search/ArrivalSearchBox.tsx
index adf8dd92..c52dd236 100644
--- a/src/components/Search/ArrivalSearchBox.tsx
+++ b/src/components/Search/ArrivalSearchBox.tsx
@@ -17,19 +17,14 @@ interface ArrivalSearchBoxProps {
}
/** 검색 바 */
-const ArrivalSearchBoxComponent: React.FC = ({
- keyword,
- handleKeyword,
-}) => {
+const ArrivalSearchBoxComponent: React.FC = ({ keyword, handleKeyword }) => {
// focusing ref
const inputRef = React.useRef(null);
const navigate = useNavigation();
// input value onChange 함수
- const valueHandleChange = (
- e: NativeSyntheticEvent,
- ) => {
+ const valueHandleChange = (e: NativeSyntheticEvent) => {
handleKeyword(e.nativeEvent.text);
};
@@ -49,12 +44,12 @@ const ArrivalSearchBoxComponent: React.FC = ({
{/** 검색창 */}
-
+
= ({
const navigate = useNavigation();
// input value onChange 함수
- const valueHandleChange = (
- e: NativeSyntheticEvent,
- ) => {
+ const valueHandleChange = (e: NativeSyntheticEvent) => {
handleKeyword(e.nativeEvent.text);
};
@@ -49,12 +47,12 @@ const DepartureSearchBoxComponent: React.FC = ({
{/** 검색창 */}
-
+
= ({
- keyword,
- setKeyword,
-}) => {
+const SearchBoxComponent: React.FC = ({ keyword, setKeyword }) => {
// focusing ref
const inputRef = React.useRef(null);
const navigate = useNavigation();
// input value onChange 함수
- const valueHandleChange = (
- e: NativeSyntheticEvent,
- ) => {
+ const valueHandleChange = (e: NativeSyntheticEvent) => {
setKeyword(e.nativeEvent.text);
};
@@ -51,12 +46,12 @@ const SearchBoxComponent: React.FC = ({
{/** 검색창 */}
-
+
-
+
({
@@ -19,13 +19,4 @@ export const arrivalRecoilState = atom({
name: '',
spotId: 0,
},
-});
-
-export const searchParamRecoilState = atom({
- key: 'searchParamRecoilState',
- default: {
- title: '',
- longitude: 126.656496,
- latitude: 37.451062,
- },
-});
+});
\ No newline at end of file
diff --git a/src/recoil/states/search.ts b/src/recoil/states/search.ts
new file mode 100644
index 00000000..dfdae96d
--- /dev/null
+++ b/src/recoil/states/search.ts
@@ -0,0 +1,12 @@
+import { atom } from "recoil";
+
+import { SearchParamRecoil } from "@recoil/types/search";
+
+export const searchParamRecoilState = atom({
+ key: 'searchParamRecoilState',
+ default: {
+ title: '',
+ longitude: 126.656496,
+ latitude: 37.451062,
+ },
+});
\ No newline at end of file
diff --git a/src/recoil/type.ts b/src/recoil/type.ts
deleted file mode 100644
index 8e99a9ac..00000000
--- a/src/recoil/type.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Bank } from '@type/entity/account';
-import { UserPreview } from '@type/entity/user';
-
-export type DepartureRecoil = {
- name: string;
- latitude: number;
- longitude: number;
-};
-
-export type ArrivalRecoil = {
- name: string;
- spotId: number;
-};
-
-export type SearchParamRecoil = {
- title: string;
- latitude: number;
- longitude: number;
-};
diff --git a/src/recoil/types/map.ts b/src/recoil/types/map.ts
new file mode 100644
index 00000000..126ef1d1
--- /dev/null
+++ b/src/recoil/types/map.ts
@@ -0,0 +1,10 @@
+export type DepartureRecoil = {
+ name: string;
+ latitude: number;
+ longitude: number;
+};
+
+export type ArrivalRecoil = {
+ name: string;
+ spotId: number;
+};
\ No newline at end of file
diff --git a/src/recoil/types/search.ts b/src/recoil/types/search.ts
new file mode 100644
index 00000000..5d44ed49
--- /dev/null
+++ b/src/recoil/types/search.ts
@@ -0,0 +1,5 @@
+export type SearchParamRecoil = {
+ title: string;
+ latitude: number;
+ longitude: number;
+};
\ No newline at end of file
diff --git a/src/screens/home/Home.tsx b/src/screens/home/Home.tsx
index 04dd0a20..86275335 100644
--- a/src/screens/home/Home.tsx
+++ b/src/screens/home/Home.tsx
@@ -12,6 +12,7 @@ import LoadingComponent from '@components/Common/Loading';
import HomeHeaderComponent from '@components/Home/HomeHeader';
import UserSummaryComponent from '@components/Home/UserSummary';
import HomeMainPanelComponent from '@components/Home/HomeMainPanel';
+import AdvertiseBannerComponent from '@components/Home/AdvertiseBanner';
import { UserRecoil } from '@recoil/types/user';
import { userRecoilState } from '@recoil/states/user';
@@ -129,6 +130,9 @@ const HomeComponent = ({ navigation }: HomeScreenProps) => {
/>
}>
+ {/* 광고배너 */}
+
+
{/* 지도, 택시팟 */}
diff --git a/src/screens/map/ArrivalMap.tsx b/src/screens/map/ArrivalMap.tsx
index 040a5eb4..2ae20248 100644
--- a/src/screens/map/ArrivalMap.tsx
+++ b/src/screens/map/ArrivalMap.tsx
@@ -13,7 +13,8 @@ import {
import SpotMarker from '@components/Marker/SpotMarker';
import TransparentSearchBoxComponent from '@components/Search/TransparentSearchBox';
-import { arrivalRecoilState } from '@recoil/recoil';
+import { ArrivalRecoil } from '@recoil/types/map';
+import { arrivalRecoilState } from '@recoil/states/map';
import { useGetSpotMap } from '@hooks/api/spot';
import { useDeleteAllNotifee } from '@hooks/notifee';
@@ -115,7 +116,7 @@ const ArrivalMapScreen = ({ route, navigation }: ArrivalMapScreenProps) => {
};
// 도착 거점을 저장하며 이동
- const [, setArrivalRecoil] = useRecoilState(arrivalRecoilState);
+ const [, setArrivalRecoil] = useRecoilState(arrivalRecoilState);
const handleSelectArrival = () => {
if (route.params?.isPatch) {
navigation.pop(2);
diff --git a/src/screens/map/DepartureMap.tsx b/src/screens/map/DepartureMap.tsx
index a3b1ca26..3bb2a40a 100644
--- a/src/screens/map/DepartureMap.tsx
+++ b/src/screens/map/DepartureMap.tsx
@@ -7,7 +7,10 @@ import { Camera, NaverMapView, NaverMapViewRef } from '@mj-studio/react-native-n
import TransparentSearchBoxComponent from '@components/Search/TransparentSearchBox';
-import { departureRecoilState, searchParamRecoilState } from '@recoil/recoil';
+import { DepartureRecoil } from '@recoil/types/map';
+import { SearchParamRecoil } from '@recoil/types/search';
+import { departureRecoilState } from '@recoil/states/map';
+import { searchParamRecoilState } from '@recoil/states/search';
import { useDeleteAllNotifee } from '@hooks/notifee';
import { useReverseGeocoding } from '@hooks/api/search';
@@ -31,8 +34,8 @@ const DepartureMapScreen = ({ route, navigation }: DepartureMapScreenProps) => {
const [searchBoxValue, setSearchBoxValue] = useState('출발지를 입력하세요');
const [isSearched, setIsSearched] = useState(false);
- const [, setDepartureRecoil] = useRecoilState(departureRecoilState);
- const [searchParamRecoil, setSearchParamRecoil] = useRecoilState(searchParamRecoilState);
+ const [, setDepartureRecoil] = useRecoilState(departureRecoilState);
+ const [searchParamRecoil, setSearchParamRecoil] = useRecoilState(searchParamRecoilState);
const [buildingName, setBuildingName] = useState('');
const [isBlocked, setIsBlocked] = useState(false);
diff --git a/src/screens/map/MainMap.tsx b/src/screens/map/MainMap.tsx
index 21f3421b..0d707291 100644
--- a/src/screens/map/MainMap.tsx
+++ b/src/screens/map/MainMap.tsx
@@ -19,9 +19,8 @@ import BottomSheet, {
BottomSheetBackdropProps,
} from '@gorhom/bottom-sheet';
-import MapBottomSheetScreen from '../../components/Modal/MapBottomSheet';
-
import RoomMarkerComponent from '@components/Marker/RoomMarker';
+import MapBottomSheetScreen from '@components/Modal/MapBottomSheet';
import CreateRoomButtonComponent from '@components/CreateRoomButton';
import SpotFilterModalScreen from '@components/Modal/SpotFilterModal';
import TransparentSearchBoxComponent from '@components/Search/TransparentSearchBox';
@@ -29,7 +28,8 @@ import SelectedRoomDigestComponent from '@components/RoomDigest/SelectedRoomDige
import { UserRecoil } from '@recoil/types/user';
import { userRecoilState } from '@recoil/states/user';
-import { searchParamRecoilState } from '@recoil/recoil';
+import { SearchParamRecoil } from '@recoil/types/search';
+import { searchParamRecoilState } from '@recoil/states/search';
import { useIsOldiPhone } from '@hooks/device';
import { useGetSpotMap } from '@hooks/api/spot';
@@ -114,7 +114,7 @@ const MainMapScreen = ({ route, navigation }: MainMapScreenProps) => {
// 현재 줌에서의 탐색 범위
const [radius, setRadius] = useState(5000);
- const searchParamRecoil = useRecoilValue(searchParamRecoilState);
+ const searchParamRecoil = useRecoilValue(searchParamRecoilState);
const resetSearchParamRecoil = useResetRecoilState(searchParamRecoilState);
// 검색 후 좌표설정
diff --git a/src/screens/room/CreateRoom.tsx b/src/screens/room/CreateRoom.tsx
index a7fe5c30..6323d6ff 100644
--- a/src/screens/room/CreateRoom.tsx
+++ b/src/screens/room/CreateRoom.tsx
@@ -18,7 +18,8 @@ import { UserRecoil } from '@recoil/types/user';
import { userRecoilState } from '@recoil/states/user';
import { CurrentRoomRecoil } from '@recoil/types/room';
import { currentRoomRecoilState } from '@recoil/states/room';
-import { arrivalRecoilState, departureRecoilState } from '@recoil/recoil';
+import { ArrivalRecoil, DepartureRecoil } from '@recoil/types/map';
+import { arrivalRecoilState, departureRecoilState } from '@recoil/states/map';
import SuspenseErrorHandler from '@server/errorHandler/suspenseErrorHandler';
@@ -49,8 +50,8 @@ const CreateRoomComponent = ({ navigation }: CreateRoomScreenProps) => {
const { mutateAsync: createRoomMutate, isPending: createRoomPending } = useCreateRoom();
const setCurrentRoomRecoil = useSetRecoilState(currentRoomRecoilState);
- const [departureRecoil, setDepartureRecoil] = useRecoilState(departureRecoilState); // 출발지 이름, 좌표
- const [arrivalRecoil, setArrivalRecoil] = useRecoilState(arrivalRecoilState); // 도착지 이름, 거점 id
+ const [departureRecoil, setDepartureRecoil] = useRecoilState(departureRecoilState); // 출발지 이름, 좌표
+ const [arrivalRecoil, setArrivalRecoil] = useRecoilState(arrivalRecoilState); // 도착지 이름, 거점 id
const [departureTime, setDepartureTime] = useState(new Date()); // 설정 날짜
const [datePicked, setDatePicked] = useState(false); // 날짜 선택 여부
const [datePickerOpen, setDatePickerOpen] = useState(false); // Datepicker open 여부
diff --git a/src/screens/room/PatchRoom.tsx b/src/screens/room/PatchRoom.tsx
index b53d0ee4..abadcfb1 100644
--- a/src/screens/room/PatchRoom.tsx
+++ b/src/screens/room/PatchRoom.tsx
@@ -16,7 +16,8 @@ import TransparentLoadingComponent from '@components/Common/TransparentLoading';
import { UserRecoil } from '@recoil/types/user';
import { userRecoilState } from '@recoil/states/user';
-import { arrivalRecoilState, departureRecoilState } from '@recoil/recoil';
+import { ArrivalRecoil, DepartureRecoil } from '@recoil/types/map';
+import { arrivalRecoilState, departureRecoilState } from '@recoil/states/map';
import SuspenseErrorHandler from '@server/errorHandler/suspenseErrorHandler';
@@ -49,8 +50,8 @@ const PatchRoomComponent = ({ navigation, route }: PatchRoomScreenProps) => {
roomDetail.roomId,
);
- const [departureRecoil, setDepartureRecoil] = useRecoilState(departureRecoilState); // 출발지 이름, 좌표
- const [arrivalRecoil, setArrivalRecoil] = useRecoilState(arrivalRecoilState); // 도착지 이름, 거점 id
+ const [departureRecoil, setDepartureRecoil] = useRecoilState(departureRecoilState); // 출발지 이름, 좌표
+ const [arrivalRecoil, setArrivalRecoil] = useRecoilState(arrivalRecoilState); // 도착지 이름, 거점 id
const [departureTime, setDepartureTime] = useState(new Date()); // 설정 날짜
const [datePicked, setDatePicked] = useState(true); // 날짜 선택 여부
const [datePickerOpen, setDatePickerOpen] = useState(false); // Datepicker open 여부
diff --git a/src/screens/search/DepartureSearch.tsx b/src/screens/search/DepartureSearch.tsx
index a31d3f9f..26643544 100644
--- a/src/screens/search/DepartureSearch.tsx
+++ b/src/screens/search/DepartureSearch.tsx
@@ -8,7 +8,8 @@ import RecommendedSearchComponent from '@components/Search/RecommendedSearch';
import EmptySearchRenderComponent from '@components/Search/EmptySearchRender';
import DepartureSearchBoxComponent from '@components/Search/DepartureSearchBox';
-import { searchParamRecoilState } from '@recoil/recoil';
+import { SearchParamRecoil } from '@recoil/types/search';
+import { searchParamRecoilState } from '@recoil/states/search';
import { useNaverSearch } from '@hooks/api/search';
import { useDeleteAllNotifee } from '@hooks/notifee';
@@ -26,7 +27,7 @@ const DepartureSearchScreen = ({ navigation }: DepartureSearchScreenProps) => {
/** 검색어 저장 변수 */
const [keyword, setKeyword] = useState('');
- const [, setSearchParamRecoil] = useRecoilState(searchParamRecoilState);
+ const [, setSearchParamRecoil] = useRecoilState(searchParamRecoilState);
const locationPermission = useLocationPermission();
const { data: items, refetch: refetchNaverSearch } = useNaverSearch(keyword);
diff --git a/src/screens/search/HomeSearch.tsx b/src/screens/search/HomeSearch.tsx
index bd3b6443..6b2e7146 100644
--- a/src/screens/search/HomeSearch.tsx
+++ b/src/screens/search/HomeSearch.tsx
@@ -10,7 +10,8 @@ import SearchBoxComponent from '@components/Search/SearchBox';
import RecommendedSearchComponent from '@components/Search/RecommendedSearch';
import EmptySearchRenderComponent from '@components/Search/EmptySearchRender';
-import { searchParamRecoilState } from '@recoil/recoil';
+import { SearchParamRecoil } from '@recoil/types/search';
+import { searchParamRecoilState } from '@recoil/states/search';
import { useNaverSearch } from '@hooks/api/search';
import { useDeleteAllNotifee } from '@hooks/notifee';
@@ -42,7 +43,7 @@ const HomeSearchScreen = ({ route, navigation }: HomeSearchScreenProps) => {
});
// 검색어 선택시 넘겨줄 값
- const [, setSearchParamRecoil] = useRecoilState(searchParamRecoilState);
+ const [, setSearchParamRecoil] = useRecoilState(searchParamRecoilState);
useEffect(() => {
const fetchCurrentLocation = async () => {
diff --git a/src/screens/search/MainMapSearch.tsx b/src/screens/search/MainMapSearch.tsx
index ad88bf55..76fb6978 100644
--- a/src/screens/search/MainMapSearch.tsx
+++ b/src/screens/search/MainMapSearch.tsx
@@ -10,7 +10,8 @@ import SearchBoxComponent from '@components/Search/SearchBox';
import RecommendedSearchComponent from '@components/Search/RecommendedSearch';
import EmptySearchRenderComponent from '@components/Search/EmptySearchRender';
-import { searchParamRecoilState } from '@recoil/recoil';
+import { SearchParamRecoil } from '@recoil/types/search';
+import { searchParamRecoilState } from '@recoil/states/search';
import { useNaverSearch } from '@hooks/api/search';
import { useDeleteAllNotifee } from '@hooks/notifee';
@@ -37,7 +38,7 @@ const SearchScreen = ({ navigation }: SearchScreenProps) => {
});
// 검색어 선택시 넘겨줄 값
- const [, setSearchParamRecoil] = useRecoilState(searchParamRecoilState);
+ const [, setSearchParamRecoil] = useRecoilState(searchParamRecoilState);
useEffect(() => {
const fetchCurrentLocation = async () => {
diff --git a/yarn.lock b/yarn.lock
index fa66e491..1626df09 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -8622,7 +8622,7 @@ react-native-fast-image@^8.6.3:
resolved "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.6.3.tgz"
integrity sha512-Sdw4ESidXCXOmQ9EcYguNY2swyoWmx53kym2zRsvi+VeFCHEdkO+WG1DK+6W81juot40bbfLNhkc63QnWtesNg==
-react-native-gesture-handler@*, react-native-gesture-handler@^2.16.0, react-native-gesture-handler@>=1.10.1:
+react-native-gesture-handler@*, react-native-gesture-handler@^2.16.0, react-native-gesture-handler@>=1.10.1, react-native-gesture-handler@>=2.0.0:
version "2.16.0"
resolved "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.16.0.tgz"
integrity sha512-1hFkx7RIfeJSyTQQ0Nkv4icFVZ5+XjQkd47OgZMBFzoB7ecL+nFSz8KLi3OCWOhq+nbHpSPlSG5VF3CQNCJpWA==
@@ -8705,7 +8705,12 @@ react-native-permissions@^4.1.4:
resolved "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-4.1.4.tgz"
integrity sha512-el6u90VZNFDEtmHpSheirwRhGvs6M5rSZcoqIqB128IPO00f2c1q+PP4kEaM1u19Q0ldQ+R+S7C/l8Zrduy6JQ==
-react-native-reanimated@^3.8.1, react-native-reanimated@>=2.0.0, react-native-reanimated@>=2.2.0:
+react-native-reanimated-carousel@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.npmjs.org/react-native-reanimated-carousel/-/react-native-reanimated-carousel-3.5.1.tgz"
+ integrity sha512-9BBQV6JAYSQm2lV7MFtT4mzapXmW4IZO6s38gfiJL84Jg23ivGB1UykcNQauKgtHyhtW2NuZJzItb1s42lM+hA==
+
+react-native-reanimated@^3.8.1, react-native-reanimated@>=2.0.0, react-native-reanimated@>=2.2.0, react-native-reanimated@>=3.0.0:
version "3.8.1"
resolved "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.8.1.tgz"
integrity sha512-EdM0vr3JEaNtqvstqESaPfOBy0gjYBkr1iEolWJ82Ax7io8y9OVUIphgsLKTB36CtR1XtmBw0RZVj7KArc7ZVA==
@@ -8821,7 +8826,7 @@ react-native-toast-message@^2.2.0:
ws "^6.2.2"
yargs "^17.6.2"
-react-native@*, "react-native@^0.0.0-0 || >=0.60 <1.0", "react-native@^0.61.5 || ^0.62.3 || ^0.63.2 || ^0.64.2 || ^0.65.0 || ^0.66.0 || ^0.67.0 || ^0.68.0 || ^0.69.0 || ^0.70.0 || ^0.71.0 || ^0.72.0 || ^0.73.0", react-native@^0.73.0, "react-native@>= 0.60.0", "react-native@>= 0.64.3", react-native@>=0.46, react-native@>=0.57.0, react-native@>=0.59.0, react-native@>=0.60.0, react-native@>=0.61.3, react-native@>=0.65.0, react-native@>=0.70.0, react-native@0.73.5:
+react-native@*, "react-native@^0.0.0-0 || >=0.60 <1.0", "react-native@^0.61.5 || ^0.62.3 || ^0.63.2 || ^0.64.2 || ^0.65.0 || ^0.66.0 || ^0.67.0 || ^0.68.0 || ^0.69.0 || ^0.70.0 || ^0.71.0 || ^0.72.0 || ^0.73.0", react-native@^0.73.0, "react-native@>= 0.60.0", "react-native@>= 0.64.3", react-native@>=0.46, react-native@>=0.57.0, react-native@>=0.59.0, react-native@>=0.6.0, react-native@>=0.60.0, react-native@>=0.61.3, react-native@>=0.65.0, react-native@>=0.70.0, react-native@0.73.5:
version "0.73.5"
resolved "https://registry.npmjs.org/react-native/-/react-native-0.73.5.tgz"
integrity sha512-iHgDArmF4CrhL0qTj+Rn+CBN5pZWUL9lUGl8ub+V9Hwu/vnzQQh8rTMVSwVd2sV6N76KjpE5a4TfIAHkpIHhKg==
@@ -8892,7 +8897,7 @@ react-test-renderer@18.2.0:
react-shallow-renderer "^16.15.0"
scheduler "^0.23.0"
-react@*, "react@^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^17 || ^18", react@^18.0.0, react@^18.2.0, "react@>= 16.11.0", "react@>= 17.0.1", react@>=16.11.0, react@>=16.13.1, react@>=16.8, react@>=17.0.0, react@>=18.1.0, "react@15.x || 16.x || 17.x || 18.x", "react@16.9.0 || 16.11.0 || 16.13.1 || 17.0.1 || 17.0.2 || 18.0.0 || 18.1.0 || 18.2.0", react@18.2.0:
+react@*, "react@^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^17 || ^18", react@^18.0.0, react@^18.2.0, "react@>= 16.11.0", "react@>= 17.0.1", react@>=16.11.0, react@>=16.13.1, react@>=16.8, react@>=16.8.0, react@>=17.0.0, react@>=18.1.0, "react@15.x || 16.x || 17.x || 18.x", "react@16.9.0 || 16.11.0 || 16.13.1 || 17.0.1 || 17.0.2 || 18.0.0 || 18.1.0 || 18.2.0", react@18.2.0:
version "18.2.0"
resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz"
integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==