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==