From 282fcaea12670b652f4efae0fdc19c46de4cce7c Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Tue, 28 Jul 2020 14:14:20 -0400 Subject: [PATCH 1/5] latest additions for date --- .../TextFields/DateDropdownEntryField.swift | 25 +++++++++++++++++++ .../DateDropdownEntryFieldModel.swift | 21 ++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryField.swift index 9860cd5b..9f8111e6 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryField.swift @@ -114,11 +114,36 @@ import UIKit setTextWith(date: datePicker?.date) } + //-------------------------------------------------- + // MARK: - MoleculeViewProtocol + //-------------------------------------------------- + public override func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) { super.set(with: model, delegateObject, additionalData) 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 + setTextWith(date: datePicker?.date) + } + + if let minDate = model.minDate { + datePicker?.minimumDate = dateFormatter.date(from: minDate) + } + + if let maxDate = model.maxDate { + datePicker?.maximumDate = dateFormatter.date(from: maxDate) + } + } + + public override func reset() { + super.reset() + + datePicker?.minimumDate = nil + datePicker?.maximumDate = nil + text = nil } } diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift index 96ec3488..15dda191 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift @@ -16,6 +16,9 @@ } public var dateFormat: String = "MMM d, y" + public var initialDate: String? + public var minDate: String? + public var maxDate: String? //-------------------------------------------------- // MARK: - Keys @@ -23,6 +26,9 @@ private enum CodingKeys: String, CodingKey { case dateFormat + case initialDate + case minDate + case maxDate } //-------------------------------------------------- @@ -36,11 +42,26 @@ if let dateFormat = try typeContainer.decodeIfPresent(String.self, forKey: .dateFormat) { self.dateFormat = dateFormat } + + if let initialDate = try typeContainer.decodeIfPresent(String.self, forKey: .initialDate) { + self.initialDate = initialDate + } + + if let minDate = try typeContainer.decodeIfPresent(String.self, forKey: .minDate) { + self.minDate = minDate + } + + if let maxDate = try typeContainer.decodeIfPresent(String.self, forKey: .maxDate) { + self.maxDate = maxDate + } } public override func encode(to encoder: Encoder) throws { 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) } } From ca9afeef5da860dbc68b6143b58ffc75e53a1010 Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Tue, 28 Jul 2020 17:02:21 -0400 Subject: [PATCH 2/5] reflecting changes to use Date type --- .../TextFields/DateDropdownEntryField.swift | 35 +++++++------- .../DateDropdownEntryFieldModel.swift | 46 +++++++++++++++---- 2 files changed, 53 insertions(+), 28 deletions(-) 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) + } } } From ba0ede1b9b7c88876d9df4c7456b0db7e9ded698 Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Wed, 29 Jul 2020 09:50:18 -0400 Subject: [PATCH 3/5] just date --- .../TextFields/DateDropdownEntryFieldModel.swift | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift index 70c357db..e0ae4a02 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift @@ -41,7 +41,6 @@ private enum CodingKeys: String, CodingKey { case date case dateFormat - case initialDate case minDate case maxDate } @@ -59,8 +58,9 @@ dateFormatter.dateFormat = dateFormat } - if let initialDate = try typeContainer.decodeIfPresent(String.self, forKey: .initialDate) { - self.initialDate = dateFormatter.date(from: initialDate) + if let date = try typeContainer.decodeIfPresent(String.self, forKey: .date) { + baseValue = date + self.date = dateFormatter.date(from: date) } if let minDate = try typeContainer.decodeIfPresent(String.self, forKey: .minDate) { @@ -76,10 +76,9 @@ try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(dateFormat, forKey: .dateFormat) - try container.encodeIfPresent(date, forKey: .date) - if let initialDate = initialDate { - try container.encode(dateFormatter.string(from: initialDate), forKey: .initialDate) + if let date = date { + try container.encode(dateFormatter.string(from: date), forKey: .date) } if let minDate = minDate { From 1e0a2942ee0455954293452bd7992066704a9c36 Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Wed, 29 Jul 2020 09:54:38 -0400 Subject: [PATCH 4/5] reuse date --- .../FormFields/TextFields/DateDropdownEntryField.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryField.swift index 1c0046a0..6ff950f6 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryField.swift @@ -123,9 +123,8 @@ import UIKit guard let model = model as? DateDropdownEntryFieldModel else { return } - if model.date == nil, let initialDate = model.initialDate { - - datePicker?.date = initialDate + if let date = model.date { + datePicker?.date = date setTextWith(date: datePicker?.date) } @@ -143,6 +142,7 @@ import UIKit datePicker?.minimumDate = nil datePicker?.maximumDate = nil + datePicker?.date = Date() text = nil } } From 5ce77b997f633bb4e31378b5243cadc2f147bf44 Mon Sep 17 00:00:00 2001 From: Kevin G Christiano Date: Wed, 29 Jul 2020 09:55:14 -0400 Subject: [PATCH 5/5] remove val --- .../FormFields/TextFields/DateDropdownEntryFieldModel.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift index e0ae4a02..0ac448a2 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/DateDropdownEntryFieldModel.swift @@ -30,7 +30,6 @@ } public var date: Date? - public var initialDate: Date? public var minDate: Date? public var maxDate: Date?