mvm_core_ui/MVMCoreUI/Molecules/RadioButton.swift
Suresh, Kamlesh fcb377df33 space
2019-10-22 09:13:07 -04:00

107 lines
3.3 KiB
Swift

//
// RadioButton.swift
// MVMCoreUI
//
// Created by Suresh, Kamlesh on 4/25/19.
// Copyright © 2019 Verizon Wireless. All rights reserved.
//
import UIKit
@objcMembers open class RadioButton: ViewConstrainingView, FormValidationFormFieldProtocol {
public let radioButton = MFRadioButton()
var delegateObject: MVMCoreUIDelegateObject?
var fieldKey: String?
var formValue: Bool?
var isRequired: Bool = false
var radioButtonModel: RadioButtonModel?
lazy var radioGroupName: String? = {
[unowned self] in
return json?.optionalStringForKey("radioGroupName") ?? json?.optionalStringForKey("fieldKey")
}()
// MARK: - Inits
public init() {
super.init(frame: .zero)
}
public override init(frame: CGRect) {
super.init(frame: frame)
}
required public init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
open override func setupView() {
super.setupView()
guard subviews.count == 0 else {
return
}
translatesAutoresizingMaskIntoConstraints = false
radioButton.translatesAutoresizingMaskIntoConstraints = false
addSubview(radioButton)
isAccessibilityElement = true
accessibilityTraits = .none
accessibilityHint = MVMCoreUIUtility.hardcodedString(withKey: "radio_action_hint")
NSLayoutConstraint.constraintPinSubview(toSuperview: radioButton)
radioButton.performActionForCheck = { [weak self] in
self?.tapAction()
}
}
func tapAction() {
if let radioButtonModel = radioButtonModel {
radioButtonModel.selected(self)
} else {
radioButton.isSelected = !radioButton.isSelected
}
FormValidator.enableByValidationWith(delegate: delegateObject?.formValidationProtocol)
}
public func isValidField() -> Bool {
return radioButton.isSelected
}
public func formFieldName() -> String? {
return json?.optionalStringForKey("fieldKey")
}
public func formFieldGroupName() -> String? {
return json?.optionalStringForKey("groupName")
}
public func formFieldValue() -> Any? {
return radioButton.isSelected
}
}
// MARK: - MVMCoreUIMoleculeViewProtocol
extension RadioButton {
@objc open override func setWithJSON(_ json: [AnyHashable: Any]?, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?) {
super.setWithJSON(json, delegateObject: delegateObject, additionalData: additionalData)
// Configure class properties with JSON values
guard let jsonDictionary = json else {
return
}
fieldKey = jsonDictionary.optionalStringForKey("fieldKey")
isRequired = jsonDictionary.boolForKey("required")
self.delegateObject = delegateObject
let radioButtonModel = RadioButtonModel.setupForRadioButtonGroup(radioButton: self,
formValidator: delegateObject?.formValidationProtocol?.formValidatorModel?())
FormValidator.setupValidation(molecule: radioButtonModel, delegate: delegateObject?.formValidationProtocol)
self.radioButtonModel = radioButtonModel
}
}