diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryField.swift index 9f8111e6..1c0046a0 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryField.swift @@ -22,18 +22,16 @@ import UIKit return calendar }() - public var dateFormatter: DateFormatter = { - let formatter = DateFormatter() - formatter.dateStyle = .medium - formatter.timeZone = NSTimeZone.system - formatter.locale = .current - formatter.formatterBehavior = .default - return formatter - }() + public var dateFormat: String? { + set { + guard let newValue = newValue else { return } + dateDropdownModel?.dateFormat = newValue + } + get { return dateDropdownModel?.dateFormat } + } - /// Update the property value to alter the format of how the date is presented. - public var dateFormat: String = "MMM d, y" { - didSet { dateFormatter.dateFormat = dateFormat } + public var dateDropdownModel: DateDropdownEntryFieldModel? { + return model as? DateDropdownEntryFieldModel } //-------------------------------------------------- @@ -96,10 +94,12 @@ import UIKit guard let date = date else { return } + dateDropdownModel?.date = date + if calendar.isDate(date, inSameDayAs: Date()) { text = MVMCoreUIUtility.hardcodedString(withKey: "textfield_today_string") } else { - text = dateFormatter.string(from: date) + text = dateDropdownModel?.dateFormatter.string(from: date) } } @@ -123,19 +123,18 @@ import UIKit guard let model = model as? DateDropdownEntryFieldModel else { return } - dateFormat = model.dateFormat - - if let initialDate = model.initialDate, let date = dateFormatter.date(from: initialDate) { - datePicker?.date = date + if model.date == nil, let initialDate = model.initialDate { + + datePicker?.date = initialDate setTextWith(date: datePicker?.date) } if let minDate = model.minDate { - datePicker?.minimumDate = dateFormatter.date(from: minDate) + datePicker?.minimumDate = minDate } if let maxDate = model.maxDate { - datePicker?.maximumDate = dateFormatter.date(from: maxDate) + datePicker?.maximumDate = maxDate } } diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift index 15dda191..70c357db 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift @@ -15,16 +15,31 @@ return "dateDropdownEntryField" } - public var dateFormat: String = "MMM d, y" - public var initialDate: String? - public var minDate: String? - public var maxDate: String? + public var dateFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .medium + formatter.timeZone = NSTimeZone.system + formatter.locale = .current + formatter.formatterBehavior = .default + return formatter + }() + + /// Update the property value to alter the format of how the date is presented. + public var dateFormat: String = "MMM d, y" { + didSet { dateFormatter.dateFormat = dateFormat } + } + + public var date: Date? + public var initialDate: Date? + public var minDate: Date? + public var maxDate: Date? //-------------------------------------------------- // MARK: - Keys //-------------------------------------------------- private enum CodingKeys: String, CodingKey { + case date case dateFormat case initialDate case minDate @@ -41,18 +56,19 @@ if let dateFormat = try typeContainer.decodeIfPresent(String.self, forKey: .dateFormat) { self.dateFormat = dateFormat + dateFormatter.dateFormat = dateFormat } if let initialDate = try typeContainer.decodeIfPresent(String.self, forKey: .initialDate) { - self.initialDate = initialDate + self.initialDate = dateFormatter.date(from: initialDate) } if let minDate = try typeContainer.decodeIfPresent(String.self, forKey: .minDate) { - self.minDate = minDate + self.minDate = dateFormatter.date(from: minDate) } if let maxDate = try typeContainer.decodeIfPresent(String.self, forKey: .maxDate) { - self.maxDate = maxDate + self.maxDate = dateFormatter.date(from: maxDate) } } @@ -60,8 +76,18 @@ try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(dateFormat, forKey: .dateFormat) - try container.encode(initialDate, forKey: .initialDate) - try container.encode(minDate, forKey: .minDate) - try container.encode(maxDate, forKey: .maxDate) + try container.encodeIfPresent(date, forKey: .date) + + if let initialDate = initialDate { + try container.encode(dateFormatter.string(from: initialDate), forKey: .initialDate) + } + + if let minDate = minDate { + try container.encode(dateFormatter.string(from: minDate), forKey: .minDate) + } + + if let maxDate = maxDate { + try container.encode(dateFormatter.string(from: maxDate), forKey: .maxDate) + } } }