prevent double selection and code review items

This commit is contained in:
Kyle Matthew Hedden 2020-09-21 12:17:25 -04:00
parent 1bc655192a
commit 324605cdeb
6 changed files with 23 additions and 25 deletions

View File

@ -92,10 +92,9 @@ import UIKit
} }
func performDropdownAction() { func performDropdownAction() {
if let actionModel = baseDropdownEntryFieldModel?.action, let actionMap = actionModel.toJSON() { if let baseDropdownEntryFieldModel = baseDropdownEntryFieldModel, let actionModel = baseDropdownEntryFieldModel.action, let actionMap = actionModel.toJSON() {
var additionalData = self.additionalData ?? [:] let additionalDataWithSource = additionalData.dictionaryAdding(key: KeySourceModel, value: baseDropdownEntryFieldModel)
additionalData[KeySourceModel] = baseDropdownEntryFieldModel MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalDataWithSource, delegateObject: delegateObject)
MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalData, delegateObject: delegateObject)
} }
} }
} }

View File

@ -137,13 +137,11 @@ open class RadioBox: Control, MFButtonProtocol {
} }
@objc open func selectBox() { @objc open func selectBox() {
guard isEnabled else { return } guard isEnabled, !isSelected else { return }
isSelected = true isSelected = true
radioBoxModel?.selected = isSelected radioBoxModel?.selected = isSelected
if let actionModel = radioBoxModel?.action { if let radioBoxModel = radioBoxModel, let actionModel = radioBoxModel.action {
var additionalData = self.additionalData ?? [:] Button.performButtonAction(with: actionModel, button: self, delegateObject: delegateObject, additionalData: additionalData, sourceModel: radioBoxModel)
additionalData[KeySourceModel] = radioBoxModel
Button.performButtonAction(with: actionModel, button: self, delegateObject: delegateObject, additionalData: additionalData)
} }
layer.setNeedsDisplay() layer.setNeedsDisplay()
} }

View File

@ -95,15 +95,14 @@ import UIKit
if !isEnabled { if !isEnabled {
return return
} }
let wasPreviouslySelected = isSelected
if let radioButtonModel = radioButtonSelectionHelper { if let radioButtonModel = radioButtonSelectionHelper {
radioButtonModel.selected(self) radioButtonModel.selected(self)
} else { } else {
isSelected = !isSelected isSelected = !isSelected
} }
if let actionModel = radioModel?.action, isSelected { if let radioModel = radioModel, let actionModel = radioModel.action, isSelected, !wasPreviouslySelected {
var additionalData = self.additionalData ?? [:] Button.performButtonAction(with: actionModel, button: self, delegateObject: delegateObject, additionalData: additionalData, sourceModel: radioModel)
additionalData[KeySourceModel] = radioModel
Button.performButtonAction(with: actionModel, button: self, delegateObject: delegateObject, additionalData: additionalData)
} }
_ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate) _ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate)
setNeedsDisplay() setNeedsDisplay()

View File

@ -119,13 +119,11 @@ open class RadioSwatch: Control, MFButtonProtocol {
} }
@objc open func selectSwatch() { @objc open func selectSwatch() {
guard isEnabled else { return } guard isEnabled, !isSelected else { return }
isSelected = true isSelected = true
radioSwatchModel?.selected = isSelected radioSwatchModel?.selected = isSelected
if let actionModel = radioSwatchModel?.action { if let radioSwatchModel = radioSwatchModel, let actionModel = radioSwatchModel.action {
var additionalData = self.additionalData ?? [:] Button.performButtonAction(with: actionModel, button: self, delegateObject: delegateObject, additionalData: additionalData, sourceModel: radioSwatchModel)
additionalData[KeySourceModel] = radioSwatchModel
Button.performButtonAction(with: actionModel, button: self, delegateObject: delegateObject, additionalData: additionalData)
} }
layer.setNeedsDisplay() layer.setNeedsDisplay()
} }

View File

@ -394,20 +394,19 @@ public typealias ActionBlockConfirmation = () -> (Bool)
let actionMap = model.action?.toJSON() let actionMap = model.action?.toJSON()
let alternateActionMap = model.alternateAction?.toJSON() let alternateActionMap = model.alternateAction?.toJSON()
let additionalDataWithSource = additionalData.dictionaryAdding(key: KeySourceModel, value: model)
if actionMap != nil || alternateActionMap != nil { if actionMap != nil || alternateActionMap != nil {
var additionalDatatoUpdate = additionalData ?? [:]
additionalDatatoUpdate[KeySourceModel] = model
didToggleAction = { [weak self] in didToggleAction = { [weak self] in
guard let self = self else { return } guard let self = self else { return }
if self.isOn { if self.isOn {
if actionMap != nil { if actionMap != nil {
MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalDatatoUpdate, delegateObject: delegateObject) MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalDataWithSource, delegateObject: delegateObject)
} }
} else { } else {
if alternateActionMap != nil { if alternateActionMap != nil {
MVMCoreActionHandler.shared()?.handleAction(with: alternateActionMap, additionalData: additionalDatatoUpdate, delegateObject: delegateObject) MVMCoreActionHandler.shared()?.handleAction(with: alternateActionMap, additionalData: additionalDataWithSource, delegateObject: delegateObject)
} else if actionMap != nil { } else if actionMap != nil {
MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalDatatoUpdate, delegateObject: delegateObject) MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalDataWithSource, delegateObject: delegateObject)
} }
} }
} }

View File

@ -82,11 +82,16 @@ public typealias ButtonAction = (Button) -> ()
} }
} }
open class func performButtonAction(with model: ActionModelProtocol, button: MFButtonProtocol, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { open class func performButtonAction(with model: ActionModelProtocol, button: MFButtonProtocol, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?, sourceModel: MoleculeModelProtocol? = nil) {
if let data = try? model.encode(using: JSONEncoder()), if let data = try? model.encode(using: JSONEncoder()),
let actionMap = try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.init()) as? [AnyHashable: Any], let actionMap = try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.init()) as? [AnyHashable: Any],
delegateObject?.buttonDelegate?.button?(button, shouldPerformActionWithMap: actionMap, additionalData: additionalData) ?? true { delegateObject?.buttonDelegate?.button?(button, shouldPerformActionWithMap: actionMap, additionalData: additionalData) ?? true {
MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalData, delegateObject: delegateObject) if let sourceModel = sourceModel {
let additionalDataWithSource = additionalData.dictionaryAdding(key: KeySourceModel, value: sourceModel)
MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalDataWithSource, delegateObject: delegateObject)
} else {
MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalData, delegateObject: delegateObject)
}
} }
} }