// // CheckboxGroup.swift // VDS // // Created by Matt Bruce on 8/23/22. // import Foundation import UIKit @objc(VDSCheckboxGroup) public class CheckboxGroup: CheckboxGroupBase { public override func didSelect(_ selectedControl: Checkbox) { selectedControl.toggle() if selectedControl.isSelected, showError{ showError.toggle() } valueChanged() } } public class CheckboxGroupBase: SelectorGroupHandlerBase { //-------------------------------------------------- // MARK: - Public Properties //-------------------------------------------------- public override var selectorViews: [HandlerType] { didSet { for selector in selectorViews { if !mainStackView.arrangedSubviews.contains(selector) { selector .publisher(for: .touchUpInside) .sink { [weak self] handler in self?.didSelect(handler) }.store(in: &subscribers) mainStackView.addArrangedSubview(selector) } } } } private var _showError: Bool = false public var showError: Bool { get { _showError } set { var newShowError = newValue let anySelected = selectorViews.filter { $0.isSelected == true }.count > 0 if anySelected && newShowError { newShowError = false } selectorViews.forEach { handler in handler.showError = newShowError } _showError = newShowError } } //-------------------------------------------------- // MARK: - Private Properties //-------------------------------------------------- private var mainStackView: UIStackView = { return UIStackView().with { $0.translatesAutoresizingMaskIntoConstraints = false $0.alignment = .fill $0.distribution = .fill $0.axis = .vertical $0.spacing = 10 } }() //-------------------------------------------------- // MARK: - Overrides //-------------------------------------------------- open override func setup() { super.setup() isAccessibilityElement = true accessibilityTraits = .button addSubview(mainStackView) mainStackView.pinToSuperView() } public var selectedHandlers: [HandlerType]? { let selected = selectorViews.filter{ $0.isSelected == true } guard selected.count > 0 else { return nil } return selected } }