vds_ios/VDS/Classes/SelectorGroupHandlerBase.swift
Matt Bruce 4bf9ce83b5 refactored to remove models
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
2022-10-20 10:55:36 -05:00

69 lines
1.9 KiB
Swift

//
// SelectorGroupHandlerBase.swift
// VDS
//
// Created by Matt Bruce on 9/8/22.
//
import Foundation
import UIKit
public class SelectorGroupHandlerBase<ModelHandlerType: Control>: Control {
//--------------------------------------------------
// MARK: - Public Properties
//--------------------------------------------------
public var selectorViews: [ModelHandlerType] = []
//--------------------------------------------------
// MARK: - Overrides
//--------------------------------------------------
override public var disabled: Bool {
didSet {
selectorViews.forEach { handler in
handler.disabled = disabled
}
}
}
override public var surface: Surface {
didSet {
selectorViews.forEach { handler in
handler.surface = surface
}
}
}
public func createModelHandler() -> ModelHandlerType {
//create view
let newSelectorView = ModelHandlerType()
//add the selectedPublisher for the change
newSelectorView
.publisher(for: .touchUpInside)
.sink { [weak self] control in
self?.didSelect(control)
}
.store(in: &subscribers)
return newSelectorView
}
open func didSelect(_ selectedControl: ModelHandlerType) {
fatalError("Must override didSelect")
}
public func valueChanged() {
DispatchQueue.main.asyncAfter(deadline: .now() + Constants.ModelStateDebounce) { [weak self] in
self?.sendActions(for: .valueChanged)
}
}
}
public class SelectorGroupSelectedHandlerBase<ModelHandlerType: Control>: SelectorGroupHandlerBase<ModelHandlerType>{
public var selectedHandler: ModelHandlerType? {
return selectorViews.filter { $0.isSelected == true }.first
}
}