From 71b020cb3f6da1610b3597dc586933d3a22417f7 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 8 Sep 2022 16:38:46 -0500 Subject: [PATCH] refactored more of the groups to remove protocol Signed-off-by: Matt Bruce --- VDS.xcodeproj/project.pbxproj | 8 +-- .../SelectorGroupHandlerBase.swift} | 51 +++++++++------ VDS/Components/Checkbox/CheckboxGroup.swift | 64 ------------------- VDS/Components/RadioBox/RadioBoxGroup.swift | 5 +- .../RadioButton/RadioButtonGroup.swift | 11 +--- .../RadioSwatch/RadioSwatchGroup.swift | 2 +- 6 files changed, 43 insertions(+), 98 deletions(-) rename VDS/{Protocols/SelectorGroupModelHandlerable.swift => Classes/SelectorGroupHandlerBase.swift} (62%) diff --git a/VDS.xcodeproj/project.pbxproj b/VDS.xcodeproj/project.pbxproj index bf869a43..4008e563 100644 --- a/VDS.xcodeproj/project.pbxproj +++ b/VDS.xcodeproj/project.pbxproj @@ -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 = ""; }; EA33624628931B050071C351 /* Initable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Initable.swift; sourceTree = ""; }; EA3C3B4B2894823E000CA526 /* AnyProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyProxy.swift; sourceTree = ""; }; + EA4DB18428CA967F00103EE3 /* SelectorGroupHandlerBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorGroupHandlerBase.swift; sourceTree = ""; }; EA84F6B028B94A2500D67ABC /* CodableColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CodableColor.swift; sourceTree = ""; }; EA89200128AECF2A006B9984 /* UIButton+Publisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIButton+Publisher.swift"; sourceTree = ""; }; EA89200328AECF4B006B9984 /* UITextField+Publisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITextField+Publisher.swift"; sourceTree = ""; }; @@ -148,7 +149,6 @@ EA89200728B526E0006B9984 /* CheckboxGroupModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckboxGroupModel.swift; sourceTree = ""; }; EA89200C28B530FD006B9984 /* RadioBoxModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioBoxModel.swift; sourceTree = ""; }; EA89200E28B53921006B9984 /* Selectable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Selectable.swift; sourceTree = ""; }; - EA89201028B567B5006B9984 /* SelectorGroupModelHandlerable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorGroupModelHandlerable.swift; sourceTree = ""; }; EA89201228B568D8006B9984 /* RadioBox.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioBox.swift; sourceTree = ""; }; EA89201428B56CF4006B9984 /* RadioBoxGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioBoxGroup.swift; sourceTree = ""; }; EA89201628B56CFF006B9984 /* RadioBoxGroupModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioBoxGroupModel.swift; sourceTree = ""; }; @@ -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 = ""; @@ -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 */, diff --git a/VDS/Protocols/SelectorGroupModelHandlerable.swift b/VDS/Classes/SelectorGroupHandlerBase.swift similarity index 62% rename from VDS/Protocols/SelectorGroupModelHandlerable.swift rename to VDS/Classes/SelectorGroupHandlerBase.swift index 447333f4..e38a7119 100644 --- a/VDS/Protocols/SelectorGroupModelHandlerable.swift +++ b/VDS/Classes/SelectorGroupHandlerBase.swift @@ -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: Control, 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: SelectorGroupHandlerBase where GroupModelType.SelectorModelType == ModelHandlerType.ModelType { -extension SelectorGroupSelectedModelHandlerable { - public var selectedModel: ModelHandlerType.ModelType? { return model.selectedModel } diff --git a/VDS/Components/Checkbox/CheckboxGroup.swift b/VDS/Components/Checkbox/CheckboxGroup.swift index 50e6a5f4..9071b962 100644 --- a/VDS/Components/Checkbox/CheckboxGroup.swift +++ b/VDS/Components/Checkbox/CheckboxGroup.swift @@ -95,67 +95,3 @@ public class CheckboxGroupBase: Control, 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") - } - -} - diff --git a/VDS/Components/RadioBox/RadioBoxGroup.swift b/VDS/Components/RadioBox/RadioBoxGroup.swift index 35fff0b0..1a1b8226 100644 --- a/VDS/Components/RadioBox/RadioBoxGroup.swift +++ b/VDS/Components/RadioBox/RadioBoxGroup.swift @@ -10,7 +10,7 @@ import UIKit public class RadioBoxGroup: RadioBoxGroupBase { - 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: SelectorGroupSelectedHandlerBase, SelectorGroupSelectedModelHandlerable where GroupModelType.SelectorModelType == ModelHandlerType.ModelType { +public class RadioBoxGroupBase: SelectorGroupSelectedHandlerBase where GroupModelType.SelectorModelType == ModelHandlerType.ModelType { //-------------------------------------------------- // MARK: - Private Properties @@ -105,4 +105,5 @@ public class RadioBoxGroupBase { - 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: SelectorGroupSelectedHandlerBase, SelectorGroupSelectedModelHandlerable where GroupModelType.SelectorModelType == ModelHandlerType.ModelType { +public class RadioButtonGroupBase: SelectorGroupSelectedHandlerBase where GroupModelType.SelectorModelType == ModelHandlerType.ModelType { //-------------------------------------------------- // MARK: - Public Properties @@ -110,10 +110,3 @@ public class RadioButtonGroupBase: SelectorGroupHandlerBase where GroupModelType.SelectorModelType == ModelHandlerType.ModelType { - - public var selectedModel: ModelHandlerType.ModelType? { - return model.selectedModel - } -} diff --git a/VDS/Components/RadioSwatch/RadioSwatchGroup.swift b/VDS/Components/RadioSwatch/RadioSwatchGroup.swift index 7fef37b5..2bacae90 100644 --- a/VDS/Components/RadioSwatch/RadioSwatchGroup.swift +++ b/VDS/Components/RadioSwatch/RadioSwatchGroup.swift @@ -214,6 +214,6 @@ public class RadioSwatchGroupBase