Skip to content

Commit b43c1fd

Browse files
Use the BookingMapper in the BookingListViewModel
1 parent 13614a8 commit b43c1fd

File tree

4 files changed

+20
-39
lines changed

4 files changed

+20
-39
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.woocommerce.android.ui.bookings.compose.BookingAppointmentDetailsMode
44
import com.woocommerce.android.ui.bookings.compose.BookingAttendanceStatus
55
import com.woocommerce.android.ui.bookings.compose.BookingStatus
66
import com.woocommerce.android.ui.bookings.compose.BookingSummaryModel
7+
import com.woocommerce.android.ui.bookings.list.BookingListItem
78
import com.woocommerce.android.util.CurrencyFormatter
89
import org.wordpress.android.fluxc.persistence.entity.BookingEntity
910
import java.time.Duration
@@ -36,6 +37,13 @@ class BookingMapper @Inject constructor(
3637
)
3738
}
3839

40+
fun Booking.toUiModel(): BookingListItem {
41+
return BookingListItem(
42+
id = id.value,
43+
summary = toBookingSummaryModel()
44+
)
45+
}
46+
3947
fun Booking.toAppointmentDetailsModel(): BookingAppointmentDetailsModel {
4048
val durationMinutes = Duration.between(start, end).toMinutes()
4149
return BookingAppointmentDetailsModel(

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/bookings/list/BookingListViewModel.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import androidx.lifecycle.SavedStateHandle
44
import androidx.lifecycle.asLiveData
55
import androidx.lifecycle.viewModelScope
66
import com.woocommerce.android.R
7+
import com.woocommerce.android.ui.bookings.BookingMapper
78
import com.woocommerce.android.viewmodel.MultiLiveEvent
89
import com.woocommerce.android.viewmodel.ScopedViewModel
910
import com.woocommerce.android.viewmodel.getStateFlow
@@ -21,7 +22,8 @@ import javax.inject.Inject
2122
class BookingListViewModel @Inject constructor(
2223
savedStateHandle: SavedStateHandle,
2324
private val bookingListHandler: BookingListHandler,
24-
private val filtersBuilder: BookingListFiltersBuilder
25+
private val filtersBuilder: BookingListFiltersBuilder,
26+
private val bookingMapper: BookingMapper,
2527
) : ScopedViewModel(savedStateHandle) {
2628
private val loadingState = MutableStateFlow(BookingListLoadingState.Idle)
2729
private val selectedTab = savedStateHandle.getStateFlow(viewModelScope, BookingListTab.Today)
@@ -30,7 +32,9 @@ class BookingListViewModel @Inject constructor(
3032
private var bookingsLoadMoreJob: Job? = null
3133

3234
private val contentState = combine(
33-
bookingListHandler.bookingsFlow.map { bookings -> bookings.map { it.toUiModel() } },
35+
bookingListHandler.bookingsFlow.map { bookings ->
36+
with(bookingMapper) { bookings.map { it.toUiModel() } }
37+
},
3438
loadingState
3539
) { bookings, loadingState ->
3640
BookingListContentState(
Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
package com.woocommerce.android.ui.bookings.list
22

3-
import com.woocommerce.android.ui.bookings.Booking
4-
import com.woocommerce.android.ui.bookings.compose.BookingAttendanceStatus
5-
import com.woocommerce.android.ui.bookings.compose.BookingStatus
63
import com.woocommerce.android.ui.bookings.compose.BookingSummaryModel
7-
import org.wordpress.android.fluxc.persistence.entity.BookingEntity
8-
import java.time.ZoneId
9-
import java.time.format.DateTimeFormatter
10-
import java.time.format.FormatStyle
114

125
data class BookingListViewState(
136
val contentState: BookingListContentState,
@@ -41,32 +34,3 @@ enum class BookingListLoadingState {
4134
enum class BookingListTab {
4235
Today, Upcoming, All
4336
}
44-
45-
fun Booking.toUiModel(): BookingListItem {
46-
val dateFormatter = DateTimeFormatter.ofLocalizedDateTime(
47-
FormatStyle.MEDIUM,
48-
FormatStyle.SHORT
49-
).withZone(ZoneId.systemDefault())
50-
51-
// TODO replace the mocked details with real data when available from the API
52-
return BookingListItem(
53-
id = id.value,
54-
summary = BookingSummaryModel(
55-
date = dateFormatter.format(start),
56-
name = "Women’s Haircut",
57-
customerName = "Margarita Nikolaevna",
58-
attendanceStatus = BookingAttendanceStatus.BOOKED,
59-
status = status.toUiModel()
60-
)
61-
)
62-
}
63-
64-
private fun BookingEntity.Status.toUiModel(): BookingStatus = when (this) {
65-
BookingEntity.Status.Paid -> BookingStatus.Paid
66-
BookingEntity.Status.PendingConfirmation -> BookingStatus.PendingConfirmation
67-
BookingEntity.Status.Cancelled -> BookingStatus.Cancelled
68-
BookingEntity.Status.Complete -> BookingStatus.Complete
69-
BookingEntity.Status.Confirmed -> BookingStatus.Confirmed
70-
BookingEntity.Status.Unpaid -> BookingStatus.Unpaid
71-
is BookingEntity.Status.Unknown -> BookingStatus.Unknown(this.key)
72-
}

WooCommerce/src/test/kotlin/com/woocommerce/android/ui/bookings/list/BookingListViewModelTest.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package com.woocommerce.android.ui.bookings.list
33
import androidx.lifecycle.SavedStateHandle
44
import com.woocommerce.android.R
55
import com.woocommerce.android.ui.bookings.Booking
6+
import com.woocommerce.android.ui.bookings.BookingMapper
7+
import com.woocommerce.android.util.CurrencyFormatter
68
import com.woocommerce.android.util.captureValues
79
import com.woocommerce.android.util.getOrAwaitValue
810
import com.woocommerce.android.viewmodel.BaseUnitTest
@@ -42,6 +44,8 @@ class BookingListViewModelTest : BaseUnitTest() {
4244
}
4345
private val mockedNow = Instant.parse("2025-01-01T12:00:00Z")
4446
private val filtersBuilder = BookingListFiltersBuilder(Clock.fixed(mockedNow, ZoneId.of("UTC")))
47+
private val currencyFormatter = mock<CurrencyFormatter>()
48+
private val bookingMapper = BookingMapper(currencyFormatter)
4549

4650
private lateinit var viewModel: BookingListViewModel
4751

@@ -54,7 +58,8 @@ class BookingListViewModelTest : BaseUnitTest() {
5458
viewModel = BookingListViewModel(
5559
savedStateHandle = SavedStateHandle(),
5660
bookingListHandler = bookingListHandler,
57-
filtersBuilder = filtersBuilder
61+
filtersBuilder = filtersBuilder,
62+
bookingMapper = bookingMapper,
5863
)
5964
}
6065

0 commit comments

Comments
 (0)