Skip to content

Commit 59ba3a9

Browse files
committed
Update booking type filter selection
1 parent 60c9f47 commit 59ba3a9

File tree

4 files changed

+28
-9
lines changed

4 files changed

+28
-9
lines changed

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/bookings/filter/BookingFilterListScreen.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ import androidx.navigation.compose.NavHost
2828
import androidx.navigation.compose.composable
2929
import androidx.navigation.compose.rememberNavController
3030
import com.woocommerce.android.R
31-
import com.woocommerce.android.ui.bookings.filter.type.BookingTypeFilterPage
32-
import com.woocommerce.android.ui.bookings.filter.type.DUMMY_BOOKING_TYPE_FILTER_UI_STATE
31+
import com.woocommerce.android.ui.bookings.filter.type.BookingTypeFilterRoute
3332
import com.woocommerce.android.ui.compose.component.Toolbar
3433
import com.woocommerce.android.ui.compose.component.WCColoredButton
3534
import com.woocommerce.android.ui.compose.preview.LightDarkThemePreviews
@@ -124,7 +123,9 @@ private fun FiltersNavHost(
124123
TODO()
125124
}
126125
composable(BookingFilterPage.BookingType.route) {
127-
BookingTypeFilterPage(DUMMY_BOOKING_TYPE_FILTER_UI_STATE)
126+
BookingTypeFilterRoute(initialType = state.currentBookingType) { type ->
127+
state.onUpdateFilterOption(type)
128+
}
128129
}
129130
composable(BookingFilterPage.Customer.route) {
130131
TODO()

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/bookings/filter/BookingFilterListUiState.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ data class BookingFilterListUiState(
2525
val onClose: () -> Unit = {},
2626
val onShowBookings: () -> Unit = {},
2727
val openPage: (BookingFilterPage) -> Unit = {},
28+
val onUpdateFilterOption: (BookingsFilterOption) -> Unit = {}
2829
) {
2930

3031
val items: List<BookingFilterListItem> = availableBookingFilters().map { page ->
@@ -35,6 +36,11 @@ data class BookingFilterListUiState(
3536
)
3637
}
3738

39+
val currentBookingType: BookingsFilterOption.BookingType
40+
get() = newBookingFilters.getOrDefault<BookingsFilterOption.BookingType>(
41+
initialBookingFilters?.bookingType
42+
) ?: BookingsFilterOption.BookingType.Any
43+
3844
@DrawableRes
3945
val navigationIcon: Int = when (currentPage) {
4046
BookingFilterPage.List -> R.drawable.ic_gridicons_cross_24dp

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/bookings/filter/BookingFilterListViewModel.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import kotlinx.coroutines.flow.firstOrNull
1111
import kotlinx.coroutines.flow.update
1212
import kotlinx.coroutines.launch
1313
import org.wordpress.android.fluxc.network.rest.wpcom.wc.bookings.BookingFilters
14+
import org.wordpress.android.fluxc.network.rest.wpcom.wc.bookings.BookingsFilterOption
1415
import javax.inject.Inject
1516

1617
@HiltViewModel
@@ -24,6 +25,7 @@ class BookingFilterListViewModel @Inject constructor(
2425
onClose = ::onClose,
2526
onShowBookings = ::onShowBookings,
2627
openPage = ::onOpenPage,
28+
onUpdateFilterOption = ::onUpdateFilterOption,
2729
)
2830
)
2931
val uiState = _uiState.asLiveData()
@@ -38,6 +40,22 @@ class BookingFilterListViewModel @Inject constructor(
3840
}
3941
}
4042

43+
private fun onUpdateFilterOption(option: BookingsFilterOption) {
44+
_uiState.update { current ->
45+
val filtered = when (option) {
46+
is BookingsFilterOption.BookingType -> current.newBookingFilters
47+
.filterNot { it is BookingsFilterOption.BookingType }
48+
else -> current.newBookingFilters
49+
.filterNot { it::class == option::class }
50+
}
51+
current.copy(
52+
newBookingFilters = filtered
53+
.plus(option)
54+
.toSet()
55+
)
56+
}
57+
}
58+
4159
private fun getBookingFilter() {
4260
launch {
4361
// We don't observe changes here, just get the current value once

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/bookings/filter/type/BookingTypeFilterUiState.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,3 @@ val BookingType.filterValue: String?
3838
BookingType.Event -> "event"
3939
BookingType.Any -> null
4040
}
41-
42-
// TODO After refactoring navigation for the filter screens, replace this with a ViewModel-backed UI state.
43-
val DUMMY_BOOKING_TYPE_FILTER_UI_STATE = BookingTypeFilterUiState(
44-
selectedType = BookingFilterType.Any,
45-
onTypeSelected = {}
46-
)

0 commit comments

Comments
 (0)