Advertisement
rvinter

Untitled

Oct 31st, 2022
1,222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.62 KB | None | 0 0
  1. package ru.pioneer.my.ui.screens.primaryFlow.tabCabinet.account
  2.  
  3. import kotlinx.coroutines.flow.MutableStateFlow
  4. import org.koin.core.component.inject
  5. import ru.pioneer.my.domain.ext.launchUI
  6. import ru.pioneer.my.domain.ext.withIO
  7. import ru.pioneer.my.domain.interfaces.*
  8. import ru.pioneer.my.domain.models.SalesInfo
  9. import ru.pioneer.my.domain.models.bids.UiBids
  10. import ru.pioneer.my.ui.common.mvvm.BaseViewModel
  11.  
  12. class PersonalAccountViewModel : BaseViewModel() {
  13.  
  14.     private val authDataStorageInteractor: IAuthDataStorageInteractor by inject()
  15.     private val salesListInteractor: ISalesInteractor by inject()
  16.     private val bidsInteractor: IBidsInteractor by inject()
  17.     private val notificationsInteractor: INotificationsInteractor by inject()
  18.     private val profileDataInteractor: IProfileDataInteractor by inject()
  19.  
  20.     private var isAuthorized: Boolean = false
  21.     private var hasAccounts: Boolean = false
  22.  
  23.     private val _hasNotifications = MutableStateFlow(value = false)
  24.     private val _dealsInfo = MutableStateFlow<SalesInfo?>(value = null)
  25.     private val _lastBid = MutableStateFlow<UiBids.UiBidWithAccount?>(value = null)
  26.     private val _others = MutableStateFlow<List<OtherRes>>(value = listOf())
  27.  
  28.     init {
  29.         initialDataLoading()
  30.     }
  31.  
  32.     private fun initialDataLoading() = launchUI(handler) {
  33.         isAuthorized = withIO { authDataStorageInteractor.isAuthorized() }
  34.         hasAccounts = withIO { profileDataInteractor.getUserHasAccounts() }
  35.         loadOthers()
  36.  
  37.         if (isAuthorized) {
  38.             getAndUpdateNotificationsState()
  39.         }
  40.     }
  41.  
  42.     private fun loadOthers() {
  43.         val excessItems = getExcessItems()
  44.         val notInitialized = OtherTypeEnum.values().mapNotNull {
  45.             it.takeIf { itemEnum -> !excessItems.contains(itemEnum) }.let { item ->
  46.                 item?.let {
  47.                     OtherRes(title = item.titleRes, icon = item.iconRes)
  48.                 }
  49.             }
  50.         }
  51.         _others.value = notInitialized
  52.     }
  53.  
  54.     private fun getExcessItems(): List<OtherTypeEnum> {
  55.         return when {
  56.             isAuthorized && hasAccounts -> {
  57.                 listOf(OtherTypeEnum.SETTINGS)
  58.             }
  59.             isAuthorized && !hasAccounts -> {
  60.                 listOf(OtherTypeEnum.SETTINGS)
  61.             }
  62.             else -> {
  63.                 listOf(OtherTypeEnum.PROFILE, OtherTypeEnum.WRITE_TO_US)
  64.             }
  65.         }
  66.     }
  67.  
  68.     private fun getAndUpdateNotificationsState() {
  69.         launchUI(handler) {
  70.             _hasNotifications.value = withIO { notificationsInteractor.hasNewNotifications() }
  71.         }
  72.     }
  73. }
  74.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement