Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
db018ac32b
commit
036d9462a8
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import Combine
|
||||||
|
|
||||||
public protocol SelectorGroupModel<SelectorType>: Modelable, FormFieldable {
|
public protocol SelectorGroupModel<SelectorType>: Modelable, FormFieldable {
|
||||||
associatedtype SelectorType: SelectorModel
|
associatedtype SelectorType: SelectorModel
|
||||||
@ -32,19 +32,19 @@ open class SelectorGroup<SelectorType, SelectorGroupType: SelectorGroupModel<Sel
|
|||||||
public var selectorViews: [SelectorHandlerType] = []
|
public var selectorViews: [SelectorHandlerType] = []
|
||||||
public var selectedModel: SelectorType?
|
public var selectedModel: SelectorType?
|
||||||
public var onChange: Blocks.ActionBlock?
|
public var onChange: Blocks.ActionBlock?
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Private Properties
|
// MARK: - Private Properties
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
private var mainStackView: UIStackView = {
|
private var mainStackView: UIStackView = {
|
||||||
let stackView = UIStackView()
|
let stackView = UIStackView()
|
||||||
stackView.translatesAutoresizingMaskIntoConstraints = false
|
stackView.translatesAutoresizingMaskIntoConstraints = false
|
||||||
stackView.alignment = .top
|
stackView.alignment = .top
|
||||||
stackView.axis = .vertical
|
stackView.axis = .vertical
|
||||||
stackView.spacing = 10
|
stackView.spacing = 10
|
||||||
return stackView
|
return stackView
|
||||||
}()
|
}()
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Overrides
|
// MARK: - Overrides
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
@ -58,7 +58,7 @@ open class SelectorGroup<SelectorType, SelectorGroupType: SelectorGroupModel<Sel
|
|||||||
model.selectors = selectors
|
model.selectors = selectors
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override public var surface: Surface {
|
override public var surface: Surface {
|
||||||
didSet {
|
didSet {
|
||||||
let selectors = model.selectors.compactMap { existing in
|
let selectors = model.selectors.compactMap { existing in
|
||||||
@ -69,29 +69,29 @@ open class SelectorGroup<SelectorType, SelectorGroupType: SelectorGroupModel<Sel
|
|||||||
model.selectors = selectors
|
model.selectors = selectors
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open override func setup() {
|
open override func setup() {
|
||||||
super.setup()
|
super.setup()
|
||||||
|
|
||||||
isAccessibilityElement = true
|
isAccessibilityElement = true
|
||||||
accessibilityTraits = .button
|
accessibilityTraits = .button
|
||||||
addSubview(mainStackView)
|
addSubview(mainStackView)
|
||||||
|
|
||||||
mainStackView.topAnchor.constraint(equalTo: topAnchor).isActive = true
|
mainStackView.topAnchor.constraint(equalTo: topAnchor).isActive = true
|
||||||
mainStackView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
|
mainStackView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
|
||||||
mainStackView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
|
mainStackView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
|
||||||
mainStackView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
|
mainStackView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
|
||||||
}
|
}
|
||||||
|
|
||||||
open override func shouldUpdateView(viewModel: ModelType) -> Bool {
|
open override func shouldUpdateView(viewModel: ModelType) -> Bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
open override func updateView(viewModel: ModelType) {
|
open override func updateView(viewModel: ModelType) {
|
||||||
print("Selector Group update:")
|
print("Selector Group update:")
|
||||||
func findSelectorView(inputId: String) -> SelectorHandlerType? {
|
func findSelectorView(inputId: String) -> SelectorHandlerType? {
|
||||||
return selectorViews.first(where: { existingSelectorView in
|
return selectorViews.first(where: { existingSelectorView in
|
||||||
return existingSelectorView.model.inputId == inputId
|
return existingSelectorView.model.inputId == inputId
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,8 +109,8 @@ open class SelectorGroup<SelectorType, SelectorGroupType: SelectorGroupModel<Sel
|
|||||||
self?.didSelect(selected: model)
|
self?.didSelect(selected: model)
|
||||||
}.store(in: &cancellables)
|
}.store(in: &cancellables)
|
||||||
|
|
||||||
|
//add model update to the subscribers
|
||||||
newSelectorView.$model.sink { [weak self] model in
|
newSelectorView.$model.sink { [weak self] model in
|
||||||
//should replace
|
|
||||||
if let cached = self?.getCachedSelector(viewModel: model), newSelectorView.shouldUpdateView(viewModel: cached) {
|
if let cached = self?.getCachedSelector(viewModel: model), newSelectorView.shouldUpdateView(viewModel: cached) {
|
||||||
self?.replace(viewModel: model)
|
self?.replace(viewModel: model)
|
||||||
}
|
}
|
||||||
@ -122,7 +122,7 @@ open class SelectorGroup<SelectorType, SelectorGroupType: SelectorGroupModel<Sel
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public func getCachedSelector(viewModel: SelectorType) -> SelectorType? {
|
public func getCachedSelector(viewModel: SelectorType) -> SelectorType? {
|
||||||
if let index = model.selectors.firstIndex(where: { element in
|
if let index = model.selectors.firstIndex(where: { element in
|
||||||
return element.id == viewModel.id
|
return element.id == viewModel.id
|
||||||
@ -142,4 +142,5 @@ open class SelectorGroup<SelectorType, SelectorGroupType: SelectorGroupModel<Sel
|
|||||||
}
|
}
|
||||||
|
|
||||||
open func didSelect(selected: SelectorType) { }
|
open func didSelect(selected: SelectorType) { }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user