From ebff335976be3c74c3e95b0f66284b0e1a63dccb Mon Sep 17 00:00:00 2001 From: Davide Ferrari Date: Sun, 11 Jan 2026 10:05:47 +0100 Subject: [PATCH] feat(charges): apply AC/DC filter to summary card and charts (#33) The AC/DC filter now affects all components in the Charges view: - Summary card shows totals for filtered charge type only - Histogram charts display data for filtered charge type only - Charge list continues to show filtered results This provides a consistent view when analyzing AC-only or DC-only charging sessions. Co-authored-by: Claude Opus 4.5 --- .../ui/screens/charges/ChargesViewModel.kt | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/matedroid/ui/screens/charges/ChargesViewModel.kt b/app/src/main/java/com/matedroid/ui/screens/charges/ChargesViewModel.kt index d371e21..b3b5be1 100644 --- a/app/src/main/java/com/matedroid/ui/screens/charges/ChargesViewModel.kt +++ b/app/src/main/java/com/matedroid/ui/screens/charges/ChargesViewModel.kt @@ -191,18 +191,13 @@ class ChargesViewModel @Inject constructor( when (val result = repository.getCharges(id, startDateStr, endDateStr)) { is ApiResult.Success -> { allCharges = result.data - // Calculate summary and chart from ALL charges (including minimal ones) - val summary = calculateSummary(allCharges) val granularity = determineGranularity(startDate, endDate) - val chartData = calculateChartData(allCharges, granularity) _uiState.update { it.copy( dcChargeIds = dcChargeIds, processedChargeIds = processedChargeIds, - chartData = chartData, chartGranularity = granularity, - summary = summary, error = null ) } @@ -226,6 +221,7 @@ class ChargesViewModel @Inject constructor( val state = _uiState.value val chargeTypeFilter = state.chargeTypeFilter val dcChargeIds = state.dcChargeIds + val granularity = state.chartGranularity // First apply short charges filter var filteredCharges = if (showShortDrivesCharges) { @@ -236,18 +232,31 @@ class ChargesViewModel @Inject constructor( } } - // Then apply charge type filter (AC/DC) - filteredCharges = when (chargeTypeFilter) { + // Apply charge type filter (AC/DC) for list display + val displayCharges = when (chargeTypeFilter) { ChargeTypeFilter.ALL -> filteredCharges ChargeTypeFilter.DC -> filteredCharges.filter { it.chargeId in dcChargeIds } ChargeTypeFilter.AC -> filteredCharges.filter { it.chargeId !in dcChargeIds } } + // Apply charge type filter to all charges for summary/charts (include short charges) + val chargesForStats = when (chargeTypeFilter) { + ChargeTypeFilter.ALL -> allCharges + ChargeTypeFilter.DC -> allCharges.filter { it.chargeId in dcChargeIds } + ChargeTypeFilter.AC -> allCharges.filter { it.chargeId !in dcChargeIds } + } + + // Calculate summary and chart data from filtered charges + val summary = calculateSummary(chargesForStats) + val chartData = calculateChartData(chargesForStats, granularity) + _uiState.update { it.copy( isLoading = false, isRefreshing = false, - charges = filteredCharges + charges = displayCharges, + summary = summary, + chartData = chartData ) } }