From 3985c16b734ddd4b6a4b1ff2ae318f797160de6a Mon Sep 17 00:00:00 2001 From: SangEun Date: Fri, 29 Dec 2023 14:21:55 +0900 Subject: [PATCH] =?UTF-8?q?=EC=B2=B4=ED=81=AC=EB=A6=AC=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=20=EC=A4=91=20=EB=8B=89=EB=84=A4=EC=9E=84?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dkin/chevit/presentation/deeplink/DeepLink.kt | 4 ++-- .../com/dkin/chevit/presentation/home/Home.kt | 5 +++-- .../dkin/chevit/presentation/home/HomeContract.kt | 2 +- .../chevit/presentation/home/HomeViewModel.kt | 6 +++--- .../com/dkin/chevit/presentation/step/Step.kt | 9 +++++++++ .../dkin/chevit/presentation/step/StepScreen.kt | 8 +++++++- .../chevit/presentation/step/StepViewModel.kt | 15 +++++---------- .../step/src/main/res/navigation/nav_step.xml | 5 ++++- 8 files changed, 34 insertions(+), 20 deletions(-) diff --git a/presentation/deeplink/src/main/java/com/dkin/chevit/presentation/deeplink/DeepLink.kt b/presentation/deeplink/src/main/java/com/dkin/chevit/presentation/deeplink/DeepLink.kt index 7acd8b2..73fccf0 100644 --- a/presentation/deeplink/src/main/java/com/dkin/chevit/presentation/deeplink/DeepLink.kt +++ b/presentation/deeplink/src/main/java/com/dkin/chevit/presentation/deeplink/DeepLink.kt @@ -31,8 +31,8 @@ sealed interface DeepLink { override val deepLink: String = "$SCHEME://profile" } - object Step : DeepLink { - override val deepLink: String = "$SCHEME://step" + data class Step(val nickname: String) : DeepLink { + override val deepLink: String = "$SCHEME://step/$nickname" } data class CheckList(val id: String) : DeepLink { diff --git a/presentation/home/src/main/java/com/dkin/chevit/presentation/home/Home.kt b/presentation/home/src/main/java/com/dkin/chevit/presentation/home/Home.kt index 76c3700..ef68610 100644 --- a/presentation/home/src/main/java/com/dkin/chevit/presentation/home/Home.kt +++ b/presentation/home/src/main/java/com/dkin/chevit/presentation/home/Home.kt @@ -87,8 +87,9 @@ class Home : MVIComposeFragment() { override fun processEffect(effect: HomeEffect) { when (effect) { - HomeEffect.NavigateToAddCheckList -> - deepLink(DeepLink.Step) { popUpTo(R.id.home) } + is HomeEffect.NavigateToAddCheckList -> { + deepLink(DeepLink.Step(effect.nickname)) { popUpTo(R.id.home) } + } is HomeEffect.NavigateToCheckList -> { deepLink(DeepLink.CheckList(effect.id)) { popUpTo(R.id.home) } diff --git a/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeContract.kt b/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeContract.kt index 2727e02..8ce0dda 100644 --- a/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeContract.kt +++ b/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeContract.kt @@ -63,7 +63,7 @@ sealed interface HomeState : ViewState { } sealed interface HomeEffect : ViewEffect { - object NavigateToAddCheckList : HomeEffect + data class NavigateToAddCheckList(val nickname: String) : HomeEffect data class NavigateToCheckList(val id: String) : HomeEffect } diff --git a/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeViewModel.kt b/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeViewModel.kt index 5b5e34c..b16afdf 100644 --- a/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeViewModel.kt +++ b/presentation/home/src/main/java/com/dkin/chevit/presentation/home/HomeViewModel.kt @@ -1,6 +1,5 @@ package com.dkin.chevit.presentation.home -import androidx.lifecycle.viewModelScope import com.dkin.chevit.core.mvi.MVIViewModel import com.dkin.chevit.domain.base.getOrNull import com.dkin.chevit.domain.usecase.auth.GetUserUseCase @@ -8,7 +7,6 @@ import com.dkin.chevit.domain.usecase.plan.GetMyChecklistUseCase import com.dkin.chevit.presentation.home.model.CheckListItem import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.awaitAll -import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel @@ -16,6 +14,7 @@ class HomeViewModel @Inject constructor( private val getMyChecklistUseCase: GetMyChecklistUseCase, private val getUserUseCase: GetUserUseCase, ) : MVIViewModel() { + private var nickname = "" override fun createInitialState(): HomeState = HomeState.Loading @@ -30,7 +29,7 @@ class HomeViewModel @Inject constructor( } fun onClickAddChecklist() { - setEffect { HomeEffect.NavigateToAddCheckList } + setEffect { HomeEffect.NavigateToAddCheckList(nickname) } } fun onClickChecklist(id: String) { @@ -45,6 +44,7 @@ class HomeViewModel @Inject constructor( val checklist = checklistAsync.await().getOrNull() setState { val currentState = state.value + nickname = user?.name ?: "" if (currentState is HomeState.Stable) { currentState.copy( userName = user?.name ?: currentState.userName, diff --git a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/Step.kt b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/Step.kt index 37c09f4..cab45d3 100644 --- a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/Step.kt +++ b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/Step.kt @@ -7,6 +7,7 @@ import android.view.ViewGroup import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.fragment.app.viewModels +import androidx.navigation.fragment.findNavController import com.dkin.chevit.core.mvi.MVIComposeFragment import com.dkin.chevit.presentation.deeplink.DeepLink import com.dkin.chevit.presentation.deeplink.deepLink @@ -44,4 +45,12 @@ class Step : MVIComposeFragment() { } } } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val nickname = arguments?.getString("nickname") + nickname?.let { + viewModel.setNickname(nickname) + } ?: findNavController().popBackStack() + } } diff --git a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepScreen.kt b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepScreen.kt index d2bd71c..6ee247a 100644 --- a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepScreen.kt +++ b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepScreen.kt @@ -142,6 +142,12 @@ fun StepScreen( fun CreateCheckListLoading( nickname: String ) { + val text = if (nickname.isBlank()) { + "딱맞는 체크리스트를\\n만들고 있어요!" + } else { + "${nickname}님께\n딱맞는 체크리스트를\n만들고 있어요!" + } + Box( modifier = Modifier .fillMaxSize() @@ -160,7 +166,7 @@ fun CreateCheckListLoading( Spacer(Modifier.height(32.dp)) Text( modifier = Modifier, - text = "${nickname}님께\n딱맞는 체크리스트를\n만들고 있어요!", + text = text, style = ChevitTheme.typhography.headlineLarge.copy(color = ChevitTheme.colors.textPrimary), textAlign = TextAlign.Center ) diff --git a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepViewModel.kt b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepViewModel.kt index ce09d07..4d0ad3c 100644 --- a/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepViewModel.kt +++ b/presentation/step/src/main/java/com/dkin/chevit/presentation/step/StepViewModel.kt @@ -1,9 +1,7 @@ package com.dkin.chevit.presentation.step -import androidx.lifecycle.viewModelScope import com.dkin.chevit.core.mvi.MVIViewModel import com.dkin.chevit.domain.base.get -import com.dkin.chevit.domain.base.getOrNull import com.dkin.chevit.domain.base.onComplete import com.dkin.chevit.domain.model.Country import com.dkin.chevit.domain.usecase.plan.GetTravelKindsListUseCase @@ -19,8 +17,6 @@ import kotlinx.coroutines.awaitAll import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.update -import kotlinx.coroutines.launch import java.time.LocalDate import javax.inject.Inject @@ -29,7 +25,7 @@ class StepViewModel @Inject constructor( private val getTravelKindsListUseCase: GetTravelKindsListUseCase, private val getTravelWithListUseCase: GetTravelWithListUseCase, private val searchCountryListUseCase: SearchCountryListUseCase, - private val postNewScheduleUseCase: PostNewScheduleUseCase + private val postNewScheduleUseCase: PostNewScheduleUseCase, ) : MVIViewModel() { private val _countryList: MutableStateFlow> = MutableStateFlow(listOf()) val countryList = _countryList.asStateFlow() @@ -40,11 +36,6 @@ class StepViewModel @Inject constructor( private val _userNickname: MutableStateFlow = MutableStateFlow("") val userNickname = _userNickname.asStateFlow() - init { - //TODO 닉네임 datastore에서 가져오기 - _userNickname.value = "민지" - } - override fun createInitialState(): StepState = StepState.empty() override suspend fun processIntent(intent: StepIntent) { @@ -54,6 +45,10 @@ class StepViewModel @Inject constructor( } } + fun setNickname(name: String) { + _userNickname.value = name + } + fun clearCountry() { _countryList.value = listOf() setState { diff --git a/presentation/step/src/main/res/navigation/nav_step.xml b/presentation/step/src/main/res/navigation/nav_step.xml index 9e5c6fb..13b2501 100644 --- a/presentation/step/src/main/res/navigation/nav_step.xml +++ b/presentation/step/src/main/res/navigation/nav_step.xml @@ -9,6 +9,9 @@ android:id="@+id/step" android:name="com.dkin.chevit.presentation.step.Step" android:label="Step"> - + +