From 8eeb2a29bdc74679a584487680e9cd33dda351a0 Mon Sep 17 00:00:00 2001 From: hsgo2430 Date: Wed, 2 Oct 2024 17:54:15 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EA=B0=80=EA=B2=8C=20=EB=8B=A4=EC=A4=91=20?= =?UTF-8?q?=EB=B3=B4=EC=9C=A0=EC=8B=9C=20=EA=B4=80=EB=A6=AC=ED=95=A0=20?= =?UTF-8?q?=EA=B0=80=EA=B2=8C=EB=A5=BC=20=EC=84=A0=ED=83=9D=ED=95=A0=20?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EB=8A=94=20=EB=8B=A4=EC=9D=B4=EC=96=BC?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../startinsetstore/StartInsertStore.kt | 1 - .../feature/signin/SignInViewModel.kt | 5 +- .../store/modifyinfo/ModifyInfoViewModel.kt | 1 + .../feature/store/navigator/StoreNavigator.kt | 8 +- .../store/storedetail/MyStoreDetailScreen.kt | 15 +- .../store/storedetail/MyStoreDetailState.kt | 4 +- .../storedetail/MyStoreDetailViewModel.kt | 73 ++++++--- .../store/storedetail/MyStoreTopBar.kt | 6 +- .../storedetail/dialog/MyStoreSelectDialog.kt | 140 ++++++++++++++++++ .../business/navigation/TmpScreen.kt | 14 -- 10 files changed, 214 insertions(+), 53 deletions(-) create mode 100644 business/src/main/java/in/koreatech/business/feature/store/storedetail/dialog/MyStoreSelectDialog.kt delete mode 100644 business/src/main/java/in/koreatech/business/navigation/TmpScreen.kt diff --git a/business/src/main/java/in/koreatech/business/feature/insertstore/startinsetstore/StartInsertStore.kt b/business/src/main/java/in/koreatech/business/feature/insertstore/startinsetstore/StartInsertStore.kt index e0ccc5ab3..678071797 100644 --- a/business/src/main/java/in/koreatech/business/feature/insertstore/startinsetstore/StartInsertStore.kt +++ b/business/src/main/java/in/koreatech/business/feature/insertstore/startinsetstore/StartInsertStore.kt @@ -51,7 +51,6 @@ fun StartInsertScreen( modifier = modifier .width(40.dp) .height(40.dp) - .clickable { } ) } diff --git a/business/src/main/java/in/koreatech/business/feature/signin/SignInViewModel.kt b/business/src/main/java/in/koreatech/business/feature/signin/SignInViewModel.kt index a54103af1..e888f1e48 100644 --- a/business/src/main/java/in/koreatech/business/feature/signin/SignInViewModel.kt +++ b/business/src/main/java/in/koreatech/business/feature/signin/SignInViewModel.kt @@ -11,6 +11,7 @@ import `in`.koreatech.koin.domain.util.onFailure import `in`.koreatech.koin.domain.util.onSuccess import kotlinx.coroutines.launch import org.orbitmvi.orbit.ContainerHost +import org.orbitmvi.orbit.syntax.simple.blockingIntent import org.orbitmvi.orbit.syntax.simple.intent import org.orbitmvi.orbit.syntax.simple.postSideEffect import org.orbitmvi.orbit.syntax.simple.reduce @@ -26,11 +27,11 @@ class SignInViewModel @Inject constructor( SignInState() ) - fun insertId(id: String) = intent{ + fun insertId(id: String) = blockingIntent{ reduce { state.copy(id = id) } } - fun insertPassword(password: String) = intent{ + fun insertPassword(password: String) = blockingIntent{ reduce { state.copy(password = password) } } fun navigateToSignUp() = intent { diff --git a/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoViewModel.kt b/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoViewModel.kt index 4370b15c7..1b2fe5bf9 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoViewModel.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoViewModel.kt @@ -2,6 +2,7 @@ package `in`.koreatech.business.feature.store.modifyinfo import android.graphics.Bitmap import android.net.Uri +import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.chargemap.compose.numberpicker.FullHours diff --git a/business/src/main/java/in/koreatech/business/feature/store/navigator/StoreNavigator.kt b/business/src/main/java/in/koreatech/business/feature/store/navigator/StoreNavigator.kt index a191f7cc5..ac7c5dccd 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/navigator/StoreNavigator.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/navigator/StoreNavigator.kt @@ -2,15 +2,10 @@ package `in`.koreatech.business.feature.store.navigator import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController -import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable -import androidx.navigation.compose.rememberNavController import androidx.navigation.navigation import `in`.koreatech.business.feature.store.modifyinfo.ModifyInfoScreen import `in`.koreatech.business.feature.store.modifyinfo.ModifyInfoViewModel @@ -23,7 +18,6 @@ import `in`.koreatech.business.navigation.sharedHiltViewModel import `in`.koreatech.business.navigation.toNavigateModifyMenuScreen import `in`.koreatech.business.navigation.toNavigateRegisterMenuScreen -@OptIn(ExperimentalAnimationApi::class) fun NavGraphBuilder.myStoreScreen( navController: NavHostController ){ @@ -58,9 +52,11 @@ fun NavGraphBuilder.myStoreScreen( route = StoreRoute.MODIFY_INFO.name ) { val modifyInfoViewModel: ModifyInfoViewModel = it.sharedHiltViewModel(navController = navController) + val myStoreInfoViewModel: MyStoreDetailViewModel = it.sharedHiltViewModel(navController = navController) ModifyInfoScreen( viewModel = modifyInfoViewModel, + storeInfoViewModel= myStoreInfoViewModel, onSettingOperatingClicked = { navController.navigate(StoreRoute.SETTING_OPERATING_TIME.name) }, onBackClicked = { navController.popBackStack() } ) diff --git a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailScreen.kt b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailScreen.kt index fde718a5b..996189c6e 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailScreen.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailScreen.kt @@ -1,16 +1,13 @@ package `in`.koreatech.business.feature.store.storedetail import android.annotation.SuppressLint -import android.util.Log import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.border import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width @@ -22,8 +19,6 @@ import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.PagerState import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.Button -import androidx.compose.material.ButtonDefaults import androidx.compose.material.Divider import androidx.compose.material.Tab import androidx.compose.material.TabRow @@ -43,13 +38,13 @@ import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.zIndex import `in`.koreatech.business.R import `in`.koreatech.business.feature.store.OwnerStoreAppBar import `in`.koreatech.business.feature.store.modifyinfo.ModifyInfoViewModel +import `in`.koreatech.business.feature.store.storedetail.dialog.MyStoreSelectDialog import `in`.koreatech.business.feature.store.storedetail.event.EventScreen import `in`.koreatech.business.feature.store.storedetail.menu.MenuScreen import `in`.koreatech.business.ui.theme.Blue2 @@ -83,7 +78,7 @@ fun MyStoreDetailScreen( val context = LocalContext.current LaunchedEffect(state.storeInfo) { - viewModel.initOwnerShopList() + viewModel.changeMyStoreInfo(storeId = state.storeId) modifyInfoViewModel.initStoreInfo(state.storeInfo ?: return@LaunchedEffect) } @@ -91,6 +86,12 @@ fun MyStoreDetailScreen( modifier = Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, ) { OwnerStoreAppBar(stringResource(R.string.my_shop)) + MyStoreSelectDialog( + dialogVisibility = state.selectDialogVisibility, + storeList = state.storeList, + onClickCancel = viewModel::closeSelectStoreDialog, + selectStore = viewModel::changeMyStoreInfo + ) MyStoreScrollScreen( state = state, listState = listState, diff --git a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailState.kt b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailState.kt index c1c5c677c..4f8aacaa9 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailState.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailState.kt @@ -4,7 +4,6 @@ import `in`.koreatech.koin.domain.model.owner.StoreDetailInfo import `in`.koreatech.koin.domain.model.store.ShopEvent import `in`.koreatech.koin.domain.model.store.Store import `in`.koreatech.koin.domain.model.store.StoreMenuCategories -import `in`.koreatech.koin.domain.model.store.StoreWithMenu import kotlinx.collections.immutable.ImmutableList data class MyStoreDetailState( @@ -14,8 +13,9 @@ data class MyStoreDetailState( val storeEvent: ImmutableList? = null, val storeMenu: ImmutableList? = null, val dialogVisibility: Boolean = false, + val selectDialogVisibility: Boolean = false, val isEventExpanded: List = List(storeEvent?.size ?: 0) { false }, val isAllEventSelected: Boolean = false, val isSelectedEvent: MutableList = mutableListOf(), - val isEditMode: Boolean = false + val isEditMode: Boolean = false, ) \ No newline at end of file diff --git a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailViewModel.kt b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailViewModel.kt index 6020e14d9..4414ebf87 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailViewModel.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailViewModel.kt @@ -1,7 +1,6 @@ package `in`.koreatech.business.feature.store.storedetail -import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel @@ -89,8 +88,7 @@ class MyStoreDetailViewModel @Inject constructor( } } - - fun getOwnerShopInfo(shopId: Int) = intent { + private fun getOwnerShopInfo(shopId: Int) = intent { viewModelScope.launch { getOwnerShopInfoUseCase(shopId).onSuccess { reduce { @@ -106,7 +104,52 @@ class MyStoreDetailViewModel @Inject constructor( } } - fun initOwnerShopList() = intent { + private fun getShopEvents() = intent { + viewModelScope.launch { + getOwnerShopEventsUseCase(state.storeId).also { + reduce { + state.copy( + storeEvent = it.events.toImmutableList(), + isEventExpanded = List(it.events.size) { _ -> false }) + } + } + } + } + + fun changeMyStoreInfo(storeId: Int) = intent{ + viewModelScope.launch { + getOwnerShopInfoUseCase(storeId).onSuccess { + reduce { + state.copy( + storeInfo = it + ) + } + reduce { + state.copy( + storeId = storeId + ) + } + getShopEvents() + getShopMenus() + }.onFailure { + reduce { + state.copy(storeInfo = null) + } + } + } + } + + fun changeDialogVisibility() = intent { + reduce { + state.copy( + dialogVisibility = if (state.isSelectedEvent.size > 0) { + !state.dialogVisibility + } else false + ) + } + } + + private fun initOwnerShopList() = intent { viewModelScope.launch { getOwnerShopListUseCase().onSuccess { reduce { @@ -133,7 +176,7 @@ class MyStoreDetailViewModel @Inject constructor( } } - fun getShopMenus() = intent { + private fun getShopMenus() = intent { viewModelScope.launch { getOwnerShopMenusUseCase(state.storeId).also { reduce { @@ -143,24 +186,18 @@ class MyStoreDetailViewModel @Inject constructor( } } - fun getShopEvents() = intent { - viewModelScope.launch { - getOwnerShopEventsUseCase(state.storeId).also { - reduce { - state.copy( - storeEvent = it.events.toImmutableList(), - isEventExpanded = List(it.events.size) { _ -> false }) - } - } + fun showSelectStoreDialog() = intent{ + reduce { + state.copy( + selectDialogVisibility = true + ) } } - fun changeDialogVisibility() = intent { + fun closeSelectStoreDialog() = intent{ reduce { state.copy( - dialogVisibility = if (state.isSelectedEvent.size > 0) { - !state.dialogVisibility - } else false + selectDialogVisibility = false ) } } diff --git a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreTopBar.kt b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreTopBar.kt index f0051fa96..ee5ade8d9 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreTopBar.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreTopBar.kt @@ -1,6 +1,5 @@ package `in`.koreatech.business.feature.store.storedetail -import android.util.Log import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.animateColorAsState import androidx.compose.foundation.BorderStroke @@ -35,7 +34,6 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.hilt.navigation.compose.hiltViewModel import coil.compose.rememberAsyncImagePainter import `in`.koreatech.business.R import `in`.koreatech.business.ui.theme.ColorPrimary @@ -130,7 +128,9 @@ fun StoreInfoScreen( } Button( - onClick = { }, //TODO 상점이 여러개일 경우 선택하는 기능 만들기 + onClick = { + viewModel.showSelectStoreDialog() + }, modifier = Modifier .padding(horizontal = 16.dp) .border(1.dp, ColorPrimary, RoundedCornerShape(0.dp)) diff --git a/business/src/main/java/in/koreatech/business/feature/store/storedetail/dialog/MyStoreSelectDialog.kt b/business/src/main/java/in/koreatech/business/feature/store/storedetail/dialog/MyStoreSelectDialog.kt new file mode 100644 index 000000000..9ae1d72ed --- /dev/null +++ b/business/src/main/java/in/koreatech/business/feature/store/storedetail/dialog/MyStoreSelectDialog.kt @@ -0,0 +1,140 @@ +package `in`.koreatech.business.feature.store.storedetail.dialog + +import android.util.Log +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.AlertDialog +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults +import androidx.compose.material.Card +import androidx.compose.material.Text +import androidx.compose.material.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties +import `in`.koreatech.business.R +import `in`.koreatech.business.ui.theme.ColorActiveButton +import `in`.koreatech.business.ui.theme.ColorDisabledButton +import `in`.koreatech.business.ui.theme.ColorMinor +import `in`.koreatech.koin.domain.model.store.Store + +@Composable +fun MyStoreSelectDialog( + onClickCancel: () -> Unit = {}, + dialogVisibility: Boolean = true, + storeList: List = emptyList(), + selectStore: (Int) -> Unit = {} +) { + if(dialogVisibility){ + Dialog( + onDismissRequest = { onClickCancel() }, + properties = DialogProperties( + dismissOnBackPress = true, + dismissOnClickOutside = true, + ) + ) { + Card( + shape = RoundedCornerShape( + topStart = 20.dp, + topEnd = 20.dp, + bottomStart = 20.dp, + bottomEnd = 20.dp + ), + ) + { + Column( + modifier = Modifier + .width(300.dp) + .wrapContentHeight(), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + + Box( + modifier = Modifier + .padding(top = 16.dp) + .fillMaxWidth() + ) { + Image( + painter = painterResource(R.drawable.ic_x), + contentDescription = "", + modifier = Modifier + .align(Alignment.TopEnd) + .padding(end = 16.dp) + .clickable { + onClickCancel() + } + ) + } + + Text( + text = stringResource(id = R.string.select_store), + textAlign = TextAlign.Center, + color = Color.Black, + fontSize = 18.sp, + fontWeight = FontWeight.Bold + ) + + LazyColumn( + modifier = Modifier + .padding(top = 8.dp, bottom = 8.dp) + .heightIn(max = 200.dp), + horizontalAlignment = Alignment.CenterHorizontally, + ){ + itemsIndexed(storeList){ index, store -> + Text( + modifier = Modifier + .height(30.dp) + .padding(horizontal = 40.dp) + .clickable { + selectStore(store.uid) + onClickCancel() + } + , + text = "${index + 1}. ${store.name}", + fontSize = 15.sp, + textAlign = TextAlign.Start + ) + } + } + } + } + } + } +} + +@Preview +@Composable +fun PreviewMyStoreSelectDialog() { + MyStoreSelectDialog( + ) +} \ No newline at end of file diff --git a/business/src/main/java/in/koreatech/business/navigation/TmpScreen.kt b/business/src/main/java/in/koreatech/business/navigation/TmpScreen.kt deleted file mode 100644 index 3332a8cbc..000000000 --- a/business/src/main/java/in/koreatech/business/navigation/TmpScreen.kt +++ /dev/null @@ -1,14 +0,0 @@ -package `in`.koreatech.business.navigation - -import androidx.compose.material.Button -import androidx.compose.material.Text -import androidx.compose.runtime.Composable - -@Composable -fun TestScreen( - onSignUpComplete: () -> Unit = {} -) { - Button(onClick = onSignUpComplete ) { - Text("임시 버튼") - } -} \ No newline at end of file From fc98918708afe30036a69996150cd1d359857f3f Mon Sep 17 00:00:00 2001 From: hsgo2430 Date: Sun, 6 Oct 2024 20:03:32 +0900 Subject: [PATCH 2/3] =?UTF-8?q?1=EC=B0=A8=20=EC=BD=94=EB=A9=98=ED=8A=B8=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/modifyinfo/ModifyInfoScreen.kt | 8 +++- .../store/modifyinfo/ModifyInfoSideEffect.kt | 1 + .../store/modifyinfo/ModifyInfoViewModel.kt | 14 ++++--- .../modifyinfo/ModifyOperatingTimeScreen.kt | 1 - .../feature/store/navigator/StoreNavigator.kt | 41 ++++++++++++++++++- .../store/storedetail/MyStoreDetailScreen.kt | 7 ++-- .../storedetail/MyStoreDetailSideEffect.kt | 2 +- .../store/storedetail/MyStoreDetailState.kt | 2 +- .../storedetail/MyStoreDetailViewModel.kt | 24 ++++++++++- .../storedetail/dialog/MyStoreSelectDialog.kt | 2 +- 10 files changed, 84 insertions(+), 18 deletions(-) diff --git a/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoScreen.kt b/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoScreen.kt index a076d1080..cec29cbe7 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoScreen.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoScreen.kt @@ -58,6 +58,7 @@ fun ModifyInfoScreen( viewModel: ModifyInfoViewModel = hiltViewModel(), storeInfoViewModel: MyStoreDetailViewModel = hiltViewModel(), onSettingOperatingClicked: () -> Unit = {}, + onModifyButtonCLicked: () -> Unit = {} ) { val state = viewModel.collectAsState().value val storeInfoState = storeInfoViewModel.collectAsState().value @@ -249,7 +250,6 @@ fun ModifyInfoScreen( storeInfoState.storeId, state.storeInfo ) - viewModel.onBackButtonClicked() }, modifier = Modifier .width(130.dp) @@ -279,7 +279,11 @@ fun ModifyInfoScreen( when (it) { ModifyInfoSideEffect.NavigateToBackScreen -> onBackClicked() ModifyInfoSideEffect.NavigateToSettingOperatingTime -> onSettingOperatingClicked() - else -> {} + ModifyInfoSideEffect.NavigateToMyStoreScreen -> { + storeInfoViewModel.modifyStoreInfo(state.storeInfo) + storeInfoViewModel.refreshStoreList() + onModifyButtonCLicked() + } } } } diff --git a/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoSideEffect.kt b/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoSideEffect.kt index c2fc8a65c..a1d711d1f 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoSideEffect.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoSideEffect.kt @@ -3,4 +3,5 @@ package `in`.koreatech.business.feature.store.modifyinfo sealed class ModifyInfoSideEffect { data object NavigateToBackScreen : ModifyInfoSideEffect() data object NavigateToSettingOperatingTime : ModifyInfoSideEffect() + data object NavigateToMyStoreScreen : ModifyInfoSideEffect() } diff --git a/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoViewModel.kt b/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoViewModel.kt index 1b2fe5bf9..694f67aea 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoViewModel.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoViewModel.kt @@ -177,11 +177,15 @@ class ModifyInfoViewModel @Inject constructor( } fun modifyStoreInfo(storeId: Int, storeDetailInfo: StoreDetailInfo) { - viewModelScope.launch { - modifyInfoUseCase.invoke( - storeId, - storeDetailInfo, - ) + intent { + viewModelScope.launch { + modifyInfoUseCase.invoke( + storeId, + storeDetailInfo, + ).apply { + this ?: postSideEffect(ModifyInfoSideEffect.NavigateToMyStoreScreen) + } + } } } diff --git a/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyOperatingTimeScreen.kt b/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyOperatingTimeScreen.kt index 74688092c..83f3b0ae0 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyOperatingTimeScreen.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyOperatingTimeScreen.kt @@ -42,7 +42,6 @@ import org.orbitmvi.orbit.compose.collectSideEffect @Composable fun ModifyOperatingTimeScreen( modifier: Modifier = Modifier, - myStoreDetailViewModel: MyStoreDetailViewModel = hiltViewModel(), viewModel: ModifyInfoViewModel = hiltViewModel(), onBackClicked: () -> Unit = {}, ) { diff --git a/business/src/main/java/in/koreatech/business/feature/store/navigator/StoreNavigator.kt b/business/src/main/java/in/koreatech/business/feature/store/navigator/StoreNavigator.kt index ac7c5dccd..249f6b214 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/navigator/StoreNavigator.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/navigator/StoreNavigator.kt @@ -1,10 +1,16 @@ package `in`.koreatech.business.feature.store.navigator +import android.os.Bundle +import android.util.Log import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.ui.Modifier +import androidx.navigation.NavController +import androidx.navigation.NavGraph import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController +import androidx.navigation.NavOptions +import androidx.navigation.Navigator import androidx.navigation.compose.composable import androidx.navigation.navigation import `in`.koreatech.business.feature.store.modifyinfo.ModifyInfoScreen @@ -14,10 +20,12 @@ import `in`.koreatech.business.feature.store.storedetail.MyStoreDetailScreen import `in`.koreatech.business.feature.store.storedetail.MyStoreDetailViewModel import `in`.koreatech.business.navigation.MYSTORESCREEN import `in`.koreatech.business.navigation.REGISTERSTORESCREEN +import `in`.koreatech.business.navigation.navigate import `in`.koreatech.business.navigation.sharedHiltViewModel import `in`.koreatech.business.navigation.toNavigateModifyMenuScreen import `in`.koreatech.business.navigation.toNavigateRegisterMenuScreen +@OptIn(ExperimentalAnimationApi::class) fun NavGraphBuilder.myStoreScreen( navController: NavHostController ){ @@ -32,7 +40,9 @@ fun NavGraphBuilder.myStoreScreen( val modifyInfoViewModel: ModifyInfoViewModel = it.sharedHiltViewModel(navController = navController) MyStoreDetailScreen( modifier = Modifier.fillMaxSize(), - navigateToModifyScreen = { navController.navigate(StoreRoute.MODIFY_INFO.name) }, + navigateToModifyScreen = {storeId -> + navController.navigate(StoreRoute.MODIFY_INFO.name) + }, viewModel = myStoreInfoViewModel, modifyInfoViewModel = modifyInfoViewModel, navigateToRegisterStoreScreen = { @@ -58,7 +68,14 @@ fun NavGraphBuilder.myStoreScreen( viewModel = modifyInfoViewModel, storeInfoViewModel= myStoreInfoViewModel, onSettingOperatingClicked = { navController.navigate(StoreRoute.SETTING_OPERATING_TIME.name) }, - onBackClicked = { navController.popBackStack() } + onBackClicked = { navController.popBackStack() }, + onModifyButtonCLicked = { + navController.navigate(StoreRoute.MY_STORE.name){ + popUpTo(StoreRoute.MODIFY_INFO.name){ + inclusive = true + } + } + } ) } @@ -73,4 +90,24 @@ fun NavGraphBuilder.myStoreScreen( ) } } +} + +fun NavController.toNaviGateModifyStoreScreen(storeId: Int){ + val bundle = Bundle().apply { + putInt("storeId", storeId) + } + navigate(StoreRoute.MODIFY_INFO.name, bundle) +} +fun NavController.navigate( + route: String, + args: Bundle, + navOptions: NavOptions? = null, + navigatorExtras: Navigator.Extras? = null +) { + val nodes = graph.findNode(MYSTORESCREEN) as? NavGraph + + val nodeId = nodes?.findNode(route)?.id + if (nodeId != null) { + navigate(nodeId, args, navOptions, navigatorExtras) + } } \ No newline at end of file diff --git a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailScreen.kt b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailScreen.kt index 996189c6e..9d94b6f5f 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailScreen.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailScreen.kt @@ -65,7 +65,7 @@ fun MyStoreDetailScreen( modifyInfoViewModel: ModifyInfoViewModel, navigateToLoginScreen: () -> Unit = {}, navigateToUploadEventScreen: () -> Unit = {}, - navigateToModifyScreen: () -> Unit = {}, + navigateToModifyScreen: (Int) -> Unit = {}, navigateToRegisterStoreScreen: () -> Unit = {}, navigateToManageMenuScreen: () -> Unit = {}, navigateToRegisterMenuScreen: (Int) -> Unit = {}, @@ -78,7 +78,6 @@ fun MyStoreDetailScreen( val context = LocalContext.current LaunchedEffect(state.storeInfo) { - viewModel.changeMyStoreInfo(storeId = state.storeId) modifyInfoViewModel.initStoreInfo(state.storeInfo ?: return@LaunchedEffect) } @@ -114,8 +113,8 @@ fun MyStoreDetailScreen( } MyStoreDetailSideEffect.NavigateToUploadEventScreen -> navigateToUploadEventScreen() - MyStoreDetailSideEffect.NavigateToModifyScreen -> { - navigateToModifyScreen() + is MyStoreDetailSideEffect.NavigateToModifyScreen -> { + navigateToModifyScreen(it.storeId) } MyStoreDetailSideEffect.NavigateToRegisterStoreScreen -> navigateToRegisterStoreScreen() MyStoreDetailSideEffect.NavigateToManageMenuScreen -> navigateToManageMenuScreen() diff --git a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailSideEffect.kt b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailSideEffect.kt index 2b803a449..520d118d4 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailSideEffect.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailSideEffect.kt @@ -3,7 +3,7 @@ package `in`.koreatech.business.feature.store.storedetail sealed class MyStoreDetailSideEffect { data object NavigateToUploadEventScreen : MyStoreDetailSideEffect() - data object NavigateToModifyScreen : MyStoreDetailSideEffect() + data class NavigateToModifyScreen(val storeId: Int) : MyStoreDetailSideEffect() data object NavigateToManageMenuScreen : MyStoreDetailSideEffect() data object NavigateToRegisterMenuScreen : MyStoreDetailSideEffect() diff --git a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailState.kt b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailState.kt index 4f8aacaa9..c9daf89a8 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailState.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailState.kt @@ -17,5 +17,5 @@ data class MyStoreDetailState( val isEventExpanded: List = List(storeEvent?.size ?: 0) { false }, val isAllEventSelected: Boolean = false, val isSelectedEvent: MutableList = mutableListOf(), - val isEditMode: Boolean = false, + val isEditMode: Boolean = false ) \ No newline at end of file diff --git a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailViewModel.kt b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailViewModel.kt index 4414ebf87..40d367360 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailViewModel.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/storedetail/MyStoreDetailViewModel.kt @@ -4,6 +4,7 @@ package `in`.koreatech.business.feature.store.storedetail import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel +import `in`.koreatech.koin.domain.model.owner.StoreDetailInfo import `in`.koreatech.koin.domain.usecase.business.DeleteOwnerEventsUseCase import `in`.koreatech.koin.domain.usecase.business.GetOwnerShopEventsUseCase import `in`.koreatech.koin.domain.usecase.business.GetOwnerShopInfoUseCase @@ -139,6 +140,12 @@ class MyStoreDetailViewModel @Inject constructor( } } + fun modifyStoreInfo(storeInfo: StoreDetailInfo) = intent { + reduce { + state.copy(storeInfo = storeInfo) + } + } + fun changeDialogVisibility() = intent { reduce { state.copy( @@ -186,6 +193,21 @@ class MyStoreDetailViewModel @Inject constructor( } } + fun refreshStoreList() = intent { + viewModelScope.launch { + getOwnerShopListUseCase() + .onSuccess { + reduce { + state.copy( + storeList = it, + ) + } + }.onFailure { + postSideEffect(MyStoreDetailSideEffect.ShowErrorMessage(it.message)) + } + } + } + fun showSelectStoreDialog() = intent{ reduce { state.copy( @@ -204,7 +226,7 @@ class MyStoreDetailViewModel @Inject constructor( fun navigateToModifyScreen() = intent { if (state.storeId == -1) return@intent - postSideEffect(MyStoreDetailSideEffect.NavigateToModifyScreen) + postSideEffect(MyStoreDetailSideEffect.NavigateToModifyScreen(state.storeId)) } fun onManageMenuClicked() = intent { diff --git a/business/src/main/java/in/koreatech/business/feature/store/storedetail/dialog/MyStoreSelectDialog.kt b/business/src/main/java/in/koreatech/business/feature/store/storedetail/dialog/MyStoreSelectDialog.kt index 9ae1d72ed..2906696fa 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/storedetail/dialog/MyStoreSelectDialog.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/storedetail/dialog/MyStoreSelectDialog.kt @@ -134,7 +134,7 @@ fun MyStoreSelectDialog( @Preview @Composable -fun PreviewMyStoreSelectDialog() { +private fun PreviewMyStoreSelectDialog() { MyStoreSelectDialog( ) } \ No newline at end of file From 24e6379a3bdb10ea87c5ff3f4b17dbed9effa34a Mon Sep 17 00:00:00 2001 From: hsgo2430 Date: Tue, 8 Oct 2024 18:16:14 +0900 Subject: [PATCH 3/3] =?UTF-8?q?2=EC=B0=A8=20=EC=BD=94=EB=A9=98=ED=8A=B8=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/feature/store/modifyinfo/ModifyInfoScreen.kt | 4 ++-- .../business/feature/store/navigator/StoreNavigator.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoScreen.kt b/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoScreen.kt index cec29cbe7..d574d4aad 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoScreen.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/modifyinfo/ModifyInfoScreen.kt @@ -58,7 +58,7 @@ fun ModifyInfoScreen( viewModel: ModifyInfoViewModel = hiltViewModel(), storeInfoViewModel: MyStoreDetailViewModel = hiltViewModel(), onSettingOperatingClicked: () -> Unit = {}, - onModifyButtonCLicked: () -> Unit = {} + onModifyButtonClicked: () -> Unit = {} ) { val state = viewModel.collectAsState().value val storeInfoState = storeInfoViewModel.collectAsState().value @@ -282,7 +282,7 @@ fun ModifyInfoScreen( ModifyInfoSideEffect.NavigateToMyStoreScreen -> { storeInfoViewModel.modifyStoreInfo(state.storeInfo) storeInfoViewModel.refreshStoreList() - onModifyButtonCLicked() + onModifyButtonClicked() } } } diff --git a/business/src/main/java/in/koreatech/business/feature/store/navigator/StoreNavigator.kt b/business/src/main/java/in/koreatech/business/feature/store/navigator/StoreNavigator.kt index 249f6b214..f628d7c77 100644 --- a/business/src/main/java/in/koreatech/business/feature/store/navigator/StoreNavigator.kt +++ b/business/src/main/java/in/koreatech/business/feature/store/navigator/StoreNavigator.kt @@ -69,7 +69,7 @@ fun NavGraphBuilder.myStoreScreen( storeInfoViewModel= myStoreInfoViewModel, onSettingOperatingClicked = { navController.navigate(StoreRoute.SETTING_OPERATING_TIME.name) }, onBackClicked = { navController.popBackStack() }, - onModifyButtonCLicked = { + onModifyButtonClicked = { navController.navigate(StoreRoute.MY_STORE.name){ popUpTo(StoreRoute.MODIFY_INFO.name){ inclusive = true