Skip to content

Commit

Permalink
Fixed time picker setting too quickly
Browse files Browse the repository at this point in the history
  • Loading branch information
Mcrich23 committed Aug 3, 2023
1 parent a39f7eb commit 7ea9f6f
Showing 1 changed file with 38 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,44 +10,49 @@ import Mcrich23_Toolkit

struct NotificationPreferencesTimePicker: View {
@Binding var preference: NotificationPreferences
@State var startTime = Date()
@State var endTime = Date()
@ObservedObject var preferencesModel = NotificationPreferencesModel.shared
@ObservedObject var contentViewModel = ContentViewModel.shared

init(preference: Binding<NotificationPreferences>) {
self._preference = preference
self._startTime = State(initialValue: formattedDate(preferencesModel.preferencesArray.first(where: { $0.id == preference.wrappedValue.id })?.startTime))
self._endTime = State(initialValue: formattedDate(preferencesModel.preferencesArray.first(where: { $0.id == preference.wrappedValue.id })?.endTime))
}

func formattedDate(_ date: String?) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.defaultDate = Calendar.current.startOfDay(for: Date())
dateFormatter.dateFormat = "hh:mm a"
return dateFormatter.date(from: date ?? "8:00 AM")!
}

func formattedString(_ date: Date) -> String {
let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.defaultDate = Calendar.current.startOfDay(for: Date())
dateFormatter.dateFormat = "hh:mm a"
return dateFormatter.string(from: date)
}

var body: some View {
Toggle("All Day", isOn: Binding(get: {
preference.isAllDay
}, set: { isAllDay in
self.preference.isAllDay = isAllDay
}))
Toggle("All Day", isOn: $preference.isAllDay)
if !preference.isAllDay {
VStack {
DatePicker("Start Time: ", selection: Binding(get: {
let startTime = preferencesModel.preferencesArray.first(where: { $0.id == preference.id })?.startTime
let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.defaultDate = Calendar.current.startOfDay(for: Date())
dateFormatter.dateFormat = "hh:mm a"
return dateFormatter.date(from: startTime ?? "8:00 AM")!
}, set: { newValue in
let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.defaultDate = Calendar.current.startOfDay(for: Date())
dateFormatter.dateFormat = "hh:mm a"
self.preference.startTime = dateFormatter.string(from: newValue)
}), displayedComponents: [.hourAndMinute])
DatePicker("End Time: ", selection: Binding(get: {
let endTime = preferencesModel.preferencesArray.first(where: { $0.id == preference.id })?.endTime
let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.defaultDate = Calendar.current.startOfDay(for: Date())
dateFormatter.dateFormat = "hh:mm a"
return dateFormatter.date(from: endTime ?? "8:00 AM")!
}, set: { newValue in
let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.defaultDate = Calendar.current.startOfDay(for: Date())
dateFormatter.dateFormat = "hh:mm a"
self.preference.endTime = dateFormatter.string(from: newValue)
}), displayedComponents: [.hourAndMinute])
DatePicker("Start Time: ", selection: $startTime, displayedComponents: [.hourAndMinute])
DatePicker("End Time: ", selection: $endTime, displayedComponents: [.hourAndMinute])
}
.onChange(of: startTime) { newValue in
DispatchQueue.main.asyncAfter(wallDeadline: .now() + .seconds(2)) {
self.preference.startTime = formattedString(newValue)
}
}
.onChange(of: endTime) { newValue in
DispatchQueue.main.asyncAfter(wallDeadline: .now() + .seconds(2)) {
self.preference.endTime = formattedString(newValue)
}
}
}
}
Expand Down

0 comments on commit 7ea9f6f

Please sign in to comment.