@@ -33,40 +33,16 @@ public class AnalyticsHubTimeRangeSelection {
3333 currentDate: Date = Date ( ) ,
3434 timezone: TimeZone = TimeZone . current,
3535 calendar: Calendar = Locale . current. calendar) {
36- var selectionData : AnalyticsHubTimeRangeData
37-
38- switch selectionType {
39- case . today:
40- selectionData = AnalyticsHubTodayRangeData ( referenceDate: currentDate, timezone: timezone, calendar: calendar)
41- case . yesterday:
42- selectionData = AnalyticsHubYesterdayRangeData ( referenceDate: currentDate, timezone: timezone, calendar: calendar)
43- case . lastWeek:
44- selectionData = AnalyticsHubLastWeekRangeData ( referenceDate: currentDate, timezone: timezone, calendar: calendar)
45- case . lastMonth:
46- selectionData = AnalyticsHubLastMonthRangeData ( referenceDate: currentDate, timezone: timezone, calendar: calendar)
47- case . lastYear:
48- selectionData = AnalyticsHubLastYearRangeData ( referenceDate: currentDate, timezone: timezone, calendar: calendar)
49- case . weekToDate:
50- selectionData = AnalyticsHubWeekToDateRangeData ( referenceDate: currentDate, timezone: timezone, calendar: calendar)
51- case . monthToDate:
52- selectionData = AnalyticsHubMonthToDateRangeData ( referenceDate: currentDate, timezone: timezone, calendar: calendar)
53- case . yearToDate:
54- selectionData = AnalyticsHubYearToDateRangeData ( referenceDate: currentDate, timezone: timezone, calendar: calendar)
55- }
56-
36+ let selectionData = selectionType. toRangeData ( referenceDate: currentDate, timezone: timezone, calendar: calendar)
5737 let currentTimeRange = selectionData. currentTimeRange
5838 let previousTimeRange = selectionData. previousTimeRange
39+ let useShortFormat = selectionType == . today || selectionType == . yesterday
40+
5941 self . currentTimeRange = currentTimeRange
6042 self . previousTimeRange = previousTimeRange
61-
62- let simplifiedDescription = selectionType == . today || selectionType == . yesterday
63- self . formattedCurrentRangeText = currentTimeRange? . formatToString ( simplified: simplifiedDescription,
64- timezone: timezone,
65- calendar: calendar)
66- self . formattedPreviousRangeText = previousTimeRange? . formatToString ( simplified: simplifiedDescription,
67- timezone: timezone,
68- calendar: calendar)
6943 self . rangeSelectionDescription = selectionType. description
44+ self . formattedCurrentRangeText = currentTimeRange? . formatToString ( simplified: useShortFormat, timezone: timezone, calendar: calendar)
45+ self . formattedPreviousRangeText = previousTimeRange? . formatToString ( simplified: useShortFormat, timezone: timezone, calendar: calendar)
7046 }
7147
7248 /// Unwrap the generated selected `AnalyticsHubTimeRange` based on the `selectedTimeRange`
@@ -96,9 +72,11 @@ extension AnalyticsHubTimeRangeSelection {
9672 case yesterday
9773 case lastWeek
9874 case lastMonth
75+ case lastQuarter
9976 case lastYear
10077 case weekToDate
10178 case monthToDate
79+ case quarterToDate
10280 case yearToDate
10381
10482 var description : String {
@@ -111,12 +89,16 @@ extension AnalyticsHubTimeRangeSelection {
11189 return Localization . lastWeek
11290 case . lastMonth:
11391 return Localization . lastMonth
92+ case . lastQuarter:
93+ return Localization . lastQuarter
11494 case . lastYear:
11595 return Localization . lastYear
11696 case . weekToDate:
11797 return Localization . weekToDate
11898 case . monthToDate:
11999 return Localization . monthToDate
100+ case . quarterToDate:
101+ return Localization . quarterToDate
120102 case . yearToDate:
121103 return Localization . yearToDate
122104 }
@@ -136,6 +118,35 @@ extension AnalyticsHubTimeRangeSelection {
136118 }
137119 }
138120}
121+
122+ // MARK: - SelectionType helper functions
123+ private extension AnalyticsHubTimeRangeSelection . SelectionType {
124+ func toRangeData( referenceDate: Date , timezone: TimeZone , calendar: Calendar ) -> AnalyticsHubTimeRangeData {
125+ switch self {
126+ case . today:
127+ return AnalyticsHubTodayRangeData ( referenceDate: referenceDate, timezone: timezone, calendar: calendar)
128+ case . yesterday:
129+ return AnalyticsHubYesterdayRangeData ( referenceDate: referenceDate, timezone: timezone, calendar: calendar)
130+ case . lastWeek:
131+ return AnalyticsHubLastWeekRangeData ( referenceDate: referenceDate, timezone: timezone, calendar: calendar)
132+ case . lastMonth:
133+ return AnalyticsHubLastMonthRangeData ( referenceDate: referenceDate, timezone: timezone, calendar: calendar)
134+ case . lastQuarter:
135+ return AnalyticsHubLastQuarterRangeData ( referenceDate: referenceDate, timezone: timezone, calendar: calendar)
136+ case . lastYear:
137+ return AnalyticsHubLastYearRangeData ( referenceDate: referenceDate, timezone: timezone, calendar: calendar)
138+ case . weekToDate:
139+ return AnalyticsHubWeekToDateRangeData ( referenceDate: referenceDate, timezone: timezone, calendar: calendar)
140+ case . monthToDate:
141+ return AnalyticsHubMonthToDateRangeData ( referenceDate: referenceDate, timezone: timezone, calendar: calendar)
142+ case . quarterToDate:
143+ return AnalyticsHubQuarterToDateRangeData ( referenceDate: referenceDate, timezone: timezone, calendar: calendar)
144+ case . yearToDate:
145+ return AnalyticsHubYearToDateRangeData ( referenceDate: referenceDate, timezone: timezone, calendar: calendar)
146+ }
147+ }
148+ }
149+
139150// MARK: - Constants
140151extension AnalyticsHubTimeRangeSelection {
141152 enum TimeRangeGeneratorError : Error {
@@ -148,9 +159,11 @@ extension AnalyticsHubTimeRangeSelection {
148159 static let yesterday = NSLocalizedString ( " Yesterday " , comment: " Title of the Analytics Hub Yesterday selection range " )
149160 static let lastWeek = NSLocalizedString ( " Last Week " , comment: " Title of the Analytics Hub Last Week selection range " )
150161 static let lastMonth = NSLocalizedString ( " Last Month " , comment: " Title of the Analytics Hub Last Month selection range " )
162+ static let lastQuarter = NSLocalizedString ( " Last Quarter " , comment: " Title of the Analytics Hub Last Quarter selection range " )
151163 static let lastYear = NSLocalizedString ( " Last Year " , comment: " Title of the Analytics Hub Last Year selection range " )
152164 static let weekToDate = NSLocalizedString ( " Week to Date " , comment: " Title of the Analytics Hub Week to Date selection range " )
153165 static let monthToDate = NSLocalizedString ( " Month to Date " , comment: " Title of the Analytics Hub Month to Date selection range " )
166+ static let quarterToDate = NSLocalizedString ( " Quarter to Date " , comment: " Title of the Analytics Hub Quarter to Date selection range " )
154167 static let yearToDate = NSLocalizedString ( " Year to Date " , comment: " Title of the Analytics Hub Year to Date selection range " )
155168 static let selectionTitle = NSLocalizedString ( " Date Range " , comment: " Title of the range selection list " )
156169 static let noCurrentPeriodAvailable = NSLocalizedString ( " No current period available " ,
0 commit comments