From d199389ff3137d2f0fdb9e90a16a2f2621e9c265 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Tue, 30 Jul 2024 16:38:30 -0500 Subject: [PATCH 1/3] ensured isEnabled Signed-off-by: Matt Bruce --- .../Atomic/Atoms/Selectors/Checkbox.swift | 2 ++ .../Atomic/Atoms/Views/CheckboxLabel.swift | 24 +++++++------------ 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift b/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift index e864caa1..a14aa71e 100644 --- a/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift +++ b/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift @@ -77,6 +77,8 @@ import VDS open override func toggle() { super.toggle() + + guard isEnabled else { return } 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 9473a324..43a63161 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift @@ -20,21 +20,19 @@ import VDS var fieldValue: JSONValue? var groupName: String? - private var updateSelectionOnly: Bool = false - override open var isSelected: Bool { - didSet { - if !updateSelectionOnly { - viewModel.checkbox.selected = isSelected - _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) - } - } - } - //-------------------------------------------------- // MARK: - Life Cycle //-------------------------------------------------- @objc open func updateView(_ size: CGFloat) {} + open override func toggle() { + super.toggle() + + guard isEnabled else { return } + viewModel.checkbox.selected = isSelected + _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) + } + //-------------------------------------------------- // MARK: - Atomic //-------------------------------------------------- @@ -73,11 +71,7 @@ import VDS //properties isAnimated = viewModel.checkbox.animated isEnabled = viewModel.checkbox.enabled && !viewModel.checkbox.readOnly - if viewModel.checkbox.selected { - updateSelectionOnly = false - isSelected = viewModel.checkbox.selected - updateSelectionOnly = true - } + isSelected = viewModel.checkbox.selected //events viewModel.checkbox.updateUI = { From 57bec1ececff8d22205fe686dfbab04709f83205 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Tue, 30 Jul 2024 17:02:09 -0500 Subject: [PATCH 2/3] moved formvalidation to publisher Signed-off-by: Matt Bruce --- .../Atomic/Atoms/Selectors/Checkbox.swift | 20 +++++++------- .../Atomic/Atoms/Selectors/RadioButton.swift | 27 ++++++++++--------- .../Atomic/Atoms/Views/CheckboxLabel.swift | 18 ++++++++----- 3 files changed, 36 insertions(+), 29 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift b/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift index a14aa71e..60d88693 100644 --- a/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift +++ b/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift @@ -65,7 +65,17 @@ import VDS self.init(frame: .zero) 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 //-------------------------------------------------- @@ -75,14 +85,6 @@ import VDS toggle() } - open override func toggle() { - super.toggle() - - guard isEnabled else { return } - viewModel.selected = isSelected - _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) - } - //-------------------------------------------------- // MARK: - Methods //-------------------------------------------------- diff --git a/MVMCoreUI/Atomic/Atoms/Selectors/RadioButton.swift b/MVMCoreUI/Atomic/Atoms/Selectors/RadioButton.swift index 3b4cfbc8..7fe3f9a4 100644 --- a/MVMCoreUI/Atomic/Atoms/Selectors/RadioButton.swift +++ b/MVMCoreUI/Atomic/Atoms/Selectors/RadioButton.swift @@ -26,15 +26,6 @@ import VDS open var fieldValue: JSONValue? open var groupName: String? - open override var isSelected: Bool { - didSet { - viewModel.state = isSelected - if oldValue != isSelected { - sendActions(for: .valueChanged) - } - } - } - lazy public var radioGroupName: String? = { viewModel.fieldKey }() lazy public var radioButtonSelectionHelper: RadioButtonSelectionHelper? = { @@ -85,8 +76,18 @@ import VDS //-------------------------------------------------- // MARK: - Lifecycle - //-------------------------------------------------- - public func viewModelDidUpdate() { + //-------------------------------------------------- + open override func setup() { + super.setup() + publisher(for: .valueChanged) + .sink { [weak self] control in + guard let self, isEnabled else { return } + viewModel?.state = isSelected + _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) + }.store(in: &subscribers) + } + + open func viewModelDidUpdate() { //events viewModel.updateUI = { @@ -119,7 +120,7 @@ import VDS if let radioButtonSelectionHelper { radioButtonSelectionHelper.selected(self) } else { - isSelected = !isSelected + isSelected.toggle() } if let actionModel = viewModel.action, isSelected, !wasPreviouslySelected { @@ -127,7 +128,7 @@ import VDS try await Button.performButtonAction(with: actionModel, button: self, delegateObject: delegateObject, additionalData: additionalData, sourceModel: viewModel) } } - _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) + sendActions(for: .valueChanged) setNeedsUpdate() } diff --git a/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift b/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift index 43a63161..c75ead98 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift @@ -23,16 +23,18 @@ import VDS //-------------------------------------------------- // MARK: - Life Cycle //-------------------------------------------------- - @objc open func updateView(_ size: CGFloat) {} - open override func toggle() { - super.toggle() + open override func setup() { + super.setup() - guard isEnabled else { return } - viewModel.checkbox.selected = isSelected - _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) + publisher(for: .valueChanged) + .sink { [weak self] control in + guard let self, isEnabled else { return } + viewModel?.checkbox.selected = isSelected + _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) + }.store(in: &subscribers) } - + //-------------------------------------------------- // MARK: - Atomic //-------------------------------------------------- @@ -100,6 +102,8 @@ import VDS } + @objc open func updateView(_ size: CGFloat) {} + open class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { return 200 } From 9606b914cc281b720e3a4532a0137cad69f63beb Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Tue, 30 Jul 2024 17:02:17 -0500 Subject: [PATCH 3/3] removed code Signed-off-by: Matt Bruce --- .../Atomic/Atoms/Selectors/RadioBoxes.swift | 23 ++----------------- 1 file changed, 2 insertions(+), 21 deletions(-) diff --git a/MVMCoreUI/Atomic/Atoms/Selectors/RadioBoxes.swift b/MVMCoreUI/Atomic/Atoms/Selectors/RadioBoxes.swift index 725cc893..6701f2c6 100644 --- a/MVMCoreUI/Atomic/Atoms/Selectors/RadioBoxes.swift +++ b/MVMCoreUI/Atomic/Atoms/Selectors/RadioBoxes.swift @@ -30,26 +30,7 @@ open class RadioBoxes: VDS.RadioBoxGroup, VDSMoleculeViewProtocol { /// The models for the molecules. public var boxes: [RadioBoxModel]? public weak var radioDelegate: RadioBoxSelectionDelegate? - -// TODO: this matches the current accessibility however not what was passed by Barbara's team. -// open override var items: [RadioBoxItem] { -// didSet { -// let total = items.count -// for (index, radioBoxItem) in items.enumerated() { -// radioBoxItem.selectorView.bridge_accessibilityValueBlock = { -// guard let format = MVMCoreUIUtility.hardcodedString(withKey: "index_string_of_total"), -// let indexString = MVMCoreUIUtility.getOrdinalString(forIndex: NSNumber(value: index + 1)) else { return ""} -// return String(format: format, indexString, total) -// } -// } -// } -// } - - open override func setup() { - super.setup() - - } - + // MARK: - MoleculeViewProtocol public func viewModelDidUpdate() { boxes = viewModel.boxes @@ -66,7 +47,7 @@ open class RadioBoxes: VDS.RadioBoxGroup, VDSMoleculeViewProtocol { // since the boxes has the state being tracked, we need to update the values here. if let index = items.firstIndex(where: {$0 === selectedControl}), let selectedBox = boxes?[index] { - boxes?.forEach {$0.selected = false } + boxes?.forEach { $0.selected = false } selectedBox.selected = true _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) radioDelegate?.selected(radioBox: selectedBox)