Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ espressoCore = "3.6.1"

## Other
material = "1.12.0"
orbit = "6.1.0"
orbit = "10.0.0"
javax = "1"
kakaoLogin = "2.21.4"
lottie-compose = "6.6.0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@ import androidx.lifecycle.ViewModel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.StateFlow
import org.orbitmvi.orbit.ContainerHost
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.simple.intent
import org.orbitmvi.orbit.syntax.simple.postSideEffect
import org.orbitmvi.orbit.syntax.simple.reduce
import org.orbitmvi.orbit.syntax.Syntax
import org.orbitmvi.orbit.viewmodel.container

abstract class MviViewModel<STATE : MviState, SIDE_EFFECT : MviSideEffect, INTENT : MviIntent>(
Expand All @@ -20,12 +17,8 @@ abstract class MviViewModel<STATE : MviState, SIDE_EFFECT : MviSideEffect, INTEN
val stateFlow: StateFlow<STATE> get() = container.stateFlow
val sideEffectFlow: Flow<SIDE_EFFECT> get() = container.sideEffectFlow

protected suspend fun SimpleSyntax<STATE, SIDE_EFFECT>.sendSideEffect(sideEffect: SIDE_EFFECT) = postSideEffect(sideEffect)

protected abstract suspend fun SimpleSyntax<STATE, SIDE_EFFECT>.reduceState(
intent: INTENT,
state: STATE,
): STATE?
protected suspend fun Syntax<STATE, SIDE_EFFECT>.sendSideEffect(sideEffect: SIDE_EFFECT) = postSideEffect(sideEffect)
protected abstract suspend fun Syntax<STATE, SIDE_EFFECT>.reduceState(intent: INTENT, state: STATE): STATE?

fun sendIntent(intent: INTENT) =
intent {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import com.threegap.bitnagil.presentation.emotion.model.mvi.EmotionState
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.Syntax
import javax.inject.Inject

@HiltViewModel
Expand Down Expand Up @@ -47,7 +47,7 @@ class EmotionViewModel @Inject constructor(
}
}

override suspend fun SimpleSyntax<EmotionState, EmotionSideEffect>.reduceState(intent: EmotionIntent, state: EmotionState): EmotionState? {
override suspend fun Syntax<EmotionState, EmotionSideEffect>.reduceState(intent: EmotionIntent, state: EmotionState): EmotionState? {
when (intent) {
is EmotionIntent.EmotionListLoadSuccess -> {
return state.copy(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import com.threegap.bitnagil.presentation.guide.model.GuideIntent
import com.threegap.bitnagil.presentation.guide.model.GuideSideEffect
import com.threegap.bitnagil.presentation.guide.model.GuideState
import dagger.hilt.android.lifecycle.HiltViewModel
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.Syntax
import javax.inject.Inject

@HiltViewModel
Expand All @@ -16,7 +16,7 @@ class GuideViewModel @Inject constructor(
initState = GuideState(),
savedStateHandle = savedStateHandle,
) {
override suspend fun SimpleSyntax<GuideState, GuideSideEffect>.reduceState(
override suspend fun Syntax<GuideState, GuideSideEffect>.reduceState(
intent: GuideIntent,
state: GuideState,
): GuideState? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.Syntax
import java.time.LocalDate
import javax.inject.Inject

Expand Down Expand Up @@ -61,7 +61,7 @@ class HomeViewModel @Inject constructor(
fetchTodayEmotion(LocalDate.now())
}

override suspend fun SimpleSyntax<HomeState, HomeSideEffect>.reduceState(
override suspend fun Syntax<HomeState, HomeSideEffect>.reduceState(
intent: HomeIntent,
state: HomeState,
): HomeState? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import com.threegap.bitnagil.presentation.login.model.LoginSideEffect
import com.threegap.bitnagil.presentation.login.model.LoginState
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.Syntax
import javax.inject.Inject

@HiltViewModel
Expand All @@ -22,7 +22,7 @@ class LoginViewModel @Inject constructor(
initState = LoginState(),
savedStateHandle = savedStateHandle,
) {
override suspend fun SimpleSyntax<LoginState, LoginSideEffect>.reduceState(
override suspend fun Syntax<LoginState, LoginSideEffect>.reduceState(
intent: LoginIntent,
state: LoginState,
): LoginState? =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import com.threegap.bitnagil.presentation.mypage.model.MyPageSideEffect
import com.threegap.bitnagil.presentation.mypage.model.MyPageState
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.Syntax
import javax.inject.Inject

@HiltViewModel
Expand Down Expand Up @@ -41,7 +41,7 @@ class MyPageViewModel @Inject constructor(
}
}

override suspend fun SimpleSyntax<MyPageState, MyPageSideEffect>.reduceState(
override suspend fun Syntax<MyPageState, MyPageSideEffect>.reduceState(
intent: MyPageIntent,
state: MyPageState,
): MyPageState {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import kotlinx.coroutines.Job
import kotlinx.coroutines.async
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.Syntax

@HiltViewModel(assistedFactory = OnBoardingViewModel.Factory::class)
class OnBoardingViewModel @AssistedInject constructor(
Expand Down Expand Up @@ -119,7 +119,7 @@ class OnBoardingViewModel @AssistedInject constructor(
}
}

override suspend fun SimpleSyntax<OnBoardingState, OnBoardingSideEffect>.reduceState(
override suspend fun Syntax<OnBoardingState, OnBoardingSideEffect>.reduceState(
intent: OnBoardingIntent,
state: OnBoardingState,
): OnBoardingState? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import com.threegap.bitnagil.presentation.recommendroutine.model.RecommendRoutin
import com.threegap.bitnagil.presentation.recommendroutine.model.toUiModel
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.Syntax
import javax.inject.Inject

@HiltViewModel
Expand All @@ -35,7 +35,7 @@ class RecommendRoutineViewModel @Inject constructor(

private var recommendRoutines: RecommendRoutinesUiModel = RecommendRoutinesUiModel()

override suspend fun SimpleSyntax<RecommendRoutineState, RecommendRoutineSideEffect>.reduceState(
override suspend fun Syntax<RecommendRoutineState, RecommendRoutineSideEffect>.reduceState(
intent: RecommendRoutineIntent,
state: RecommendRoutineState,
): RecommendRoutineState? = when (intent) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import com.threegap.bitnagil.presentation.routinelist.model.RoutineListState
import com.threegap.bitnagil.presentation.routinelist.model.toUiModel
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.Syntax
import java.time.LocalDate
import javax.inject.Inject

Expand Down Expand Up @@ -43,7 +43,7 @@ class RoutineListViewModel @Inject constructor(
observeRoutineChanges()
}

override suspend fun SimpleSyntax<RoutineListState, RoutineListSideEffect>.reduceState(
override suspend fun Syntax<RoutineListState, RoutineListSideEffect>.reduceState(
intent: RoutineListIntent,
state: RoutineListState,
): RoutineListState? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.Syntax
import javax.inject.Inject

@HiltViewModel
Expand All @@ -25,7 +25,7 @@ class SettingViewModel @Inject constructor(
private var setServiceAlarmJob: Job? = null
private var setPushAlarmJob: Job? = null

override suspend fun SimpleSyntax<SettingState, SettingSideEffect>.reduceState(
override suspend fun Syntax<SettingState, SettingSideEffect>.reduceState(
intent: SettingIntent,
state: SettingState,
): SettingState? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withTimeoutOrNull
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.Syntax
import javax.inject.Inject

@HiltViewModel
Expand All @@ -30,7 +30,7 @@ class SplashViewModel @Inject constructor(
performForceUpdateCheck()
}

override suspend fun SimpleSyntax<SplashState, SplashSideEffect>.reduceState(
override suspend fun Syntax<SplashState, SplashSideEffect>.reduceState(
intent: SplashIntent,
state: SplashState,
): SplashState? =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import com.threegap.bitnagil.presentation.terms.model.TermsAgreementSideEffect
import com.threegap.bitnagil.presentation.terms.model.TermsAgreementState
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.Syntax
import javax.inject.Inject

@HiltViewModel
Expand All @@ -22,7 +22,7 @@ class TermsAgreementViewModel @Inject constructor(
initState = TermsAgreementState(),
savedStateHandle = savedStateHandle,
) {
override suspend fun SimpleSyntax<TermsAgreementState, TermsAgreementSideEffect>.reduceState(
override suspend fun Syntax<TermsAgreementState, TermsAgreementSideEffect>.reduceState(
intent: TermsAgreementIntent,
state: TermsAgreementState,
): TermsAgreementState? = when (intent) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import com.threegap.bitnagil.presentation.withdrawal.model.WithdrawalSideEffect
import com.threegap.bitnagil.presentation.withdrawal.model.WithdrawalState
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.Syntax
import javax.inject.Inject

@HiltViewModel
Expand All @@ -20,7 +20,7 @@ class WithdrawalViewModel @Inject constructor(
savedStateHandle = savedStateHandle,
initState = WithdrawalState(),
) {
override suspend fun SimpleSyntax<WithdrawalState, WithdrawalSideEffect>.reduceState(
override suspend fun Syntax<WithdrawalState, WithdrawalSideEffect>.reduceState(
intent: WithdrawalIntent,
state: WithdrawalState,
): WithdrawalState? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.Syntax

@HiltViewModel(assistedFactory = WriteRoutineViewModel.Factory::class)
class WriteRoutineViewModel @AssistedInject constructor(
Expand Down Expand Up @@ -133,7 +133,7 @@ class WriteRoutineViewModel @AssistedInject constructor(
}
}

override suspend fun SimpleSyntax<WriteRoutineState, WriteRoutineSideEffect>.reduceState(
override suspend fun Syntax<WriteRoutineState, WriteRoutineSideEffect>.reduceState(
intent: WriteRoutineIntent,
state: WriteRoutineState,
): WriteRoutineState? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import kotlinx.coroutines.test.runTest
import kotlinx.parcelize.Parcelize
import org.junit.Before
import org.junit.Test
import org.orbitmvi.orbit.syntax.simple.SimpleSyntax
import org.orbitmvi.orbit.syntax.Syntax
import org.orbitmvi.orbit.test.test

@ExperimentalCoroutinesApi
Expand All @@ -26,7 +26,6 @@ class MviViewModelTest {
containerHost.sendIntent(SampleIntent.Decrease(number = 2))
containerHost.sendIntent(SampleIntent.Increase(number = 3))

expectState { SampleState() }
expectState { SampleState(count = 1) }
expectState { SampleState(count = -1) }
expectState { SampleState(count = 2) }
Expand All @@ -42,7 +41,6 @@ class MviViewModelTest {
containerHost.sendIntent(SampleIntent.Decrease(number = 2))
containerHost.sendIntent(SampleIntent.Increase(number = 3))

expectState { SampleState() }
expectState { SampleState(count = 1) }
expectSideEffect(SampleSideEffect.ShowToast("Clear"))
expectState { SampleState() }
Expand All @@ -56,7 +54,7 @@ class MviViewModelTest {
initState: SampleState,
savedStateHandle: SavedStateHandle,
) : MviViewModel<SampleState, SampleSideEffect, SampleIntent>(initState, savedStateHandle) {
override suspend fun SimpleSyntax<SampleState, SampleSideEffect>.reduceState(
override suspend fun Syntax<SampleState, SampleSideEffect>.reduceState(
intent: SampleIntent,
state: SampleState,
): SampleState? {
Expand Down