11package com.example.util.simpletimetracker.feature_dialogs.cardSize.viewModel
22
33import androidx.lifecycle.LiveData
4- import androidx.lifecycle.MutableLiveData
5- import androidx.lifecycle.ViewModel
64import androidx.lifecycle.viewModelScope
5+ import com.example.util.simpletimetracker.core.base.BaseViewModel
6+ import com.example.util.simpletimetracker.core.extension.lazySuspend
77import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
88import com.example.util.simpletimetracker.feature_base_adapter.loader.LoaderViewData
99import com.example.util.simpletimetracker.core.extension.set
1010import com.example.util.simpletimetracker.core.mapper.RecordTypeViewDataMapper
11+ import com.example.util.simpletimetracker.core.utils.SuspendedValue
1112import com.example.util.simpletimetracker.feature_base_adapter.buttonsRow.view.ButtonsRowViewData
1213import com.example.util.simpletimetracker.domain.prefs.interactor.PrefsInteractor
1314import com.example.util.simpletimetracker.domain.recordType.interactor.RecordTypeInteractor
@@ -18,7 +19,6 @@ import com.example.util.simpletimetracker.feature_dialogs.cardSize.viewData.Card
1819import dagger.hilt.android.lifecycle.HiltViewModel
1920import kotlinx.coroutines.MainScope
2021import kotlinx.coroutines.launch
21- import kotlinx.coroutines.runBlocking
2222import javax.inject.Inject
2323
2424@HiltViewModel
@@ -27,80 +27,71 @@ class CardSizeViewModel @Inject constructor(
2727 private val prefsInteractor : PrefsInteractor ,
2828 private val cardSizeViewDataMapper : CardSizeViewDataMapper ,
2929 private val recordTypeViewDataMapper : RecordTypeViewDataMapper ,
30- ) : ViewModel () {
30+ ) : BaseViewModel () {
3131
32- val recordTypes: LiveData <List <ViewHolderType >> by lazy {
33- return @lazy MutableLiveData <List <ViewHolderType >>().let { initial ->
34- viewModelScope.launch {
35- initial.value = listOf (LoaderViewData ())
36- initial.value = loadRecordTypes()
37- }
38- initial
39- }
32+ val recordTypes: LiveData <List <ViewHolderType >> by lazySuspend {
33+ viewModelScope.launch { updateRecordTypes() }
34+ listOf (LoaderViewData ())
4035 }
41- val buttons: LiveData <List <ViewHolderType >> by lazy {
42- MutableLiveData <List <ViewHolderType >>().let { initial ->
43- initial.value = loadButtonsViewData()
44- initial
45- }
36+ val buttons: LiveData <List <ViewHolderType >> by lazySuspend {
37+ loadButtonsViewData()
4638 }
47- val defaultButton: LiveData <CardSizeDefaultButtonViewData > by lazy {
48- MutableLiveData <CardSizeDefaultButtonViewData >().let { initial ->
49- viewModelScope.launch {
50- initial.value = loadDefaultButtonViewData()
51- }
52- initial
53- }
39+ val defaultButton: LiveData <CardSizeDefaultButtonViewData > by lazySuspend {
40+ loadDefaultButtonViewData()
5441 }
5542
56- // TODO remove runBlocking
57- private var numberOfCards: Int = runBlocking { prefsInteractor.getNumberOfCards() }
43+ private val numberOfCards = SuspendedValue (prefsInteractor::getNumberOfCards)
5844 private var types: List <RecordType > = emptyList()
5945
6046 fun onDismiss () {
6147 MainScope ().launch {
62- prefsInteractor.setNumberOfCards(numberOfCards)
48+ prefsInteractor.setNumberOfCards(numberOfCards.get() )
6349 }
6450 }
6551
6652 fun onButtonClick (viewData : ButtonsRowViewData ) {
6753 if (viewData !is CardSizeButtonsViewData ) return
68- numberOfCards = viewData.numberOfCards
69- updateRecordTypes()
70- updateButtonsViewData()
71- updateDefaultButton()
54+ viewModelScope.launch {
55+ numberOfCards.set(viewData.numberOfCards)
56+ updateRecordTypes()
57+ updateButtonsViewData()
58+ updateDefaultButton()
59+ }
7260 }
7361
74- fun onDefaultButtonClick () {
75- numberOfCards = 0
62+ fun onDefaultButtonClick () = viewModelScope.launch {
63+ numberOfCards.set( 0 )
7664 updateRecordTypes()
7765 updateButtonsViewData()
7866 updateDefaultButton()
7967 }
8068
81- private fun updateButtonsViewData () {
69+ private suspend fun updateButtonsViewData () {
8270 val data = loadButtonsViewData()
8371 buttons.set(data)
8472 }
8573
86- private fun updateDefaultButton () = viewModelScope.launch {
74+ private suspend fun updateDefaultButton () {
8775 val data = loadDefaultButtonViewData()
8876 defaultButton.set(data)
8977 }
9078
91- private fun updateRecordTypes () = viewModelScope.launch {
79+ private suspend fun updateRecordTypes () {
9280 val data = loadRecordTypes()
9381 recordTypes.set(data)
9482 }
9583
96- private fun loadButtonsViewData (): List <ViewHolderType > {
97- return cardSizeViewDataMapper.toToButtonsViewData(numberOfCards)
84+ private suspend fun loadButtonsViewData (): List <ViewHolderType > {
85+ return cardSizeViewDataMapper.toToButtonsViewData(numberOfCards.get() )
9886 }
9987
10088 private suspend fun loadDefaultButtonViewData (): CardSizeDefaultButtonViewData {
10189 val isDarkTheme = prefsInteractor.getDarkMode()
10290
103- return cardSizeViewDataMapper.toDefaultButtonViewData(numberOfCards, isDarkTheme)
91+ return cardSizeViewDataMapper.toDefaultButtonViewData(
92+ numberOfCards = numberOfCards.get(),
93+ isDarkTheme = isDarkTheme,
94+ )
10495 }
10596
10697 private suspend fun loadRecordTypes (): List <ViewHolderType > {
@@ -112,7 +103,11 @@ class CardSizeViewModel @Inject constructor(
112103
113104 return types
114105 .map { type ->
115- cardSizeViewDataMapper.toToRecordTypeViewData(type, numberOfCards, isDarkTheme)
106+ cardSizeViewDataMapper.toToRecordTypeViewData(
107+ recordType = type,
108+ numberOfCards = numberOfCards.get(),
109+ isDarkTheme = isDarkTheme,
110+ )
116111 }
117112 .takeUnless { it.isEmpty() }
118113 ? : recordTypeViewDataMapper.mapToEmpty()
0 commit comments