diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index 5a72f16a..d7fd201e 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -27,17 +27,6 @@ - - \ No newline at end of file diff --git a/app/src/main/java/com/kuit/ourmenu/data/model/map/response/MapDetailResponse.kt b/app/src/main/java/com/kuit/ourmenu/data/model/map/response/MapDetailResponse.kt index 758cbbcb..c616bb64 100644 --- a/app/src/main/java/com/kuit/ourmenu/data/model/map/response/MapDetailResponse.kt +++ b/app/src/main/java/com/kuit/ourmenu/data/model/map/response/MapDetailResponse.kt @@ -6,11 +6,13 @@ import kotlinx.serialization.Serializable @Serializable data class MapDetailResponse( @SerialName("menuId") - val menuId: Int, + val menuId: Long, @SerialName("menuTitle") val menuTitle: String, @SerialName("menuPrice") val menuPrice: Int, + @SerialName("storeTitle") + val storeTitle: String, @SerialName("menuPinImgUrl") val menuPinImgUrl: String, @SerialName("menuTagImgUrls") diff --git a/app/src/main/java/com/kuit/ourmenu/data/model/map/response/MapMenuDetailResponse.kt b/app/src/main/java/com/kuit/ourmenu/data/model/map/response/MapMenuDetailResponse.kt index f354721a..7c068d4f 100644 --- a/app/src/main/java/com/kuit/ourmenu/data/model/map/response/MapMenuDetailResponse.kt +++ b/app/src/main/java/com/kuit/ourmenu/data/model/map/response/MapMenuDetailResponse.kt @@ -6,9 +6,11 @@ import kotlinx.serialization.Serializable @Serializable data class MapMenuDetailResponse( @SerialName("menuId") - val menuId: Int, + val menuId: Long, @SerialName("menuTitle") val menuTitle: String, + @SerialName("storeTitle") + val storeTitle: String, @SerialName("menuPrice") val menuPrice: Int, @SerialName("menuPinImgUrl") @@ -20,11 +22,11 @@ data class MapMenuDetailResponse( @SerialName("menuFolderInfo") val menuFolderInfo: MenuFolderInfo, @SerialName("mapId") - val mapId: Int, + val mapId: Long, @SerialName("mapX") - val mapX: Int, + val mapX: Double, @SerialName("mapY") - val mapY: Int, + val mapY: Double, ) diff --git a/app/src/main/java/com/kuit/ourmenu/data/model/map/response/MapSearchHistoryResponse.kt b/app/src/main/java/com/kuit/ourmenu/data/model/map/response/MapSearchHistoryResponse.kt index 8480fa90..40346cb8 100644 --- a/app/src/main/java/com/kuit/ourmenu/data/model/map/response/MapSearchHistoryResponse.kt +++ b/app/src/main/java/com/kuit/ourmenu/data/model/map/response/MapSearchHistoryResponse.kt @@ -6,7 +6,7 @@ import kotlinx.serialization.Serializable @Serializable data class MapSearchHistoryResponse( @SerialName("menuId") - val menuId: Int, + val menuId: Long, @SerialName("menuTitle") val menuTitle: String, @SerialName("storeTitle") diff --git a/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderAllResponse.kt b/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderAllResponse.kt index 0ec4a341..931673d8 100644 --- a/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderAllResponse.kt +++ b/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderAllResponse.kt @@ -4,7 +4,7 @@ import kotlinx.serialization.Serializable @Serializable data class MenuFolderAllResponse( - override val menuId: Int, + override val menuId: Long, override val menuTitle: String, override val storeTitle: String, override val storeAddress: String, diff --git a/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderDetailResponse.kt b/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderDetailResponse.kt index 8e7f2d1f..09a51668 100644 --- a/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderDetailResponse.kt +++ b/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderDetailResponse.kt @@ -13,7 +13,7 @@ data class MenuFolderDetailResponse( @Serializable data class MenuFolderDetailMenus( - override val menuId: Int = 0, + override val menuId: Long = 0, override val menuTitle: String = "", override val storeTitle: String = "", override val storeAddress: String = "", diff --git a/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderMenuItem.kt b/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderMenuItem.kt index fc9cc531..caf3923e 100644 --- a/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderMenuItem.kt +++ b/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderMenuItem.kt @@ -1,7 +1,7 @@ package com.kuit.ourmenu.data.model.menuFolder.response interface MenuFolderMenuItem { - val menuId: Int + val menuId: Long val menuTitle: String val storeTitle: String val storeAddress: String diff --git a/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderResponse.kt b/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderResponse.kt index 0ca5a665..ba24a0c9 100644 --- a/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderResponse.kt +++ b/app/src/main/java/com/kuit/ourmenu/data/model/menuFolder/response/MenuFolderResponse.kt @@ -10,7 +10,7 @@ data class MenuFolderResponse( @Serializable data class MenuFolderList( - val menuFolderId: Int, + val menuFolderId: Long, val menuFolderTitle: String, val menuFolderImgUrl: String, val menuFolderIconImgUrl: String, diff --git a/app/src/main/java/com/kuit/ourmenu/data/model/menuinfo/response/MenuInfoResponse.kt b/app/src/main/java/com/kuit/ourmenu/data/model/menuinfo/response/MenuInfoResponse.kt index 2d38185a..c75e3d3c 100644 --- a/app/src/main/java/com/kuit/ourmenu/data/model/menuinfo/response/MenuInfoResponse.kt +++ b/app/src/main/java/com/kuit/ourmenu/data/model/menuinfo/response/MenuInfoResponse.kt @@ -4,10 +4,12 @@ import kotlinx.serialization.Serializable @Serializable data class MenuInfoResponse( - val menuId: Int = 0, + val menuId: Long = 0, val menuTitle: String = "", val menuPrice: Int = 0, val menuPinImgUrl: String = "", + val menuMemoTitle: String = "", + val menuMemoContent: String = "", val storeTitle: String = "", val storeAddress: String = "", val tagImgUrls: List = emptyList(), diff --git a/app/src/main/java/com/kuit/ourmenu/data/repository/MenuFolderRepository.kt b/app/src/main/java/com/kuit/ourmenu/data/repository/MenuFolderRepository.kt index 0f9fe242..ae19dcc4 100644 --- a/app/src/main/java/com/kuit/ourmenu/data/repository/MenuFolderRepository.kt +++ b/app/src/main/java/com/kuit/ourmenu/data/repository/MenuFolderRepository.kt @@ -14,7 +14,7 @@ class MenuFolderRepository @Inject constructor( } suspend fun getMenuFolderDetail( - menuFolderId: Int, + menuFolderId: Long, sortOrder: String, ) = runCatching { menuFolderService.getMenuFolderDetails( diff --git a/app/src/main/java/com/kuit/ourmenu/data/repository/MenuInfoRepository.kt b/app/src/main/java/com/kuit/ourmenu/data/repository/MenuInfoRepository.kt index 226d8d4e..fbe7f0cb 100644 --- a/app/src/main/java/com/kuit/ourmenu/data/repository/MenuInfoRepository.kt +++ b/app/src/main/java/com/kuit/ourmenu/data/repository/MenuInfoRepository.kt @@ -10,7 +10,7 @@ class MenuInfoRepository @Inject constructor( private val menuInfoService: MenuInfoService ) { suspend fun getMenuInfo( - menuId: Int + menuId: Long ) = runCatching { menuInfoService.getMenuInfo(menuId).handleBaseResponse().getOrThrow() } diff --git a/app/src/main/java/com/kuit/ourmenu/data/service/MapService.kt b/app/src/main/java/com/kuit/ourmenu/data/service/MapService.kt index 2f0034a6..d6c1e2ca 100644 --- a/app/src/main/java/com/kuit/ourmenu/data/service/MapService.kt +++ b/app/src/main/java/com/kuit/ourmenu/data/service/MapService.kt @@ -18,15 +18,15 @@ interface MapService { @GET("api/users/menus/{mapId}/maps") suspend fun getMapDetail( @Path("mapId") mapId: Long - ): BaseResponse> // TODO: 리팩토링 + ): BaseResponse> @GET("api/users/menus/maps") - suspend fun getMap(): BaseResponse> // TODO: 리팩토링 + suspend fun getMap(): BaseResponse> @GET("api/users/menus/maps/{menuId}/search") suspend fun getMapMenuDetail( @Path("menuId") menuId: Long - ): BaseResponse // TODO: 리팩토링 + ): BaseResponse @GET("api/users/menus/maps/search") suspend fun getMapSearch( diff --git a/app/src/main/java/com/kuit/ourmenu/data/service/MenuFolderService.kt b/app/src/main/java/com/kuit/ourmenu/data/service/MenuFolderService.kt index 91d8c6a8..52554202 100644 --- a/app/src/main/java/com/kuit/ourmenu/data/service/MenuFolderService.kt +++ b/app/src/main/java/com/kuit/ourmenu/data/service/MenuFolderService.kt @@ -14,7 +14,7 @@ interface MenuFolderService { @GET("api/menu-folders/{menuFolderId}/menus") suspend fun getMenuFolderDetails( - @Path("menuFolderId") menuFolderId: Int, + @Path("menuFolderId") menuFolderId: Long, @Query("sortOrder") sortOrder: String, ): BaseResponse diff --git a/app/src/main/java/com/kuit/ourmenu/data/service/MenuInfoService.kt b/app/src/main/java/com/kuit/ourmenu/data/service/MenuInfoService.kt index 2826bf46..f5453009 100644 --- a/app/src/main/java/com/kuit/ourmenu/data/service/MenuInfoService.kt +++ b/app/src/main/java/com/kuit/ourmenu/data/service/MenuInfoService.kt @@ -8,6 +8,6 @@ import retrofit2.http.Path interface MenuInfoService { @GET("api/menus/{menuId}") suspend fun getMenuInfo( - @Path("menuId") menuId: Int + @Path("menuId") menuId: Long ): BaseResponse } diff --git a/app/src/main/java/com/kuit/ourmenu/ui/common/bottomsheet/MenuInfoBottomSheetContent.kt b/app/src/main/java/com/kuit/ourmenu/ui/common/bottomsheet/MenuInfoBottomSheetContent.kt index be7ff3d5..a72e0256 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/common/bottomsheet/MenuInfoBottomSheetContent.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/common/bottomsheet/MenuInfoBottomSheetContent.kt @@ -1,6 +1,8 @@ package com.kuit.ourmenu.ui.common.bottomsheet +import android.util.Log import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -38,12 +40,17 @@ import com.kuit.ourmenu.utils.ExtensionUtil.toWon @Composable fun MenuInfoBottomSheetContent( modifier: Modifier = Modifier, - menuInfoData: MapDetailResponse + menuInfoData: MapDetailResponse, + onClick: (Long) -> Unit ) { Column( modifier = modifier .fillMaxWidth() .padding(horizontal = 20.dp) + .clickable { + Log.d("MenuInfoBottomSheetContent", "Menu ID: ${menuInfoData.menuId}") + onClick(menuInfoData.menuId) + } ) { MenuInfoContent( modifier = Modifier @@ -114,7 +121,7 @@ fun MenuInfoContent( ) } Text( - text = "응답에 가게명 누락", // TODO: 가게명 처리 + text = menuInfoData.storeTitle, style = ourMenuTypography().pretendard_600_14.copy( lineHeight = 12.sp, color = Neutral500 @@ -187,6 +194,7 @@ private fun MenuInfoBottomSheetContentPreview() { menuInfoData = MapDetailResponse( menuId = 1, menuTitle = "Test Menu", + storeTitle = "가게 이름", menuPrice = 10000, menuPinImgUrl = "pin", menuTagImgUrls = listOf("한식", "밥"), @@ -200,5 +208,7 @@ private fun MenuInfoBottomSheetContentPreview() { mapX = 127.0, mapY = 37.0 ) - ) + ){ + // 클릭시 동작 + } } \ No newline at end of file diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/navigation/MenuFolderNavigation.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/navigation/MenuFolderNavigation.kt index e014e3af..7db71904 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/navigation/MenuFolderNavigation.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/navigation/MenuFolderNavigation.kt @@ -16,7 +16,7 @@ fun NavController.navigateToMenuFolder(navOptions: NavOptions) { } // 이동 이벤트 (menuFolderId 전달) -fun NavController.navigateToMenuFolderDetail(menuFolderId: Int) { +fun NavController.navigateToMenuFolderDetail(menuFolderId: Long) { navigate(Routes.MenuFolderDetail(menuFolderId)) } @@ -28,15 +28,15 @@ fun NavController.navigateToAddMenu() { navigate(Routes.AddMenu) } -fun NavController.navigateToMenuInfo(menuId: Int) { +fun NavController.navigateToMenuInfo(menuId: Long) { navigate(Routes.MenuInfo(menuId)) } fun NavGraphBuilder.menuFolderNavGraph( navigateBack: () -> Unit, - navigateToMenuFolderDetail: (Int) -> Unit, + navigateToMenuFolderDetail: (Long) -> Unit, navigateToMenuFolderAllMenu: () -> Unit, - navigateToMenuInfo: (Int) -> Unit, + navigateToMenuInfo: (Long) -> Unit, navigateToAddMenu: () -> Unit, ) { composable { diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt index 9d69c18e..00b7987e 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderAllMenuScreen.kt @@ -56,7 +56,7 @@ import kotlinx.coroutines.launch @Composable fun MenuFolderAllMenuScreen( onNavigateBack: () -> Unit, - onNavigateToMenuInfo: (Int) -> Unit, + onNavigateToMenuInfo: (Long) -> Unit, // onNavigateToMap: () -> Unit, // TODO: Map으로 화면 이동 구현 onNavigateToAddMenu: () -> Unit, viewModel: MenuFolderAllViewModel = hiltViewModel() diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt index c3733a9e..1915b83c 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderDetailScreen.kt @@ -45,8 +45,8 @@ import com.kuit.ourmenu.ui.theme.ourMenuTypography @Composable fun MenuFolderDetailScreen( - menuFolderId: Int, - onNavigateToMenuInfo: (Int) -> Unit, + menuFolderId: Long, + onNavigateToMenuInfo: (Long) -> Unit, // onNavigateToMap: () -> Unit, // TODO: Map으로 화면 이동 구현 onNavigateToAddMenu: () -> Unit, onNavigateBack: () -> Unit, diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt index c8e25819..6097174d 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/screen/MenuFolderScreen.kt @@ -37,7 +37,7 @@ import com.kuit.ourmenu.ui.theme.ourMenuTypography @Composable fun MenuFolderScreen( - onNavigateToDetail: (Int) -> Unit, + onNavigateToDetail: (Long) -> Unit, onNavigateToAllMenu: () -> Unit, onNavigateToAddMenu: () -> Unit, viewModel: MenuFolderViewModel = hiltViewModel() diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/viewmodel/MenuFolderDetailViewModel.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/viewmodel/MenuFolderDetailViewModel.kt index d06e2216..ec799b12 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/viewmodel/MenuFolderDetailViewModel.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/menuFolder/viewmodel/MenuFolderDetailViewModel.kt @@ -18,7 +18,7 @@ class MenuFolderDetailViewModel @Inject constructor( private val _menuFolderDetail = MutableStateFlow(MenuFolderDetailResponse()) val menuFolderDetail = _menuFolderDetail.asStateFlow() - private val _menuFolderId = MutableStateFlow(0) + private val _menuFolderId = MutableStateFlow(0) val menuFolderId = _menuFolderId.asStateFlow() private val _sortOrder = MutableStateFlow(SortOrderType.TITLE_ASC) @@ -31,7 +31,7 @@ class MenuFolderDetailViewModel @Inject constructor( val isLoading = _isLoading.asStateFlow() fun getMenuFolderDetail( - menuFolderId: Int, + menuFolderId: Long, sortOrder: SortOrderType = _sortOrder.value ) { _menuFolderId.value = menuFolderId @@ -57,7 +57,7 @@ class MenuFolderDetailViewModel @Inject constructor( } } - fun updateSortOrder(sortOrderType: SortOrderType, menuFolderId: Int) { + fun updateSortOrder(sortOrderType: SortOrderType, menuFolderId: Long) { if (_sortOrder.value != sortOrderType) { _sortOrder.value = sortOrderType getMenuFolderDetail(menuFolderId, sortOrderType) diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/navigation/MenuInfoNavigation.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/navigation/MenuInfoNavigation.kt index cddeeab7..023204bc 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/navigation/MenuInfoNavigation.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/navigation/MenuInfoNavigation.kt @@ -7,13 +7,13 @@ import androidx.navigation.toRoute import com.kuit.ourmenu.ui.menuinfo.screen.MenuInfoDefaultScreen import com.kuit.ourmenu.ui.navigator.Routes -fun NavController.navigateToMenuInfo(menuId: Int) { +fun NavController.navigateToMenuInfo(menuId: Long) { navigate(Routes.MenuInfo(menuId)) } fun NavGraphBuilder.menuInfoNavGraph( navigateBack: () -> Unit, - navigateToMenuFolderDetail: (Int) -> Unit, + navigateToMenuFolderDetail: (Long) -> Unit, navigateToMenuInfoMap: () -> Unit ) { composable { diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoDefaultScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoDefaultScreen.kt index b0f97e0b..630cd742 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoDefaultScreen.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoDefaultScreen.kt @@ -23,16 +23,15 @@ import com.kuit.ourmenu.ui.menuinfo.component.info.MenuInfoChipContent import com.kuit.ourmenu.ui.menuinfo.component.info.MenuInfoContent import com.kuit.ourmenu.ui.menuinfo.component.info.MenuInfoImagePager import com.kuit.ourmenu.ui.menuinfo.component.info.MenuInfoMapButton -import com.kuit.ourmenu.ui.menuinfo.dummy.MenuInfoDummyData import com.kuit.ourmenu.ui.menuinfo.viewmodel.MenuInfoViewModel import com.kuit.ourmenu.ui.theme.Neutral300 import com.kuit.ourmenu.ui.theme.NeutralWhite @Composable fun MenuInfoDefaultScreen( - menuId: Int, + menuId: Long, onNavigateBack: () -> Unit, - onNavigateToMenuFolderDetail: (Int) -> Unit, + onNavigateToMenuFolderDetail: (Long) -> Unit, // onNavigateToMap: () -> Unit, viewModel: MenuInfoViewModel = hiltViewModel() ) { @@ -73,15 +72,15 @@ fun MenuInfoDefaultScreen( ) MenuInfoChipContent( - onNavigateToMenuFolderDetail = onNavigateToMenuFolderDetail, + // TODO: 메뉴 폴더 정보에 따라 변경 필요, 여러개인 경우 각 폴더에 대한 이동 구현 +// onNavigateToMenuFolderDetail = onNavigateToMenuFolderDetail(menuInfo.menuFolders.), menuInfoData = menuInfo ) MenuInfoAdditionalContent( address = menuInfo.storeAddress, - // TODO: 메뉴 정보에 따라 변경 필요 - memoTitle = MenuInfoDummyData.dummyData.memoTitle, - memoContent = MenuInfoDummyData.dummyData.memoContent + memoTitle = menuInfo.menuMemoTitle, + memoContent = menuInfo.menuMemoContent ) } MenuInfoMapButton( @@ -105,4 +104,11 @@ private fun MenuInfoDefaultPreview() { // val navController = rememberNavController() // // MenuInfoDefaultScreen(navController) + val viewModel: MenuInfoViewModel = hiltViewModel() + MenuInfoDefaultScreen( + menuId = 1, + onNavigateBack = {}, + onNavigateToMenuFolderDetail = {}, + viewModel = viewModel + ) } \ No newline at end of file diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoMapScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoMapScreen.kt index 636b26bb..c604905c 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoMapScreen.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/screen/MenuInfoMapScreen.kt @@ -64,6 +64,7 @@ fun MenuInfoMapScreen(navController: NavController) { menuInfoData = MapDetailResponse( menuId = 1, menuTitle = "Test Menu", + storeTitle = "가게 이름", menuPrice = 10000, menuPinImgUrl = "pin", menuTagImgUrls = listOf("한식", "밥"), @@ -77,7 +78,9 @@ fun MenuInfoMapScreen(navController: NavController) { mapX = 127.0, mapY = 37.0 ) - ) + ){ + + } }, sheetPeekHeight = bottomSheetContentHeight, ) { innerPaddings -> diff --git a/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/viewmodel/MenuInfoViewModel.kt b/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/viewmodel/MenuInfoViewModel.kt index beca0b3c..bb03a149 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/viewmodel/MenuInfoViewModel.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/menuinfo/viewmodel/MenuInfoViewModel.kt @@ -17,7 +17,7 @@ class MenuInfoViewModel @Inject constructor( private val _menuInfo = MutableStateFlow(MenuInfoResponse()) val menuInfo = _menuInfo.asStateFlow() - private val _menuId = MutableStateFlow(0) + private val _menuId = MutableStateFlow(0) val menuId = _menuId.asStateFlow() private val _error: MutableStateFlow = MutableStateFlow(null) @@ -27,7 +27,7 @@ class MenuInfoViewModel @Inject constructor( val isLoading = _isLoading.asStateFlow() fun getMenuInfo( - menuId: Int + menuId: Long ) { _menuId.value = menuId diff --git a/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavController.kt b/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavController.kt index af08df63..eb706d95 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavController.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavController.kt @@ -95,7 +95,7 @@ class MainNavController( } // Menu Folder - fun navigateToMenuFolderDetail(menuFolderId: Int) { + fun navigateToMenuFolderDetail(menuFolderId: Long) { navController.navigateToMenuFolderDetail(menuFolderId) } @@ -118,7 +118,7 @@ class MainNavController( } // Menu Info - fun navigateToMenuInfo(menuId: Int) { + fun navigateToMenuInfo(menuId: Long) { navController.navigateToMenuInfo(menuId) } diff --git a/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavHost.kt b/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavHost.kt index fa607875..2b03ee12 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavHost.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/navigator/MainNavHost.kt @@ -73,7 +73,7 @@ fun MainNavHost( ) searchMenuNavGraph( - padding = padding, + navigateToMenuDetail = navController::navigateToMenuInfo, ) myNavGraph( diff --git a/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt b/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt index 85afe2d2..00b7b8e9 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/navigator/Routes.kt @@ -8,13 +8,13 @@ sealed interface Routes{ @Serializable data object MenuFolder: Routes @Serializable - data class MenuFolderDetail(val menuFolderId: Int): Routes + data class MenuFolderDetail(val menuFolderId: Long): Routes @Serializable data object MenuFolderAllMenu: Routes // 메뉴 @Serializable - data class MenuInfo(val menuId: Int): Routes + data class MenuInfo(val menuId: Long): Routes @Serializable data object MenuInfoMap: Routes diff --git a/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/component/SearchBottomSheetContent.kt b/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/component/SearchBottomSheetContent.kt index 0c49339c..bf894f21 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/component/SearchBottomSheetContent.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/component/SearchBottomSheetContent.kt @@ -14,7 +14,8 @@ import com.kuit.ourmenu.ui.common.bottomsheet.MenuInfoBottomSheetContent @Composable fun SearchBottomSheetContent( modifier: Modifier = Modifier, - dataList: List + dataList: List, + onItemClick: (Long) -> Unit ) { LazyColumn( modifier = modifier @@ -22,7 +23,10 @@ fun SearchBottomSheetContent( items(dataList.size) { index -> MenuInfoBottomSheetContent( modifier = Modifier.padding(vertical = 20.dp), - menuInfoData = dataList[index] + menuInfoData = dataList[index], + onClick = { menuId -> + onItemClick(menuId) + } ) if (index != dataList.size - 1) { HorizontalDivider() @@ -39,6 +43,7 @@ private fun SearchBottomSheetContentPreview() { MapDetailResponse( menuId = 1, menuTitle = "Test Menu", + storeTitle = "가게 이름", menuPrice = 10000, menuPinImgUrl = "pin", menuTagImgUrls = listOf("한식", "밥"), @@ -53,5 +58,7 @@ private fun SearchBottomSheetContentPreview() { mapY = 37.0 ) ) - ) + ){ + + } } \ No newline at end of file diff --git a/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/component/SearchHistory.kt b/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/component/SearchHistory.kt index 6da3f165..85743c5b 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/component/SearchHistory.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/component/SearchHistory.kt @@ -23,7 +23,8 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.kuit.ourmenu.R -import com.kuit.ourmenu.ui.searchmenu.model.SearchHistoryData +import com.kuit.ourmenu.data.model.map.response.MapSearchHistoryResponse +import com.kuit.ourmenu.ui.theme.Neutral300 import com.kuit.ourmenu.ui.theme.Neutral500 import com.kuit.ourmenu.ui.theme.Neutral700 import com.kuit.ourmenu.ui.theme.ourMenuTypography @@ -31,8 +32,8 @@ import com.kuit.ourmenu.ui.theme.ourMenuTypography @Composable fun SearchHistoryList( modifier: Modifier = Modifier, - onClick: () -> Unit = {}, - historyList: List + historyList: List?, + onClick: (Long) -> Unit = {}, ) { val lazyListState = rememberLazyListState() @@ -41,28 +42,53 @@ fun SearchHistoryList( .fillMaxWidth() .padding(top = 68.dp) ) { - Text( - text = "최근 검색", - style = ourMenuTypography().pretendard_600_16.copy( - lineHeight = 20.sp, - color = Neutral700 - ), - modifier = modifier - .padding(bottom = 4.dp) - .padding(horizontal = 28.dp) - ) - LazyColumn( - state = lazyListState - ) { - - items(historyList.size) { index -> - SearchHistoryItem( - historyData = historyList[index], - onClick = onClick + if (historyList == null || historyList.isEmpty()) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(top = 68.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Icon( + painter = painterResource(R.drawable.ic_addmenu_noresult), + contentDescription = "no result", + tint = Color.Unspecified + ) + Text( + text = stringResource(R.string.no_result), + style = ourMenuTypography().pretendard_600_14, + color = Neutral500, + modifier = Modifier.padding(top = 8.dp) ) + } + } else { + Text( + text = "최근 검색", + style = ourMenuTypography().pretendard_600_16.copy( + lineHeight = 20.sp, + color = Neutral700 + ), + modifier = modifier + .padding(bottom = 4.dp) + .padding(horizontal = 28.dp) + ) + LazyColumn( + state = lazyListState + ) { + + items(historyList.size) { index -> + SearchHistoryItem( + historyData = historyList[index], + onClick = onClick + ) - if (index != historyList.size - 1) { - HorizontalDivider() + if (index != historyList.size - 1) { + HorizontalDivider( + thickness = 1.dp, + color = Neutral300, + modifier = Modifier.fillMaxWidth() + ) + } } } } @@ -72,14 +98,14 @@ fun SearchHistoryList( @Composable fun SearchHistoryItem( modifier: Modifier = Modifier, - historyData: SearchHistoryData, - onClick: () -> Unit + historyData: MapSearchHistoryResponse, + onClick: (Long) -> Unit ) { Column( modifier = modifier .fillMaxWidth() - .clickable(onClick = onClick) + .clickable(onClick = { onClick(historyData.menuId) }) .padding(vertical = 20.dp, horizontal = 28.dp) ) { Text( @@ -115,7 +141,7 @@ fun SearchHistoryItem( .wrapContentHeight(align = Alignment.CenterVertically) ) Text( - text = stringResource(R.string.neungdongro_112), + text = historyData.storeAddress, style = ourMenuTypography().pretendard_600_14.copy( lineHeight = 20.sp, color = Neutral500 @@ -135,20 +161,23 @@ fun SearchHistoryItem( private fun SearchHistoryPreview() { SearchHistoryList( historyList = listOf( - SearchHistoryData( + MapSearchHistoryResponse( menuTitle = "피자", storeTitle = "피자헛", - address = "서울특별시 강남구 역삼동 123-4" + menuId = 1, + storeAddress = "서울특별시 강남구 역삼동 123-4" ), - SearchHistoryData( + MapSearchHistoryResponse( menuTitle = "치킨", storeTitle = "굽네치킨", - address = "서울특별시 강남구 역삼동 123-4" + menuId = 2, + storeAddress = "서울특별시 강남구 역삼동 456-7" ), - SearchHistoryData( + MapSearchHistoryResponse( menuTitle = "햄버거", storeTitle = "맥도날드", - address = "서울특별시 강남구 역삼동 123-4" + menuId = 3, + storeAddress = "서울특별시 강남구 역삼동 987-6" ) ), ) diff --git a/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/navigation/SearchMenuNavigation.kt b/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/navigation/SearchMenuNavigation.kt index 57130b11..c461a6bb 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/navigation/SearchMenuNavigation.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/navigation/SearchMenuNavigation.kt @@ -1,6 +1,5 @@ package com.kuit.ourmenu.ui.searchmenu.navigation -import androidx.compose.foundation.layout.PaddingValues import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions @@ -13,10 +12,12 @@ fun NavController.navigateToSearchMenu(navOptions: NavOptions) { } fun NavGraphBuilder.searchMenuNavGraph( - padding: PaddingValues, // navigate 이벤트 + navigateToMenuDetail: (Long) -> Unit, ) { composable { - SearchMenuScreen() + SearchMenuScreen( + onNavigateToMenuDetail = navigateToMenuDetail + ) } } \ No newline at end of file diff --git a/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/screen/SearchMenuScreen.kt b/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/screen/SearchMenuScreen.kt index 2b6e8f4b..9111aef6 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/screen/SearchMenuScreen.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/screen/SearchMenuScreen.kt @@ -17,10 +17,10 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.rememberBottomSheetScaffoldState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment @@ -42,7 +42,6 @@ import com.kuit.ourmenu.ui.common.map.mapViewWithLifecycle import com.kuit.ourmenu.ui.common.topappbar.OurMenuAddButtonTopAppBar import com.kuit.ourmenu.ui.searchmenu.component.SearchBottomSheetContent import com.kuit.ourmenu.ui.searchmenu.component.SearchHistoryList -import com.kuit.ourmenu.ui.searchmenu.model.SearchHistoryData import com.kuit.ourmenu.ui.searchmenu.viewmodel.SearchMenuViewModel import com.kuit.ourmenu.ui.theme.NeutralWhite import com.kuit.ourmenu.utils.PermissionHandler @@ -53,6 +52,7 @@ import kotlinx.coroutines.launch fun SearchMenuScreen( modifier: Modifier = Modifier, viewModel: SearchMenuViewModel = hiltViewModel(), + onNavigateToMenuDetail: (Long) -> Unit ) { val scaffoldState = rememberBottomSheetScaffoldState() @@ -64,18 +64,19 @@ fun SearchMenuScreen( var searchActionDone by rememberSaveable { mutableStateOf(false) } val interactionSource = remember { MutableInteractionSource() } val searchBarFocused by interactionSource.collectIsFocusedAsState() + val scope = rememberCoroutineScope() val focusManager = LocalFocusManager.current val context = LocalContext.current val locationPermissionGranted by viewModel.locationPermissionGranted.collectAsStateWithLifecycle() // 지도 중심 좌표 - val currentCenter by viewModel.currentCenter.collectAsState() + val currentCenter by viewModel.currentCenter.collectAsStateWithLifecycle() // 검색기록 - val searchHistory by viewModel.searchHistory.collectAsState() + val searchHistory by viewModel.searchHistory.collectAsStateWithLifecycle() // 핀 위치에 해당하는 메뉴들 - val menusOnPin by viewModel.menusOnPin.collectAsState() + val menusOnPin by viewModel.menusOnPin.collectAsStateWithLifecycle() val density = LocalDensity.current val singleItemHeight = 300.dp // Fixed height for each item @@ -120,10 +121,11 @@ fun SearchMenuScreen( if (searchBarFocused) { showSearchBackground = true showBottomSheet = false - - // Fetch crawling history when search field is focused - launch { + + // 검색 기록 조회 + scope.launch { viewModel.getSearchHistory() + Log.d("SearchMenuScreen", "검색 기록 조회: $searchHistory") } } } @@ -142,7 +144,11 @@ fun SearchMenuScreen( sheetContent = { SearchBottomSheetContent( modifier = Modifier.fillMaxWidth(), - dataList = menusOnPin ?: emptyList() + dataList = menusOnPin ?: emptyList(), + onItemClick = { menuId -> + Log.d("SearchMenuScreen", "바텀 시트 메뉴 아이템 클릭: $menuId") + onNavigateToMenuDetail(menuId) + } ) }, sheetContainerColor = NeutralWhite, @@ -178,18 +184,12 @@ fun SearchMenuScreen( ) } } else { - val historyDataList = searchHistory?.map { history -> - SearchHistoryData( - menuTitle = history.menuTitle, - storeTitle = history.storeAddress.split(',').firstOrNull() ?: "", - address = history.storeAddress - ) - } ?: emptyList() - SearchHistoryList( - historyList = historyDataList, - onClick = { + historyList = searchHistory, + onClick = { menuId -> // 크롤링 기록 아이템 클릭시 동작 + viewModel.getMapMenuDetail(menuId) + Log.d("SearchMenuScreen", "검색 기록 아이템 클릭: $menuId") showSearchBackground = false showBottomSheet = true } @@ -239,7 +239,7 @@ fun SearchMenuScreen( .align(Alignment.BottomEnd) .padding(bottom = 16.dp, end = 20.dp), onClick = { - // TODO: 임시로 설정해놓은 카메라 이동 + // TODO: 임시로 설정해놓은 카메라 이동, 실제로는 네이버 지도에 해당 가게 검색 결과로 이동 viewModel.moveCamera(37.5416, 127.0793) }, ) @@ -251,5 +251,8 @@ fun SearchMenuScreen( @Preview(showBackground = true) @Composable private fun SearchMenuScreenPreview() { - SearchMenuScreen() + SearchMenuScreen( + ){ + + } } \ No newline at end of file diff --git a/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/viewmodel/SearchMenuViewModel.kt b/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/viewmodel/SearchMenuViewModel.kt index 552d47e2..e719bc50 100644 --- a/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/viewmodel/SearchMenuViewModel.kt +++ b/app/src/main/java/com/kuit/ourmenu/ui/searchmenu/viewmodel/SearchMenuViewModel.kt @@ -313,11 +313,22 @@ class SearchMenuViewModel @Inject constructor( } } - fun getMapMenuDetail(menuId: Long){ + fun getMapMenuDetail(menuId: Long) { viewModelScope.launch { val response = mapRepository.getMapMenuDetail(menuId) - response.onSuccess { - Log.d("SearchMenuViewModel", "메뉴 상세 조회 성공: $it") + response.onSuccess { menuDetail -> + Log.d("SearchMenuViewModel", "메뉴 상세 조회 성공: $menuDetail") + + // myMenus에서 해당 menuId를 가진 메뉴의 위치 정보 찾기 + myMenus.value?.find { it.mapId == menuId }?.let { menu -> + // 해당 위치로 카메라 이동 + moveCamera(menu.mapY, menu.mapX) + // 해당 핀을 활성화 상태로 변경 + _activeMapId.value = menuId + refreshMarkers() + // 메뉴 상세 정보를 바텀시트에 표시하기 위해 설정 + getMapDetail(menuId) + } }.onFailure { Log.d("SearchMenuViewModel", "메뉴 상세 조회 실패: ${it.message}") }