From 57bec1ececff8d22205fe686dfbab04709f83205 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Tue, 30 Jul 2024 17:02:09 -0500 Subject: [PATCH] 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 }