From b0ae07fd69df46778ca3e25acfdf963379492b69 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 11 Aug 2022 11:10:09 -0500 Subject: [PATCH] refactored to selector group base and pulled out models --- VDS.xcodeproj/project.pbxproj | 20 ++++++++------ VDS/Components/RadioButton/RadioButton.swift | 2 +- .../SelectorBase.swift | 0 .../SelectorGroupBase.swift} | 26 +++---------------- .../Selector/SelectorGroupModel.swift | 26 +++++++++++++++++++ .../SelectorModel.swift | 0 6 files changed, 43 insertions(+), 31 deletions(-) rename VDS/Components/{SelectorBase => Selector}/SelectorBase.swift (100%) rename VDS/Components/{SelectorBase/SelectorGroup.swift => Selector/SelectorGroupBase.swift} (79%) create mode 100644 VDS/Components/Selector/SelectorGroupModel.swift rename VDS/Components/{SelectorBase => Selector}/SelectorModel.swift (100%) diff --git a/VDS.xcodeproj/project.pbxproj b/VDS.xcodeproj/project.pbxproj index 81afa155..d4baba09 100644 --- a/VDS.xcodeproj/project.pbxproj +++ b/VDS.xcodeproj/project.pbxproj @@ -38,7 +38,8 @@ EA3362452892F9130071C351 /* Labelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3362442892F9130071C351 /* Labelable.swift */; }; EA33624728931B050071C351 /* Initable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA33624628931B050071C351 /* Initable.swift */; }; EA3C3B4C2894823E000CA526 /* AnyProxy-PropertyWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3C3B4B2894823E000CA526 /* AnyProxy-PropertyWrapper.swift */; }; - EAB1D29428A3ECF700DAE764 /* SelectorGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F13028A17FAB00B287F5 /* SelectorGroup.swift */; }; + EAB1D29428A3ECF700DAE764 /* SelectorGroupBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F13028A17FAB00B287F5 /* SelectorGroupBase.swift */; }; + EAB1D29A28A5611D00DAE764 /* SelectorGroupModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAB1D29928A5611D00DAE764 /* SelectorGroupModel.swift */; }; EAF7F0952899861000B287F5 /* Checkbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0932899861000B287F5 /* Checkbox.swift */; }; EAF7F0962899861000B287F5 /* CheckboxModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0942899861000B287F5 /* CheckboxModel.swift */; }; EAF7F09A2899B17200B287F5 /* CATransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0992899B17200B287F5 /* CATransaction.swift */; }; @@ -114,6 +115,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-PropertyWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AnyProxy-PropertyWrapper.swift"; sourceTree = ""; }; + EAB1D29928A5611D00DAE764 /* SelectorGroupModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorGroupModel.swift; sourceTree = ""; }; EAF7F0932899861000B287F5 /* Checkbox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Checkbox.swift; sourceTree = ""; }; EAF7F0942899861000B287F5 /* CheckboxModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckboxModel.swift; sourceTree = ""; }; EAF7F0992899B17200B287F5 /* CATransaction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CATransaction.swift; sourceTree = ""; }; @@ -141,7 +143,7 @@ EAF7F11628A1475A00B287F5 /* RadioButtonModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadioButtonModel.swift; sourceTree = ""; }; EAF7F12B28A1617600B287F5 /* SelectorBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorBase.swift; sourceTree = ""; }; EAF7F12E28A1619600B287F5 /* SelectorModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorModel.swift; sourceTree = ""; }; - EAF7F13028A17FAB00B287F5 /* SelectorGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorGroup.swift; sourceTree = ""; }; + EAF7F13028A17FAB00B287F5 /* SelectorGroupBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorGroupBase.swift; sourceTree = ""; }; EAF7F13228A2A16500B287F5 /* LabelAttributeAttachment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelAttributeAttachment.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -231,7 +233,7 @@ EAF7F092289985E200B287F5 /* Checkbox */, EA3361A0288B1E6F0071C351 /* Toggle */, EA3362412892EF700071C351 /* Label */, - EAF7F12D28A1617A00B287F5 /* SelectorBase */, + EAF7F12D28A1617A00B287F5 /* Selector */, ); path = Components; sourceTree = ""; @@ -371,14 +373,15 @@ path = RadioButton; sourceTree = ""; }; - EAF7F12D28A1617A00B287F5 /* SelectorBase */ = { + EAF7F12D28A1617A00B287F5 /* Selector */ = { isa = PBXGroup; children = ( - EAF7F12B28A1617600B287F5 /* SelectorBase.swift */, - EAF7F13028A17FAB00B287F5 /* SelectorGroup.swift */, EAF7F12E28A1619600B287F5 /* SelectorModel.swift */, + EAF7F12B28A1617600B287F5 /* SelectorBase.swift */, + EAB1D29928A5611D00DAE764 /* SelectorGroupModel.swift */, + EAF7F13028A17FAB00B287F5 /* SelectorGroupBase.swift */, ); - path = SelectorBase; + path = Selector; sourceTree = ""; }; /* End PBXGroup section */ @@ -497,7 +500,7 @@ EA3362322891F2ED0071C351 /* FontStyles.swift in Sources */, EAF7F0B5289C126F00B287F5 /* UILabel.swift in Sources */, EAF7F0A6289B0CE000B287F5 /* Resetable.swift in Sources */, - EAB1D29428A3ECF700DAE764 /* SelectorGroup.swift in Sources */, + EAB1D29428A3ECF700DAE764 /* SelectorGroupBase.swift in Sources */, EA3361C328902D960071C351 /* Toggle.swift in Sources */, EAF7F12C28A1617600B287F5 /* SelectorBase.swift in Sources */, EAF7F0A0289AB7EC00B287F5 /* View.swift in Sources */, @@ -524,6 +527,7 @@ EAF7F0A2289AFB3900B287F5 /* Errorable.swift in Sources */, EA3C3B4C2894823E000CA526 /* AnyProxy-PropertyWrapper.swift in Sources */, EA3361AF288B26310071C351 /* FormFieldable.swift in Sources */, + EAB1D29A28A5611D00DAE764 /* SelectorGroupModel.swift in Sources */, EAF7F0A8289B119400B287F5 /* Fontable.swift in Sources */, EAF7F0BB289D80ED00B287F5 /* Modelable.swift in Sources */, EAF7F09E289AAEC000B287F5 /* Constants.swift in Sources */, diff --git a/VDS/Components/RadioButton/RadioButton.swift b/VDS/Components/RadioButton/RadioButton.swift index 3ef079c4..dae694aa 100644 --- a/VDS/Components/RadioButton/RadioButton.swift +++ b/VDS/Components/RadioButton/RadioButton.swift @@ -26,7 +26,7 @@ public struct RadioButtonGroupModel: SelectorGroupModel{ } } -public class RadioButtonGroup: SelectorGroup { +public class RadioButtonGroup: SelectorGroupBase { public override func didSelect(selected: DefaultRadioButtonModel) { for selectorModel in model.selectors { diff --git a/VDS/Components/SelectorBase/SelectorBase.swift b/VDS/Components/Selector/SelectorBase.swift similarity index 100% rename from VDS/Components/SelectorBase/SelectorBase.swift rename to VDS/Components/Selector/SelectorBase.swift diff --git a/VDS/Components/SelectorBase/SelectorGroup.swift b/VDS/Components/Selector/SelectorGroupBase.swift similarity index 79% rename from VDS/Components/SelectorBase/SelectorGroup.swift rename to VDS/Components/Selector/SelectorGroupBase.swift index b6d18745..b1d13d9e 100644 --- a/VDS/Components/SelectorBase/SelectorGroup.swift +++ b/VDS/Components/Selector/SelectorGroupBase.swift @@ -9,25 +9,7 @@ import Foundation import UIKit import Combine -public protocol SelectorGroupModel: Modelable, FormFieldable { - associatedtype SelectorType: SelectorModel - var selectors: [SelectorType] { get set } -} - -public struct DefaultSelectorGroupModel: SelectorGroupModel { - public var id: UUID = UUID() - public var inputId: String? - public var value: AnyHashable? - public var surface: Surface = .light - public var disabled: Bool = false - public var selectors: [SelectorType] - public init() { selectors = [] } - public init(selectors: [SelectorType]){ - self.selectors = selectors - } -} - -open class SelectorGroup, SelectorHandlerType: SelectorBase>: View, Changable { +open class SelectorGroupBase, SelectorHandlerType: SelectorBase>: View, Changable { public var selectorViews: [SelectorHandlerType] = [] public var selectedModel: SelectorType? @@ -89,15 +71,15 @@ open class SelectorGroup SelectorHandlerType? { + func findSelectorView(id: UUID) -> SelectorHandlerType? { return selectorViews.first(where: { existingSelectorView in - return existingSelectorView.model.inputId == inputId + return existingSelectorView.model.id == id }) } for selectorModel in viewModel.selectors { //see if view is there for the model - if let inputId = selectorModel.inputId, let foundSelectorView = findSelectorView(inputId: inputId) { + if let foundSelectorView = findSelectorView(id: selectorModel.id) { foundSelectorView.set(with: selectorModel) } else { diff --git a/VDS/Components/Selector/SelectorGroupModel.swift b/VDS/Components/Selector/SelectorGroupModel.swift new file mode 100644 index 00000000..e52dfa7c --- /dev/null +++ b/VDS/Components/Selector/SelectorGroupModel.swift @@ -0,0 +1,26 @@ +// +// SelectorGroupModel.swift +// VDS +// +// Created by Matt Bruce on 8/11/22. +// + +import Foundation + +public protocol SelectorGroupModel: Modelable, FormFieldable { + associatedtype SelectorType: SelectorModel + var selectors: [SelectorType] { get set } +} + +public struct DefaultSelectorGroupModel: SelectorGroupModel { + public var id: UUID = UUID() + public var inputId: String? + public var value: AnyHashable? + public var surface: Surface = .light + public var disabled: Bool = false + public var selectors: [SelectorType] + public init() { selectors = [] } + public init(selectors: [SelectorType]){ + self.selectors = selectors + } +} diff --git a/VDS/Components/SelectorBase/SelectorModel.swift b/VDS/Components/Selector/SelectorModel.swift similarity index 100% rename from VDS/Components/SelectorBase/SelectorModel.swift rename to VDS/Components/Selector/SelectorModel.swift