jsoncreator_app/JSONCreator_iOS/JSONCreator/TestToggle.swift
Matt Bruce 0391962ac7 updated for renaming
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
2022-08-03 13:57:58 -05:00

111 lines
3.8 KiB
Swift

//
// Toggle.swift
// MVMCoreUI
//
// Created by Kevin Christiano on 12/4/19.
// Copyright © 2019 Verizon Wireless. All rights reserved.
//
import MVMCore
import MVMCoreUI
import UIKit
import VDS
extension MoleculeViewProtocol {
public func onModelChange(model: MoleculeModelProtocol) {
if let backgroundColor = model.backgroundColor {
self.backgroundColor = backgroundColor.uiColor
}
if let accessibilityIdentifier = model.accessibilityIdentifier {
self.accessibilityIdentifier = accessibilityIdentifier
}
}
}
extension ModelHandlerable where Self: MoleculeViewProtocol {
public init(model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable : Any]?) {
self.init(with: model as! ModelType)
self.set(with: model, delegateObject, additionalData)
}
}
open class TestToggle: ToggleBase<TestToggleModel>, MoleculeViewProtocol, MVMCoreViewProtocol {
/// The state on the toggle. Default value: false.
open override var isOn: Bool {
didSet {
_ = FormValidator.validate(delegate: delegateObject?.formHolderDelegate)
}
}
open override var isEnabled: Bool {
didSet {
model.enabled = isEnabled && !model.readOnly
}
}
//--------------------------------------------------
// MARK: - Delegate
//--------------------------------------------------
private var delegateObject: MVMCoreUIDelegateObject?
//--------------------------------------------------
// MARK: - Initializers
//--------------------------------------------------
open override func onStateChange(viewModel: ModelType) {
super.onStateChange(viewModel: viewModel)
onModelChange(model: viewModel)
}
override open func setup() {
super.setup()
self.setupView()
}
// MARK:- MVMCoreViewProtocol
public func updateView(_ size: CGFloat) {}
public func setupView() {}
// MARK:- MoleculeViewProtocol
public func set(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?, _ additionalData: [AnyHashable: Any]?) {
guard let castedModel = model as? ModelType else { return }
set(with: castedModel)
self.delegateObject = delegateObject
guard let formFieldProtocol = model as? FormFieldProtocol else { return }
FormValidator.setupValidation(for: formFieldProtocol, delegate: delegateObject?.formHolderDelegate)
let additionalDataWithSource = additionalData.dictionaryAdding(key: KeySourceModel, value: model)
if castedModel.action != nil || castedModel.alternateAction != nil {
onChange = { [weak self] in
guard let self = self else { return }
if self.isOn {
if let action = castedModel.action {
MVMCoreActionHandler.shared()?.asyncHandleAction(with: action, additionalData: additionalDataWithSource, delegateObject: delegateObject)
}
} else {
if let action = castedModel.alternateAction ?? castedModel.action {
MVMCoreActionHandler.shared()?.asyncHandleAction(with: action, additionalData: additionalDataWithSource, delegateObject: delegateObject)
}
}
}
}
}
public static func estimatedHeight(with model: MoleculeModelProtocol, _ delegateObject: MVMCoreUIDelegateObject?) -> CGFloat? {
return 24
}
}
// MARK: - MVMCoreUIViewConstrainingProtocol
extension TestToggle: MVMCoreUIViewConstrainingProtocol {
public func needsToBeConstrained() -> Bool { true }
public func horizontalAlignment() -> UIStackView.Alignment { .trailing }
}