Skip to content

Commit 8597692

Browse files
committed
feat(datepicker): limited range of date/time for the datepicker
1 parent 1a88db1 commit 8597692

File tree

2 files changed

+35
-10
lines changed

2 files changed

+35
-10
lines changed

Notification Agent Core/Controllers/HelpBuilder.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public final class HelpBuilder {
103103
"- Text with the format " + "\"/list ITEM\\nITEM\\nITEM /selected INT /placeholder TEXT /title TEXT\" ".green() + "for " + "[ dropdown ]".red() + " view type;\n " +
104104
"- Text with HTML format for " + "[ html | htmlwhitebox ]".red() + " view type;\n " +
105105
"- Text with the format " + "\"/list ITEM\\nITEM\\nITEM /preselection ITEM_INDEX ITEM_INDEX ITEM_INDEX /required /complete /title TEXT /radio\" ".green() + "for " + "[ checklist ]".red() + " view type. To read more about the usage of /complete and /required look at the project wiki;\n " +
106-
"- Text with the format " + "\"/title TEXT /preselection DATE WITH FORMAT yyyy-MM-dd hh:mm:ss /style TEXT /components TEXT\" ".green() + "for " + "[ datepicker ]".red() + " view type. To read more about the usage of /style and /components look at the project wiki;\n " +
106+
"- Text with the format " + "\"/title TEXT /preselection DATE WITH FORMAT yyyy-MM-dd hh:mm:ss /start_date DATE WITH FORMAT yyyy-MM-dd hh:mm:ss /end_date DATE WITH FORMAT yyyy-MM-dd hh:mm:ss /style TEXT /components TEXT\" ".green() + "for " + "[ datepicker ]".red() + " view type. To read more about the usage of /style and /components look at the project wiki;\n " +
107107
"- Text with the format " + "\"/images URL\\nURL\\nURL /autoplay /delay INT\" ".green() + "for " + "[ slideshow ]".red() + " view type;\n " +
108108
"Example 1: -accessory_view_payload \"This is the time left: %@\"\n " +
109109
"Example 2: -accessory_view_payload \"/percent 0 /top_message This is the top message /bottom_message This is the bottom message\";\n " +

Shared/Views/AccessoryViews/SwiftUI/DatePickerView.swift

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ struct DatePickerView: View {
2121
case preselection
2222
case components
2323
case style
24+
case startDate = "start_date"
25+
case endDate = "end_date"
2426
}
2527

2628
// MARK: - Private Variables
@@ -30,6 +32,8 @@ struct DatePickerView: View {
3032
private var style: any DatePickerStyle
3133
private var components: DatePickerComponents
3234
private var initialDate: Date?
35+
private var startDate: Date?
36+
private var endDate: Date = Date(timeIntervalSinceNow: 3156600000) // ~100 years from now
3337
private var dateFormatter: DateFormatter {
3438
let dateFormatter = DateFormatter()
3539
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
@@ -88,6 +92,14 @@ struct DatePickerView: View {
8892
}
8993
let somevalues = try decoder.decode(key: DatePickerCodingKeys.preselection, ofType: String.self, from: payload)
9094
initialDate = dateFormatter.date(from: output.wrappedValue.isEmpty ? somevalues : output.wrappedValue) ?? Date()
95+
let selectedDateString = try decoder.decode(key: DatePickerCodingKeys.preselection, ofType: String.self, from: payload)
96+
initialDate = dateFormatter.date(from: output.wrappedValue.isEmpty ? selectedDateString : output.wrappedValue) ?? Date()
97+
let startDateString = try decoder.decode(key: DatePickerCodingKeys.startDate, ofType: String.self, from: payload)
98+
startDate = dateFormatter.date(from: output.wrappedValue.isEmpty ? startDateString : output.wrappedValue) ?? Date()
99+
let endDateString = try decoder.decode(key: DatePickerCodingKeys.endDate, ofType: String.self, from: payload)
100+
if let date = dateFormatter.date(from: output.wrappedValue.isEmpty ? endDateString : output.wrappedValue) {
101+
endDate = date
102+
}
91103
}
92104

93105
// MARK: - Views
@@ -100,16 +112,29 @@ struct DatePickerView: View {
100112
.accessibilityIdentifier("datepicker_accessory_view_title")
101113
}
102114
HStack(spacing: 0) {
103-
DatePicker("", selection: $selectionValue.onUpdate(evaluateButtonState), displayedComponents: components)
104-
.customDatePickerStyle(style)
105-
.labelsHidden()
106-
.onAppear {
107-
if let initialDate = initialDate {
108-
self.selectionValue = initialDate
115+
if let rangeStart = startDate {
116+
DatePicker("", selection: $selectionValue.onUpdate(evaluateButtonState), in: rangeStart...endDate, displayedComponents: components)
117+
.customDatePickerStyle(style)
118+
.labelsHidden()
119+
.onAppear {
120+
if let initialDate = initialDate {
121+
self.selectionValue = initialDate
122+
}
123+
evaluateButtonState()
124+
}
125+
.accessibilityIdentifier("datepicker_accessory_view_picker")
126+
} else {
127+
DatePicker("", selection: $selectionValue.onUpdate(evaluateButtonState), displayedComponents: components)
128+
.customDatePickerStyle(style)
129+
.labelsHidden()
130+
.onAppear {
131+
if let initialDate = initialDate {
132+
self.selectionValue = initialDate
133+
}
134+
evaluateButtonState()
109135
}
110-
evaluateButtonState()
111-
}
112-
.accessibilityIdentifier("datepicker_accessory_view_picker")
136+
.accessibilityIdentifier("datepicker_accessory_view_picker")
137+
}
113138
Spacer()
114139
}
115140
.padding(0)

0 commit comments

Comments
 (0)