mirror of
https://github.com/Myzel394/NumberHub.git
synced 2025-06-19 08:45:27 +02:00
Refactor DateDifferenceViewModel
This commit is contained in:
parent
79269dcea5
commit
9815484706
@ -20,15 +20,12 @@ package com.sadellie.unitto.feature.datedifference.difference
|
|||||||
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.sadellie.unitto.feature.datedifference.ZonedDateTimeDifference
|
|
||||||
import com.sadellie.unitto.feature.datedifference.minus
|
import com.sadellie.unitto.feature.datedifference.minus
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.SharingStarted
|
import kotlinx.coroutines.flow.SharingStarted
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.flow.combine
|
|
||||||
import kotlinx.coroutines.flow.merge
|
|
||||||
import kotlinx.coroutines.flow.stateIn
|
import kotlinx.coroutines.flow.stateIn
|
||||||
import kotlinx.coroutines.flow.update
|
import kotlinx.coroutines.flow.update
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@ -37,27 +34,19 @@ import javax.inject.Inject
|
|||||||
|
|
||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
internal class DateDifferenceViewModel @Inject constructor() : ViewModel() {
|
internal class DateDifferenceViewModel @Inject constructor() : ViewModel() {
|
||||||
private val _start = MutableStateFlow(ZonedDateTime.now())
|
private val _uiState = MutableStateFlow(DifferenceUIState())
|
||||||
private val _end = MutableStateFlow(ZonedDateTime.now())
|
|
||||||
private val _result = MutableStateFlow<ZonedDateTimeDifference>(ZonedDateTimeDifference.Zero)
|
|
||||||
|
|
||||||
val uiState = combine(_start, _end, _result) { start, end, result ->
|
val uiState = _uiState
|
||||||
return@combine DifferenceUIState(start, end, result)
|
.onEach { updateResult() }
|
||||||
}
|
|
||||||
.stateIn(
|
.stateIn(
|
||||||
viewModelScope, SharingStarted.WhileSubscribed(5000L), DifferenceUIState()
|
viewModelScope, SharingStarted.WhileSubscribed(5000L), DifferenceUIState()
|
||||||
)
|
)
|
||||||
|
|
||||||
fun setStartDate(dateTime: ZonedDateTime) = _start.update { dateTime }
|
fun setStartDate(newValue: ZonedDateTime) = _uiState.update { it.copy(start = newValue) }
|
||||||
|
|
||||||
fun setEndDate(dateTime: ZonedDateTime) = _end.update { dateTime }
|
fun setEndDate(newValue: ZonedDateTime) = _uiState.update { it.copy(end = newValue) }
|
||||||
|
|
||||||
init {
|
private fun updateResult() = viewModelScope.launch(Dispatchers.Default) {
|
||||||
viewModelScope.launch(Dispatchers.Default) {
|
_uiState.update { ui -> ui.copy(result = ui.start - ui.end) }
|
||||||
merge(_start, _end).collectLatest {
|
|
||||||
val difference = _start.value - _end.value
|
|
||||||
_result.update { difference }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user