Files
TaskTTL/composeApp/src/commonMain/kotlin/com/taskttl/data/viewmodel/OnboardingViewModel.kt

56 lines
1.8 KiB
Kotlin
Raw Normal View History

2025-10-08 18:08:15 +08:00
package com.taskttl.data.viewmodel
import androidx.lifecycle.viewModelScope
2025-10-15 15:03:16 +08:00
import com.taskttl.core.viewmodel.BaseViewModel
2025-10-08 18:08:15 +08:00
import com.taskttl.data.repository.CategoryRepository
import com.taskttl.data.repository.OnboardingRepository
2025-10-15 15:03:16 +08:00
import com.taskttl.data.state.OnboardingEffect
import com.taskttl.data.state.OnboardingIntent
import com.taskttl.data.state.OnboardingState
2025-10-08 18:08:15 +08:00
import kotlinx.coroutines.launch
/**
* 入职视图模型
* @author admin
* @date 2025/10/05
* @constructor 创建[OnboardingViewModel]
* @param [onboardingRepository] 引导存储库
* @param [categoryRepository] 类别存储库
*/
class OnboardingViewModel(
private val onboardingRepository: OnboardingRepository,
2025-10-15 15:03:16 +08:00
private val categoryRepository: CategoryRepository,
) : BaseViewModel<OnboardingState, OnboardingIntent, OnboardingEffect>(initialState = OnboardingState()) {
2025-10-08 18:08:15 +08:00
2025-10-15 15:03:16 +08:00
override fun handleIntent(intent: OnboardingIntent) {
when (intent) {
is OnboardingIntent.NextPage -> nextPage()
is OnboardingIntent.MarkOnboardingCompleted -> markOnboardingCompleted()
}
}
2025-10-08 18:08:15 +08:00
/**
2025-10-15 15:03:16 +08:00
* 下一页
2025-10-08 18:08:15 +08:00
*/
2025-10-15 15:03:16 +08:00
private fun nextPage() {
sendEvent(OnboardingEffect.NextPage)
2025-10-08 18:08:15 +08:00
}
/**
* 标记引导完成
*/
2025-10-15 15:03:16 +08:00
private fun markOnboardingCompleted() {
2025-10-08 18:08:15 +08:00
viewModelScope.launch {
2025-10-15 15:03:16 +08:00
try {
if (state.value.isProcessing) return@launch
updateState { copy(isLoading = false, isProcessing = true) }
categoryRepository.initializeDefaultCategories()
onboardingRepository.markLaunched()
sendEvent(OnboardingEffect.NavMain)
} finally {
updateState { copy(isLoading = false, isProcessing = false) }
}
2025-10-08 18:08:15 +08:00
}
}
2025-10-15 15:03:16 +08:00
}