56 lines
1.8 KiB
Kotlin
56 lines
1.8 KiB
Kotlin
package com.taskttl.data.viewmodel
|
|
|
|
import androidx.lifecycle.viewModelScope
|
|
import com.taskttl.core.viewmodel.BaseViewModel
|
|
import com.taskttl.data.repository.CategoryRepository
|
|
import com.taskttl.data.repository.OnboardingRepository
|
|
import com.taskttl.data.state.OnboardingEffect
|
|
import com.taskttl.data.state.OnboardingIntent
|
|
import com.taskttl.data.state.OnboardingState
|
|
import kotlinx.coroutines.launch
|
|
|
|
/**
|
|
* 入职视图模型
|
|
* @author admin
|
|
* @date 2025/10/05
|
|
* @constructor 创建[OnboardingViewModel]
|
|
* @param [onboardingRepository] 引导存储库
|
|
* @param [categoryRepository] 类别存储库
|
|
*/
|
|
class OnboardingViewModel(
|
|
private val onboardingRepository: OnboardingRepository,
|
|
private val categoryRepository: CategoryRepository,
|
|
) : BaseViewModel<OnboardingState, OnboardingIntent, OnboardingEffect>(initialState = OnboardingState()) {
|
|
|
|
override fun handleIntent(intent: OnboardingIntent) {
|
|
when (intent) {
|
|
is OnboardingIntent.NextPage -> nextPage()
|
|
is OnboardingIntent.MarkOnboardingCompleted -> markOnboardingCompleted()
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 下一页
|
|
*/
|
|
private fun nextPage() {
|
|
sendEvent(OnboardingEffect.NextPage)
|
|
}
|
|
|
|
/**
|
|
* 标记引导完成
|
|
*/
|
|
private fun markOnboardingCompleted() {
|
|
viewModelScope.launch {
|
|
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) }
|
|
}
|
|
}
|
|
}
|
|
}
|