diff --git a/MVMCoreUI/BaseClasses/Button.swift b/MVMCoreUI/BaseClasses/Button.swift index 1d5d743e..e0f098be 100644 --- a/MVMCoreUI/BaseClasses/Button.swift +++ b/MVMCoreUI/BaseClasses/Button.swift @@ -8,14 +8,11 @@ public typealias ButtonBlock = (Button) -> () - @objcMembers open class Button: UIButton, MFButtonProtocol { //-------------------------------------------------- // MARK: - Properties //-------------------------------------------------- - - public var json: [AnyHashable: Any]? - public var actionMap: [AnyHashable: Any]? + public var actionModel: ActionModelProtocol? private var initialSetupPerformed = false @@ -71,44 +68,20 @@ public typealias ButtonBlock = (Button) -> () buttonBlock?(self) } - public func setWithActionMap(_ actionMap: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { - self.actionMap = actionMap - + public func setWithAction(_ actionModel: ActionModelProtocol, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { + self.actionModel = actionModel buttonDelegate = delegateObject?.buttonDelegate - addBlock(event: .touchUpInside) { [weak self] sender in guard let self = self else { return } - - if self.buttonDelegate?.button?(self, shouldPerformActionWithMap: actionMap, additionalData: additionalData) ?? true { + if let data = try? actionModel.encode(using: JSONEncoder()), + let actionMap = try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.init()) as? [AnyHashable: Any], + delegateObject?.buttonDelegate?.button?(self, shouldPerformActionWithMap: actionMap, additionalData: additionalData) ?? true { MVMCoreActionHandler.shared()?.handleAction(with: actionMap, additionalData: additionalData, delegateObject: delegateObject) } } } } -// MARK: - MVMCoreUIMoleculeViewProtocol -extension Button: MVMCoreUIMoleculeViewProtocol { - - public func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) { - self.json = json - - guard let dictionary = json else { return } - - if let backgroundColorString = dictionary[KeyBackgroundColor] as? String { - backgroundColor = UIColor.mfGet(forHex: backgroundColorString) - } - - if let title = dictionary[KeyTitle] as? String { - setTitle(title, for: .normal) - } - } - - public func reset() { - backgroundColor = .clear - } -} - - // MARK: - MVMCoreViewProtocol extension Button: MVMCoreViewProtocol { @@ -116,7 +89,6 @@ extension Button: MVMCoreViewProtocol { /// Will be called only once. public func setupView() { - translatesAutoresizingMaskIntoConstraints = false insetsLayoutMarginsFromSafeArea = false titleLabel?.numberOfLines = 0