refactored more of the groups to remove protocol
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
e9c5a14ac9
commit
71b020cb3f
@ -43,6 +43,7 @@
|
||||
EA3362452892F9130071C351 /* Labelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3362442892F9130071C351 /* Labelable.swift */; };
|
||||
EA33624728931B050071C351 /* Initable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA33624628931B050071C351 /* Initable.swift */; };
|
||||
EA3C3B4C2894823E000CA526 /* AnyProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3C3B4B2894823E000CA526 /* AnyProxy.swift */; };
|
||||
EA4DB18528CA967F00103EE3 /* SelectorGroupHandlerBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA4DB18428CA967F00103EE3 /* SelectorGroupHandlerBase.swift */; };
|
||||
EA84F6B128B94A2500D67ABC /* CodableColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA84F6B028B94A2500D67ABC /* CodableColor.swift */; };
|
||||
EA89200228AECF2A006B9984 /* UIButton+Publisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89200128AECF2A006B9984 /* UIButton+Publisher.swift */; };
|
||||
EA89200428AECF4B006B9984 /* UITextField+Publisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89200328AECF4B006B9984 /* UITextField+Publisher.swift */; };
|
||||
@ -50,7 +51,6 @@
|
||||
EA89200828B526E0006B9984 /* CheckboxGroupModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89200728B526E0006B9984 /* CheckboxGroupModel.swift */; };
|
||||
EA89200D28B530FD006B9984 /* RadioBoxModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89200C28B530FD006B9984 /* RadioBoxModel.swift */; };
|
||||
EA89200F28B53921006B9984 /* Selectable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89200E28B53921006B9984 /* Selectable.swift */; };
|
||||
EA89201128B567B5006B9984 /* SelectorGroupModelHandlerable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89201028B567B5006B9984 /* SelectorGroupModelHandlerable.swift */; };
|
||||
EA89201328B568D8006B9984 /* RadioBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89201228B568D8006B9984 /* RadioBox.swift */; };
|
||||
EA89201528B56CF4006B9984 /* RadioBoxGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89201428B56CF4006B9984 /* RadioBoxGroup.swift */; };
|
||||
EA89201728B56CFF006B9984 /* RadioBoxGroupModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA89201628B56CFF006B9984 /* RadioBoxGroupModel.swift */; };
|
||||
@ -141,6 +141,7 @@
|
||||
EA3362442892F9130071C351 /* Labelable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Labelable.swift; sourceTree = "<group>"; };
|
||||
EA33624628931B050071C351 /* Initable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Initable.swift; sourceTree = "<group>"; };
|
||||
EA3C3B4B2894823E000CA526 /* AnyProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyProxy.swift; sourceTree = "<group>"; };
|
||||
EA4DB18428CA967F00103EE3 /* SelectorGroupHandlerBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorGroupHandlerBase.swift; sourceTree = "<group>"; };
|
||||
EA84F6B028B94A2500D67ABC /* CodableColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodableColor.swift; sourceTree = "<group>"; };
|
||||
EA89200128AECF2A006B9984 /* UIButton+Publisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIButton+Publisher.swift"; sourceTree = "<group>"; };
|
||||
EA89200328AECF4B006B9984 /* UITextField+Publisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITextField+Publisher.swift"; sourceTree = "<group>"; };
|
||||
@ -148,7 +149,6 @@
|
||||
EA89200728B526E0006B9984 /* CheckboxGroupModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckboxGroupModel.swift; sourceTree = "<group>"; };
|
||||
EA89200C28B530FD006B9984 /* RadioBoxModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioBoxModel.swift; sourceTree = "<group>"; };
|
||||
EA89200E28B53921006B9984 /* Selectable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Selectable.swift; sourceTree = "<group>"; };
|
||||
EA89201028B567B5006B9984 /* SelectorGroupModelHandlerable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorGroupModelHandlerable.swift; sourceTree = "<group>"; };
|
||||
EA89201228B568D8006B9984 /* RadioBox.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioBox.swift; sourceTree = "<group>"; };
|
||||
EA89201428B56CF4006B9984 /* RadioBoxGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioBoxGroup.swift; sourceTree = "<group>"; };
|
||||
EA89201628B56CFF006B9984 /* RadioBoxGroupModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioBoxGroupModel.swift; sourceTree = "<group>"; };
|
||||
@ -333,7 +333,6 @@
|
||||
EAF7F0A5289B0CE000B287F5 /* Resetable.swift */,
|
||||
EA89200E28B53921006B9984 /* Selectable.swift */,
|
||||
EAB1D29928A5611D00DAE764 /* SelectorGroupModelable.swift */,
|
||||
EA89201028B567B5006B9984 /* SelectorGroupModelHandlerable.swift */,
|
||||
EA3361C8289054C50071C351 /* Surfaceable.swift */,
|
||||
EA3361B7288B2AAA0071C351 /* ViewProtocol.swift */,
|
||||
EAB1D2CC28ABE76000DAE764 /* Withable.swift */,
|
||||
@ -350,6 +349,7 @@
|
||||
EAF7F09D289AAEC000B287F5 /* Constants.swift */,
|
||||
EA3361B5288B2A410071C351 /* Control.swift */,
|
||||
EAF7F09F289AB7EC00B287F5 /* View.swift */,
|
||||
EA4DB18428CA967F00103EE3 /* SelectorGroupHandlerBase.swift */,
|
||||
);
|
||||
path = Classes;
|
||||
sourceTree = "<group>";
|
||||
@ -593,7 +593,6 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
EAF7F0B5289C126F00B287F5 /* UILabel.swift in Sources */,
|
||||
EA89201128B567B5006B9984 /* SelectorGroupModelHandlerable.swift in Sources */,
|
||||
EAF7F0A6289B0CE000B287F5 /* Resetable.swift in Sources */,
|
||||
EA89200428AECF4B006B9984 /* UITextField+Publisher.swift in Sources */,
|
||||
EA3361C328902D960071C351 /* Toggle.swift in Sources */,
|
||||
@ -640,6 +639,7 @@
|
||||
EAF7F09E289AAEC000B287F5 /* Constants.swift in Sources */,
|
||||
EA1F266528B945070033E859 /* RadioSwatch.swift in Sources */,
|
||||
EA3361B3288B265D0071C351 /* Changable.swift in Sources */,
|
||||
EA4DB18528CA967F00103EE3 /* SelectorGroupHandlerBase.swift in Sources */,
|
||||
EA89200228AECF2A006B9984 /* UIButton+Publisher.swift in Sources */,
|
||||
EAF7F0AB289B13FD00B287F5 /* LabelAttributeFont.swift in Sources */,
|
||||
EAB1D29C28A5618900DAE764 /* RadioButtonGroup.swift in Sources */,
|
||||
|
||||
@ -1,29 +1,43 @@
|
||||
//
|
||||
// SelectorGroupHandlerable.swift
|
||||
// SelectorGroupHandlerBase.swift
|
||||
// VDS
|
||||
//
|
||||
// Created by Matt Bruce on 8/23/22.
|
||||
// Created by Matt Bruce on 9/8/22.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import UIKit
|
||||
|
||||
///MARK: Groups that allow anything selected
|
||||
public protocol SelectorGroupModelHandlerable: ModelHandlerable, Disabling, Surfaceable where ModelType: SelectorGroupModelable {
|
||||
associatedtype ModelHandlerType: ModelHandlerable where ModelType.SelectorModelType == ModelHandlerType.ModelType, ModelHandlerType: UIControl
|
||||
var selectorViews: [ModelHandlerType] { get set }
|
||||
func didSelect(_ selectedControl: ModelHandlerType)
|
||||
func createModelHandler(selector: ModelHandlerType.ModelType) -> ModelHandlerType
|
||||
}
|
||||
public class SelectorGroupHandlerBase<GroupModelType: SelectorGroupModelable, ModelHandlerType: ModelHandlerable & UIControl>: Control<GroupModelType>, Changable where GroupModelType.SelectorModelType == ModelHandlerType.ModelType {
|
||||
|
||||
extension SelectorGroupModelHandlerable {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
public var selectorViews: [ModelHandlerType] = []
|
||||
|
||||
public var onChange: Blocks.ActionBlock?
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Overrides
|
||||
//--------------------------------------------------
|
||||
override public var disabled: Bool {
|
||||
didSet {
|
||||
updateSelectors()
|
||||
}
|
||||
}
|
||||
|
||||
override public var surface: Surface {
|
||||
didSet {
|
||||
updateSelectors()
|
||||
}
|
||||
}
|
||||
|
||||
public func findSelectorView(inputId: String?) -> ModelHandlerType? {
|
||||
return selectorViews.first(where: { existingSelectorView in
|
||||
return existingSelectorView.model.inputId == inputId
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
public func updateSelectors(){
|
||||
let selectors = model.selectors.compactMap { existing in
|
||||
return existing.copyWith {
|
||||
@ -55,7 +69,7 @@ extension SelectorGroupModelHandlerable {
|
||||
public func createModelHandler(selector: ModelHandlerType.ModelType) -> ModelHandlerType {
|
||||
//create view
|
||||
let newSelectorView = ModelHandlerType(with: selector)
|
||||
|
||||
|
||||
//add model update to the subscribers
|
||||
newSelectorView.handlerPublisher()
|
||||
.sink { [weak self] model in
|
||||
@ -72,18 +86,19 @@ extension SelectorGroupModelHandlerable {
|
||||
self?.didSelect(control)
|
||||
}
|
||||
.store(in: &subscribers)
|
||||
|
||||
|
||||
return newSelectorView
|
||||
|
||||
|
||||
}
|
||||
|
||||
open func didSelect(_ selectedControl: ModelHandlerType) {
|
||||
fatalError("Must override didSelect")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
///MARK: Groups that allow single selections
|
||||
public protocol SelectorGroupSelectedModelHandlerable: SelectorGroupModelHandlerable where ModelType: SelectorGroupSelectedModelable { }
|
||||
public class SelectorGroupSelectedHandlerBase<GroupModelType: SelectorGroupSelectedModelable, ModelHandlerType: ModelHandlerable & UIControl>: SelectorGroupHandlerBase<GroupModelType, ModelHandlerType> where GroupModelType.SelectorModelType == ModelHandlerType.ModelType {
|
||||
|
||||
extension SelectorGroupSelectedModelHandlerable {
|
||||
|
||||
public var selectedModel: ModelHandlerType.ModelType? {
|
||||
return model.selectedModel
|
||||
}
|
||||
@ -95,67 +95,3 @@ public class CheckboxGroupBase<GroupModelType: CheckboxGroupModel, ModelHandlerT
|
||||
}
|
||||
}
|
||||
|
||||
public class SelectorGroupHandlerBase<GroupModelType: SelectorGroupModelable, ModelHandlerType: ModelHandlerable & UIControl>: Control<GroupModelType>, SelectorGroupModelHandlerable, Changable where GroupModelType.SelectorModelType == ModelHandlerType.ModelType {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
public var selectorViews: [ModelHandlerType] = []
|
||||
|
||||
public var onChange: Blocks.ActionBlock?
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Overrides
|
||||
//--------------------------------------------------
|
||||
override public var disabled: Bool {
|
||||
didSet {
|
||||
updateSelectors()
|
||||
}
|
||||
}
|
||||
|
||||
override public var surface: Surface {
|
||||
didSet {
|
||||
updateSelectors()
|
||||
}
|
||||
}
|
||||
|
||||
public func findSelectorView(inputId: String?) -> ModelHandlerType? {
|
||||
return selectorViews.first(where: { existingSelectorView in
|
||||
return existingSelectorView.model.inputId == inputId
|
||||
})
|
||||
}
|
||||
|
||||
public func updateSelectors(){
|
||||
let selectors = model.selectors.compactMap { existing in
|
||||
return existing.copyWith {
|
||||
$0.disabled = disabled
|
||||
$0.surface = surface
|
||||
}
|
||||
}
|
||||
model.selectors = selectors
|
||||
}
|
||||
|
||||
public func getCachedSelector(viewModel: ModelHandlerType.ModelType) -> ModelHandlerType.ModelType? {
|
||||
if let index = model.selectors.firstIndex(where: { element in
|
||||
return element.inputId == viewModel.inputId
|
||||
}) {
|
||||
return model.selectors[index]
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
public func replace(viewModel: ModelHandlerType.ModelType){
|
||||
if let index = model.selectors.firstIndex(where: { element in
|
||||
return element.inputId == viewModel.inputId
|
||||
}) {
|
||||
model.selectors[index] = viewModel
|
||||
}
|
||||
}
|
||||
|
||||
public func didSelect(_ selectedControl: ModelHandlerType) {
|
||||
fatalError("Must override didSelect")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ import UIKit
|
||||
|
||||
public class RadioBoxGroup: RadioBoxGroupBase<DefaultRadioBoxGroupModel, RadioBox> {
|
||||
|
||||
public override func didSelect(_ selectedControl: ModelHandlerType) {
|
||||
public override func didSelect(_ selectedControl: RadioBox) {
|
||||
for (index, control) in selectorViews.enumerated() {
|
||||
//only change the old and new
|
||||
if control == selectedControl {
|
||||
@ -31,7 +31,7 @@ public class RadioBoxGroup: RadioBoxGroupBase<DefaultRadioBoxGroupModel, RadioBo
|
||||
}
|
||||
}
|
||||
|
||||
public class RadioBoxGroupBase<GroupModelType: RadioBoxGroupModel, ModelHandlerType: ModelHandlerable & UIControl>: SelectorGroupSelectedHandlerBase<GroupModelType, ModelHandlerType>, SelectorGroupSelectedModelHandlerable where GroupModelType.SelectorModelType == ModelHandlerType.ModelType {
|
||||
public class RadioBoxGroupBase<GroupModelType: RadioBoxGroupModel, ModelHandlerType: ModelHandlerable & UIControl>: SelectorGroupSelectedHandlerBase<GroupModelType, ModelHandlerType> where GroupModelType.SelectorModelType == ModelHandlerType.ModelType {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Private Properties
|
||||
@ -105,4 +105,5 @@ public class RadioBoxGroupBase<GroupModelType: RadioBoxGroupModel, ModelHandlerT
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -10,7 +10,7 @@ import UIKit
|
||||
|
||||
public class RadioButtonGroup: RadioButtonGroupBase<DefaultRadioButtonGroupModel, RadioButton> {
|
||||
|
||||
public override func didSelect(_ selectedControl: ModelHandlerType) {
|
||||
public override func didSelect(_ selectedControl: RadioButton) {
|
||||
for (index, control) in selectorViews.enumerated() {
|
||||
//only change the old and new
|
||||
if control == selectedControl {
|
||||
@ -34,7 +34,7 @@ public class RadioButtonGroup: RadioButtonGroupBase<DefaultRadioButtonGroupModel
|
||||
}
|
||||
}
|
||||
|
||||
public class RadioButtonGroupBase<GroupModelType: RadioButtonGroupModel, ModelHandlerType: ModelHandlerable & UIControl>: SelectorGroupSelectedHandlerBase<GroupModelType, ModelHandlerType>, SelectorGroupSelectedModelHandlerable where GroupModelType.SelectorModelType == ModelHandlerType.ModelType {
|
||||
public class RadioButtonGroupBase<GroupModelType: RadioButtonGroupModel, ModelHandlerType: ModelHandlerable & UIControl>: SelectorGroupSelectedHandlerBase<GroupModelType, ModelHandlerType> where GroupModelType.SelectorModelType == ModelHandlerType.ModelType {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
@ -110,10 +110,3 @@ public class RadioButtonGroupBase<GroupModelType: RadioButtonGroupModel, ModelHa
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class SelectorGroupSelectedHandlerBase<GroupModelType: SelectorGroupSelectedModelable, ModelHandlerType: ModelHandlerable & UIControl>: SelectorGroupHandlerBase<GroupModelType, ModelHandlerType> where GroupModelType.SelectorModelType == ModelHandlerType.ModelType {
|
||||
|
||||
public var selectedModel: ModelHandlerType.ModelType? {
|
||||
return model.selectedModel
|
||||
}
|
||||
}
|
||||
|
||||
@ -214,6 +214,6 @@ public class RadioSwatchGroupBase<GroupModelType: RadioSwatchGroupModel, ModelHa
|
||||
}
|
||||
|
||||
open func didSelect(selector: ModelHandlerType.ModelType) {
|
||||
//override to do functionality
|
||||
fatalError("Must override didSelect")
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user