Skip to content

Commit 3ef0f6a

Browse files
committed
Store comparison period persistently
1 parent c18e3ba commit 3ef0f6a

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

Modules/Sources/JetpackStats/Extensions/Calendar+ComparisonPeriod.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Foundation
22

3-
enum DateRangeComparisonPeriod: Equatable, Sendable, CaseIterable, Identifiable {
3+
enum DateRangeComparisonPeriod: String, Equatable, Sendable, CaseIterable, Identifiable {
44
case precedingPeriod
55
case samePeriodLastYear
66
case off

Modules/Sources/JetpackStats/StatsViewModel.swift

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ final class StatsViewModel: ObservableObject, CardConfigurationDelegate {
1111
updateViewModelsDateRange()
1212
if !isNavigationStackLocked {
1313
saveSelectedDateRangePreset()
14+
saveSelectedComparisonPeriod()
1415
}
1516
if !dateRange.isAdjacent(to: oldValue) {
1617
clearNavigationStack()
@@ -30,6 +31,7 @@ final class StatsViewModel: ObservableObject, CardConfigurationDelegate {
3031
private let userDefaults: UserDefaults
3132
private static let configurationKey = "JetpackStatsTrafficConfiguration"
3233
private static let dateRangePresetKey = "JetpackStatsSelectedDateRangePreset"
34+
private static let comparisonPeriodKey = "JetpackStatsComparisonPeriod"
3335
private static let versionKey = "JetpackStatsVersionKey"
3436

3537
init(context: StatsContext, userDefaults: UserDefaults = .standard) {
@@ -39,7 +41,11 @@ final class StatsViewModel: ObservableObject, CardConfigurationDelegate {
3941
Self.performMigrations(userDefaults: userDefaults, context: context)
4042

4143
let preset = Self.loadDateRangePreset(from: userDefaults)
42-
self.dateRange = context.calendar.makeDateRange(for: preset ?? .last7Days)
44+
let comparison = Self.loadComparisonPeriod(from: userDefaults)
45+
self.dateRange = context.calendar.makeDateRange(
46+
for: preset ?? .last7Days,
47+
comparison: comparison ?? .precedingPeriod
48+
)
4349

4450
let configuraiton = Self.getConfiguration(from: userDefaults)
4551
self.trafficCardConfiguration = configuraiton ?? Self.makeDefaultConfiguration(context: context)
@@ -314,6 +320,18 @@ final class StatsViewModel: ObservableObject, CardConfigurationDelegate {
314320
return preset
315321
}
316322

323+
private func saveSelectedComparisonPeriod() {
324+
userDefaults.set(dateRange.comparison.rawValue, forKey: Self.comparisonPeriodKey)
325+
}
326+
327+
private static func loadComparisonPeriod(from userDefaults: UserDefaults) -> DateRangeComparisonPeriod? {
328+
guard let rawValue = userDefaults.string(forKey: Self.comparisonPeriodKey),
329+
let comparisonPeriod = DateRangeComparisonPeriod(rawValue: rawValue) else {
330+
return nil
331+
}
332+
return comparisonPeriod
333+
}
334+
317335
// MARK: - Reset Settings
318336

319337
/// Resets all persistently stored settings including card configuration and date range preset
@@ -324,6 +342,9 @@ final class StatsViewModel: ObservableObject, CardConfigurationDelegate {
324342
// Reset date range preset
325343
userDefaults.removeObject(forKey: Self.dateRangePresetKey)
326344

345+
// Reset comparison period
346+
userDefaults.removeObject(forKey: Self.comparisonPeriodKey)
347+
327348
// Reset date range to default
328349
dateRange = context.calendar.makeDateRange(for: .last7Days)
329350
}

Modules/Sources/JetpackStats/Views/ChartValuesSummaryView.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,15 @@ struct ChartValuesSummaryView: View {
3939
.font(.system(.headline, design: .rounded, weight: .semibold))
4040
.foregroundColor(.primary)
4141
.contentTransition(.numericText())
42+
43+
if trend.previousValue != 0 {
44+
Text(trend.formattedPreviousValue)
45+
.font(.system(.footnote, design: .rounded))
46+
.foregroundColor(.secondary.opacity(0.75)).tracking(-0.2)
47+
.contentTransition(.numericText())
48+
}
4249
}
50+
4351
if trend.previousValue != 0 {
4452
Text(trend.formattedTrend)
4553
.contentTransition(.numericText())

0 commit comments

Comments
 (0)