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() {
if let actionModel = baseDropdownEntryFieldModel?.action, let actionMap = actionModel.toJSON() {
var additionalData = self.additionalData ?? [:]
additionalData[KeySourceModel] = baseDropdownEntryFieldModel
MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalData, delegateObject: delegateObject)
if let baseDropdownEntryFieldModel = baseDropdownEntryFieldModel, let actionModel = baseDropdownEntryFieldModel.action, let actionMap = actionModel.toJSON() {
let additionalDataWithSource = additionalData.dictionaryAdding(key: KeySourceModel, value: baseDropdownEntryFieldModel)
MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalDataWithSource, delegateObject: delegateObject)
}
}
}

View File

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

View File

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

View File

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

View File

@ -394,20 +394,19 @@ public typealias ActionBlockConfirmation = () -> (Bool)
let actionMap = model.action?.toJSON()
let alternateActionMap = model.alternateAction?.toJSON()
let additionalDataWithSource = additionalData.dictionaryAdding(key: KeySourceModel, value: model)
if actionMap != nil || alternateActionMap != nil {
var additionalDatatoUpdate = additionalData ?? [:]
additionalDatatoUpdate[KeySourceModel] = model
didToggleAction = { [weak self] in
guard let self = self else { return }
if self.isOn {
if actionMap != nil {
MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalDatatoUpdate, delegateObject: delegateObject)
MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalDataWithSource, delegateObject: delegateObject)
}
} else {
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 {
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()),
let actionMap = try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.init()) as? [AnyHashable: Any],
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)
}
}
}