diff --git a/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift b/MVMCoreUI/Atomic/Atoms/Selectors/Checkbox.swift index e864caa1..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,12 +85,6 @@ import VDS toggle() } - open override func toggle() { - super.toggle() - viewModel.selected = isSelected - _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) - } - //-------------------------------------------------- // MARK: - Methods //-------------------------------------------------- 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) 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 9473a324..c75ead98 100644 --- a/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift +++ b/MVMCoreUI/Atomic/Atoms/Views/CheckboxLabel.swift @@ -20,21 +20,21 @@ 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 setup() { + super.setup() + + 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 //-------------------------------------------------- @@ -73,11 +73,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 = { @@ -106,6 +102,8 @@ import VDS } + @objc open func updateView(_ size: CGFloat) {} + open class func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? { return 200 }