Skip to content

Commit 7976b4c

Browse files
committed
Add BookingTypeFilterViewModel
Adds a new `BookingTypeFilterViewModel` to manage the state for the booking type filter. This ViewModel handles the initial selected type and updates the UI state when a new type is selected.
1 parent d77fed5 commit 7976b4c

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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

Comments
 (0)