|
| 1 | +package com.woocommerce.android.ui.bookings.filter.type |
| 2 | + |
| 3 | +import androidx.lifecycle.SavedStateHandle |
| 4 | +import com.woocommerce.android.viewmodel.ScopedViewModel |
| 5 | +import dagger.assisted.Assisted |
| 6 | +import dagger.assisted.AssistedFactory |
| 7 | +import dagger.assisted.AssistedInject |
| 8 | +import dagger.hilt.android.lifecycle.HiltViewModel |
| 9 | +import kotlinx.coroutines.flow.MutableStateFlow |
| 10 | +import kotlinx.coroutines.flow.StateFlow |
| 11 | +import kotlinx.coroutines.flow.update |
| 12 | +import org.wordpress.android.fluxc.network.rest.wpcom.wc.bookings.BookingsFilterOption |
| 13 | + |
| 14 | +@HiltViewModel(assistedFactory = BookingTypeFilterViewModel.Factory::class) |
| 15 | +class BookingTypeFilterViewModel @AssistedInject constructor( |
| 16 | + @Assisted private val initialType: BookingsFilterOption.BookingType, |
| 17 | + @Assisted private val onTypeFilterChanged: (BookingsFilterOption.BookingType) -> Unit, |
| 18 | + savedStateHandle: SavedStateHandle |
| 19 | +) : ScopedViewModel(savedStateHandle) { |
| 20 | + |
| 21 | + private val _uiState = MutableStateFlow( |
| 22 | + BookingTypeFilterUiState(selectedType = initialType, onTypeSelected = ::onTypeSelected) |
| 23 | + ) |
| 24 | + val uiState: StateFlow<BookingTypeFilterUiState> = _uiState |
| 25 | + |
| 26 | + private fun onTypeSelected(type: BookingsFilterOption.BookingType) { |
| 27 | + if (_uiState.value.selectedType != type) { |
| 28 | + _uiState.update { current -> current.copy(selectedType = type) } |
| 29 | + } |
| 30 | + onTypeFilterChanged(type) |
| 31 | + } |
| 32 | + |
| 33 | + @AssistedFactory |
| 34 | + interface Factory { |
| 35 | + fun create( |
| 36 | + initialType: BookingsFilterOption.BookingType, |
| 37 | + onTypeFilterChanged: (BookingsFilterOption.BookingType) -> Unit |
| 38 | + ): BookingTypeFilterViewModel |
| 39 | + } |
| 40 | +} |
0 commit comments