From 3732f98d7c99b270abf4af4f0cb4b562a9955410 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 1 Aug 2024 10:53:14 -0500 Subject: [PATCH 1/9] added override property to deal with oldvalue/newValue for the selected Item. Signed-off-by: Matt Bruce --- .../Item Dropdown/ItemDropdownEntryField.swift | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryField.swift index 0986a092..819a7b19 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryField.swift @@ -29,7 +29,20 @@ open class ItemDropdownEntryField: VDS.DropdownSelect, VDSMoleculeViewProtocol, } private var isEditting: Bool = false - + + //override for to deal with getting the + //old selectedItem to pass down to the observeDropdownChange + open override var selectId: Int? { + didSet { + guard let observeDropdownChange, let selectedItem else { return } + var oldSelectedItem: DropdownOptionModel? + if let oldValue { + oldSelectedItem = options[oldValue] + } + observeDropdownChange(oldSelectedItem?.text, selectedItem.text) + } + } + //-------------------------------------------------- // MARK: - Properties //-------------------------------------------------- @@ -184,7 +197,7 @@ open class ItemDropdownEntryField: VDS.DropdownSelect, VDSMoleculeViewProtocol, } } - + public func updateView(_ size: CGFloat) { } /// Sets the textField with the first value of the available picker data. @@ -196,7 +209,6 @@ open class ItemDropdownEntryField: VDS.DropdownSelect, VDSMoleculeViewProtocol, let pickerIndex = optionsPicker.selectedRow(inComponent: 0) viewModel.selectedIndex = pickerIndex selectId = pickerIndex - observeDropdownChange?(selectedItem?.text, pickerData[pickerIndex]) } } From ab5a5a1e557a6d9df217195958fa2e659bb2bd4f Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 1 Aug 2024 10:55:48 -0500 Subject: [PATCH 2/9] added placeholder in delegates so you can understand what is passed back Signed-off-by: Matt Bruce --- .../Item Dropdown/ItemDropdownEntryField.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryField.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryField.swift index 819a7b19..dee7916b 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryField.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryField.swift @@ -49,10 +49,10 @@ open class ItemDropdownEntryField: VDS.DropdownSelect, VDSMoleculeViewProtocol, public var isValid: Bool = true /// Closure passed here will run as picker changes items. - public var observeDropdownChange: ((String?, String) -> ())? + public var observeDropdownChange: ((_ oldValue: String?, _ newValue: String) -> ())? /// Closure passed here will run upon dismissing the selection picker. - public var observeDropdownSelection: ((String) -> ())? + public var observeDropdownSelection: ((_ newValue: String) -> ())? /// When selecting for first responder, allow initial selected value to appear in empty text field. public var setInitialValueInTextField = true From c2cb8781d69514ad04cb4f1518b203514b7526a2 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 1 Aug 2024 15:18:33 -0500 Subject: [PATCH 3/9] ensured all vds components have the estimated height implementation Signed-off-by: Matt Bruce --- MVMCoreUI/Atomic/Protocols/VDSMoleculeViewProtocol.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/MVMCoreUI/Atomic/Protocols/VDSMoleculeViewProtocol.swift b/MVMCoreUI/Atomic/Protocols/VDSMoleculeViewProtocol.swift index 4bebf0c7..2bb95c43 100644 --- a/MVMCoreUI/Atomic/Protocols/VDSMoleculeViewProtocol.swift +++ b/MVMCoreUI/Atomic/Protocols/VDSMoleculeViewProtocol.swift @@ -38,5 +38,9 @@ extension VDSMoleculeViewProtocol { public func update(viewModel: ViewModel){ set(with: viewModel, delegateObject, additionalData) } + + public func updateView(_ size: CGFloat) { } + + public static func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { 44 } } From 5e116e3c9153c83a96acdebfd518a03db51b6706 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 1 Aug 2024 17:14:04 -0500 Subject: [PATCH 4/9] reverted code in case the isSelected is set directly Signed-off-by: Matt Bruce --- .../Atomic/Atoms/Selectors/Checkbox.swift | 36 ++++++++++++------- .../Atomic/Atoms/Views/CheckboxLabel.swift | 33 ++++++++++------- 2 files changed, 44 insertions(+), 25 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift b/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift index 60d88693..82aad9ee 100644 --- a/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift +++ b/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift @@ -38,6 +38,23 @@ import VDS } } + /// Disables all selection logic when setting the value of isSelected, reducing it to a stored property. + open var updateSelectionOnly: Bool = false + + /** + The represented state of the Checkbox. + + Setting updateSelectionOnly to true bypasses the animation logic inherent with setting this property. + */ + override open var isSelected: Bool { + didSet { + if !updateSelectionOnly { + viewModel.selected = isSelected + _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) + } + } + } + //-------------------------------------------------- // MARK: - Initializers //-------------------------------------------------- @@ -66,16 +83,6 @@ import VDS isSelected = isChecked } - open override func setup() { - super.setup() - publisher(for: .valueChanged) - .sink { [weak self] control in - guard let self, isEnabled else { return } - viewModel?.selected = isSelected - _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) - }.store(in: &subscribers) - } - //-------------------------------------------------- // MARK: - Actions //-------------------------------------------------- @@ -136,8 +143,13 @@ import VDS //properties isEnabled = viewModel.enabled && !viewModel.readOnly isAnimated = viewModel.animated - isSelected = viewModel.selected - + + if viewModel.selected { + updateSelectionOnly = true + isSelected = viewModel.selected + updateSelectionOnly = false + } + //events viewModel.updateUI = { MVMCoreDispatchUtility.performBlock(onMainThread: { [weak self] in diff --git a/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift b/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift index c75ead98..19966009 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift @@ -20,21 +20,23 @@ import VDS var fieldValue: JSONValue? var groupName: String? - //-------------------------------------------------- - // MARK: - Life Cycle - //-------------------------------------------------- + /// Disables all selection logic when setting the value of isSelected, reducing it to a stored property. + open var updateSelectionOnly: Bool = false - open override func setup() { - super.setup() - - publisher(for: .valueChanged) - .sink { [weak self] control in - guard let self, isEnabled else { return } - viewModel?.checkbox.selected = isSelected + /** + The represented state of the Checkbox. + + Setting updateSelectionOnly to true bypasses the animation logic inherent with setting this property. + */ + override open var isSelected: Bool { + didSet { + if !updateSelectionOnly { + viewModel.checkbox.selected = isSelected _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) - }.store(in: &subscribers) + } + } } - + //-------------------------------------------------- // MARK: - Atomic //-------------------------------------------------- @@ -73,8 +75,13 @@ import VDS //properties isAnimated = viewModel.checkbox.animated isEnabled = viewModel.checkbox.enabled && !viewModel.checkbox.readOnly - isSelected = viewModel.checkbox.selected + if viewModel.checkbox.selected { + updateSelectionOnly = false + isSelected = viewModel.checkbox.selected + updateSelectionOnly = true + } + //events viewModel.checkbox.updateUI = { MVMCoreDispatchUtility.performBlock(onMainThread: { [weak self] in From 5a3f04aa5f78a9fdcf0a937c6e5df96a0497b548 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Fri, 2 Aug 2024 08:53:15 -0500 Subject: [PATCH 5/9] use super instead of var Signed-off-by: Matt Bruce --- .../Atomic/Atoms/Selectors/Checkbox.swift | 24 +++++-------------- .../Atomic/Atoms/Views/CheckboxLabel.swift | 22 ++++------------- 2 files changed, 11 insertions(+), 35 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift b/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift index 82aad9ee..205b8dfb 100644 --- a/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift +++ b/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift @@ -38,20 +38,10 @@ import VDS } } - /// Disables all selection logic when setting the value of isSelected, reducing it to a stored property. - open var updateSelectionOnly: Bool = false - - /** - The represented state of the Checkbox. - - Setting updateSelectionOnly to true bypasses the animation logic inherent with setting this property. - */ override open var isSelected: Bool { didSet { - if !updateSelectionOnly { - viewModel.selected = isSelected - _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) - } + viewModel.selected = isSelected + _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) } } @@ -144,12 +134,10 @@ import VDS isEnabled = viewModel.enabled && !viewModel.readOnly isAnimated = viewModel.animated - if viewModel.selected { - updateSelectionOnly = true - isSelected = viewModel.selected - updateSelectionOnly = false - } - + //call super here to go around the didSet + //in this class + super.isSelected = viewModel.selected + //events viewModel.updateUI = { MVMCoreDispatchUtility.performBlock(onMainThread: { [weak self] in diff --git a/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift b/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift index 19966009..bc200203 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift @@ -19,21 +19,11 @@ import VDS var fieldKey: String? var fieldValue: JSONValue? var groupName: String? - - /// Disables all selection logic when setting the value of isSelected, reducing it to a stored property. - open var updateSelectionOnly: Bool = false - /** - The represented state of the Checkbox. - - Setting updateSelectionOnly to true bypasses the animation logic inherent with setting this property. - */ override open var isSelected: Bool { didSet { - if !updateSelectionOnly { - viewModel.checkbox.selected = isSelected - _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) - } + viewModel.checkbox.selected = isSelected + _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) } } @@ -76,11 +66,9 @@ import VDS isAnimated = viewModel.checkbox.animated isEnabled = viewModel.checkbox.enabled && !viewModel.checkbox.readOnly - if viewModel.checkbox.selected { - updateSelectionOnly = false - isSelected = viewModel.checkbox.selected - updateSelectionOnly = true - } + //call super here to go around the didSet + //in this class + super.isSelected = viewModel.checkbox.selected //events viewModel.checkbox.updateUI = { From 37c6dfd6b305a567d15cb44e730cfa5c3bffb13f Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Fri, 2 Aug 2024 13:13:57 -0500 Subject: [PATCH 6/9] optional viewModel Signed-off-by: Matt Bruce --- MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift | 2 +- MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift b/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift index 205b8dfb..572a075b 100644 --- a/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift +++ b/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift @@ -40,7 +40,7 @@ import VDS override open var isSelected: Bool { didSet { - viewModel.selected = isSelected + viewModel?.selected = isSelected _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) } } diff --git a/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift b/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift index bc200203..32e88bf2 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift @@ -22,7 +22,7 @@ import VDS override open var isSelected: Bool { didSet { - viewModel.checkbox.selected = isSelected + viewModel?.checkbox.selected = isSelected _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) } } From d308bfc9571930c3d511778603822a674754128c Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 8 Aug 2024 15:31:17 -0500 Subject: [PATCH 7/9] CXTDT-598142 - RadioButton fix QA3||MVA||Prepay||IOS - 22053||Devices||From Add device screen Signed-off-by: Matt Bruce --- MVMCoreUI/Atomic/Atoms/Selectors/RadioButton.swift | 5 ----- 1 file changed, 5 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Selectors/RadioButton.swift b/MVMCoreUI/Atomic/Atoms/Selectors/RadioButton.swift index 7fe3f9a4..0ecd920b 100644 --- a/MVMCoreUI/Atomic/Atoms/Selectors/RadioButton.swift +++ b/MVMCoreUI/Atomic/Atoms/Selectors/RadioButton.swift @@ -144,11 +144,6 @@ import VDS //-------------------------------------------------- // MARK: - MoleculeViewProtocol //-------------------------------------------------- - - open func needsToBeConstrained() -> Bool { true } - - public func horizontalAlignment() -> UIStackView.Alignment { .leading } - public func updateView(_ size: CGFloat) {} } From b41d2189bf661aa34df6ee415968306c6838d02c Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Fri, 9 Aug 2024 17:48:05 -0500 Subject: [PATCH 8/9] taking out showError for now Signed-off-by: Matt Bruce --- MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift | 3 ++- MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift b/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift index 572a075b..64224f04 100644 --- a/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift +++ b/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift @@ -143,7 +143,8 @@ import VDS MVMCoreDispatchUtility.performBlock(onMainThread: { [weak self] in guard let self = self else { return } let isValid = viewModel.isValid ?? true - showError = !isValid + //TODO: Fix issue with default state + //showError = !isValid isEnabled = viewModel.enabled }) diff --git a/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift b/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift index 32e88bf2..3e02b467 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift @@ -75,7 +75,8 @@ import VDS MVMCoreDispatchUtility.performBlock(onMainThread: { [weak self] in guard let self = self else { return } let isValid = viewModel.checkbox.isValid ?? true - showError = !isValid + //TODO: Fix issue with default state + //showError = !isValid errorText = viewModel.checkbox.errorMessage isEnabled = viewModel.checkbox.enabled }) From 715a911ee4e4169b72a59d5ed8be5ed5e7d13cdd Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Sat, 10 Aug 2024 11:30:47 -0500 Subject: [PATCH 9/9] fixed issue with vds refactor --- .../Item Dropdown/ItemDropdownEntryFieldModel.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryFieldModel.swift b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryFieldModel.swift index f6f20b9f..04d880ae 100644 --- a/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryFieldModel.swift +++ b/MVMCoreUI/Atomic/Atoms/FormFields/TextFields/Dropdown Fields/Item Dropdown/ItemDropdownEntryFieldModel.swift @@ -17,7 +17,7 @@ import VDS public var options: [String] = [] public var selectedIndex: Int? public var showInlineLabel: Bool = false - public var feedbackTextPlacement: VDS.EntryFieldBase.HelperTextPlacement = .bottom + public var feedbackTextPlacement: VDS.DropdownSelect.HelperTextPlacement = .bottom public init(with options: [String], selectedIndex: Int? = nil) { self.options = options