@@ -23,24 +23,20 @@ import com.woocommerce.android.ui.analytics.RefreshIndicator.NotShowIndicator
2323import com.woocommerce.android.ui.analytics.RefreshIndicator.ShowIndicator
2424import com.woocommerce.android.ui.analytics.daterangeselector.AnalyticTimePeriod
2525import com.woocommerce.android.ui.analytics.daterangeselector.AnalyticsDateRange
26- import com.woocommerce.android.ui.analytics.daterangeselector.AnalyticsDateRange.MultipleDateRange
27- import com.woocommerce.android.ui.analytics.daterangeselector.AnalyticsDateRange.SimpleDateRange
2826import com.woocommerce.android.ui.analytics.daterangeselector.AnalyticsDateRangeCalculator
27+ import com.woocommerce.android.ui.analytics.daterangeselector.AnalyticsDateRangeFormatter
2928import com.woocommerce.android.ui.analytics.daterangeselector.AnalyticsDateRangeSelectorViewState
30- import com.woocommerce.android.ui.analytics.daterangeselector.formatDatesToFriendlyPeriod
3129import com.woocommerce.android.ui.analytics.informationcard.AnalyticsInformationSectionViewState
3230import com.woocommerce.android.ui.analytics.informationcard.AnalyticsInformationViewState.DataViewState
3331import com.woocommerce.android.ui.analytics.informationcard.AnalyticsInformationViewState.LoadingViewState
3432import com.woocommerce.android.ui.analytics.informationcard.AnalyticsInformationViewState.NoDataState
3533import com.woocommerce.android.ui.analytics.listcard.AnalyticsListCardItemViewState
3634import com.woocommerce.android.ui.mystore.MyStoreStatsUsageTracksEventEmitter
3735import com.woocommerce.android.util.CurrencyFormatter
38- import com.woocommerce.android.util.DateUtils
3936import com.woocommerce.android.util.FeatureFlag
4037import com.woocommerce.android.viewmodel.ResourceProvider
4138import com.woocommerce.android.viewmodel.ScopedViewModel
4239import com.woocommerce.android.viewmodel.navArgs
43- import com.zendesk.util.DateUtils.isSameDay
4440import dagger.hilt.android.lifecycle.HiltViewModel
4541import kotlinx.coroutines.flow.MutableStateFlow
4642import kotlinx.coroutines.flow.StateFlow
@@ -57,13 +53,13 @@ import com.woocommerce.android.ui.analytics.listcard.AnalyticsListViewState.NoDa
5753@HiltViewModel
5854class AnalyticsViewModel @Inject constructor(
5955 private val resourceProvider : ResourceProvider ,
60- private val dateUtils : DateUtils ,
6156 private val analyticsDateRange : AnalyticsDateRangeCalculator ,
6257 private val currencyFormatter : CurrencyFormatter ,
6358 private val analyticsRepository : AnalyticsRepository ,
6459 private val selectedSite : SelectedSite ,
6560 private val transactionLauncher : AnalyticsHubTransactionLauncher ,
6661 private val usageTracksEventEmitter : MyStoreStatsUsageTracksEventEmitter ,
62+ private val analyticsDateRangeFormatter : AnalyticsDateRangeFormatter ,
6763 savedState : SavedStateHandle
6864) : ScopedViewModel(savedState) {
6965
@@ -85,14 +81,9 @@ class AnalyticsViewModel @Inject constructor(
8581
8682 fun onCustomDateRangeClicked () {
8783 val savedRange = getSavedDateRange()
88- val fromMillis = when (savedRange) {
89- is SimpleDateRange -> savedRange.from.time
90- is MultipleDateRange -> savedRange.to.from.time
91- }
92- val toMillis = when (savedRange) {
93- is SimpleDateRange -> savedRange.to.time
94- is MultipleDateRange -> savedRange.to.to.time
95- }
84+ val currentPeriod = savedRange.getSelectedPeriod()
85+ val fromMillis = currentPeriod.from.time
86+ val toMillis = currentPeriod.to.time
9687 triggerEvent(AnalyticsViewEvent .OpenDatePicker (fromMillis, toMillis))
9788 }
9889
@@ -284,63 +275,16 @@ class AnalyticsViewModel @Inject constructor(
284275 private fun updateDateSelector () {
285276 val timePeriod = getSavedTimePeriod()
286277 val dateRange = getSavedDateRange()
278+ val timePeriodDescription = getTimePeriodDescription(timePeriod)
287279 mutableState.value = state.value.copy(
288280 analyticsDateRangeSelectorState = state.value.analyticsDateRangeSelectorState.copy(
289- fromDatePeriod = calculateFromDatePeriod (dateRange),
290- toDatePeriod = calculateToDatePeriod(timePeriod, dateRange ),
281+ fromDatePeriod = analyticsDateRangeFormatter.fromDescription (dateRange),
282+ toDatePeriod = analyticsDateRangeFormatter.toDescription(dateRange, timePeriodDescription ),
291283 selectedPeriod = getTimePeriodDescription(timePeriod)
292284 )
293285 )
294286 }
295287
296- private fun calculateToDatePeriod (analyticTimeRange : AnalyticTimePeriod , dateRange : AnalyticsDateRange ) =
297- when (dateRange) {
298- is SimpleDateRange -> resourceProvider.getString(
299- R .string.analytics_date_range_to_date,
300- getTimePeriodDescription(analyticTimeRange),
301- dateUtils.getShortMonthDayAndYearString(
302- dateUtils.getYearMonthDayStringFromDate(dateRange.to)
303- ).orEmpty()
304- )
305- is MultipleDateRange ->
306- if (isSameDay(dateRange.to.from, dateRange.to.to)) {
307- resourceProvider.getString(
308- R .string.analytics_date_range_to_date,
309- getTimePeriodDescription(analyticTimeRange),
310- dateUtils.getShortMonthDayAndYearString(
311- dateUtils.getYearMonthDayStringFromDate(dateRange.to.from)
312- ).orEmpty()
313- )
314- } else {
315- resourceProvider.getString(
316- R .string.analytics_date_range_to_date,
317- getTimePeriodDescription(analyticTimeRange),
318- dateRange.to.formatDatesToFriendlyPeriod()
319- )
320- }
321- }
322-
323- private fun calculateFromDatePeriod (dateRange : AnalyticsDateRange ) = when (dateRange) {
324- is SimpleDateRange -> resourceProvider.getString(
325- R .string.analytics_date_range_from_date,
326- dateUtils.getShortMonthDayAndYearString(dateUtils.getYearMonthDayStringFromDate(dateRange.from)).orEmpty()
327- )
328- is MultipleDateRange ->
329- if (isSameDay(dateRange.from.from, dateRange.from.to)) {
330- resourceProvider.getString(
331- R .string.analytics_date_range_from_date,
332- dateUtils.getShortMonthDayAndYearString(
333- dateUtils.getYearMonthDayStringFromDate(dateRange.from.from)
334- ).orEmpty()
335- )
336- } else {
337- resourceProvider.getString(
338- R .string.analytics_date_range_from_date,
339- dateRange.from.formatDatesToFriendlyPeriod()
340- )
341- }
342- }
343-
344288 private fun getAvailableDateRanges () =
345289 resourceProvider.getStringArray(R .array.analytics_date_range_selectors).asList()
346290
@@ -367,12 +311,18 @@ class AnalyticsViewModel @Inject constructor(
367311 ?.let { currencyFormatter.formatCurrency(value, it) }
368312 ? : value
369313
370- private fun buildAnalyticsDateRangeSelectorViewState () = AnalyticsDateRangeSelectorViewState (
371- fromDatePeriod = calculateFromDatePeriod(getSavedDateRange()),
372- toDatePeriod = calculateToDatePeriod(getSavedTimePeriod(), getSavedDateRange()),
373- availableRangeDates = getAvailableDateRanges(),
374- selectedPeriod = getTimePeriodDescription(getSavedTimePeriod())
375- )
314+ private fun buildAnalyticsDateRangeSelectorViewState (): AnalyticsDateRangeSelectorViewState {
315+ val timePeriod = getSavedTimePeriod()
316+ val dateRange = getSavedDateRange()
317+ val timePeriodDescription = getTimePeriodDescription(timePeriod)
318+
319+ return AnalyticsDateRangeSelectorViewState (
320+ fromDatePeriod = analyticsDateRangeFormatter.fromDescription(dateRange),
321+ toDatePeriod = analyticsDateRangeFormatter.toDescription(dateRange, timePeriodDescription),
322+ availableRangeDates = getAvailableDateRanges(),
323+ selectedPeriod = getTimePeriodDescription(getSavedTimePeriod())
324+ )
325+ }
376326
377327 private fun buildRevenueDataViewState (data : RevenueData ) =
378328 DataViewState (
@@ -426,14 +376,14 @@ class AnalyticsViewModel @Inject constructor(
426376 listRightHeader = resourceProvider.getString(R .string.analytics_products_list_header_subtitle),
427377 items = products
428378 .sortedByDescending { it.quantity }
429- .mapIndexed { index, it ->
379+ .mapIndexed { index, product ->
430380 AnalyticsListCardItemViewState (
431- it .image,
432- it .name,
433- it .quantity.toString(),
381+ product .image,
382+ product .name,
383+ product .quantity.toString(),
434384 resourceProvider.getString(
435385 R .string.analytics_products_list_item_description,
436- formatValue(it .netSales.toString(), it .currencyCode)
386+ formatValue(product .netSales.toString(), product .currencyCode)
437387 ),
438388 index != products.size - 1
439389 )
0 commit comments