From 8e4d4d6deddb438e9953567830e0b5ba7b12f345 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 11 Aug 2022 11:56:11 -0500 Subject: [PATCH] refactored radio button Signed-off-by: Matt Bruce --- VDS.xcodeproj/project.pbxproj | 8 ++++ VDS/Components/RadioButton/RadioButton.swift | 40 ------------------- .../RadioButton/RadioButtonGroup.swift | 36 +++++++++++++++++ .../RadioButton/RadioButtonGroupModel.swift | 22 ++++++++++ .../Selector/SelectorGroupBase.swift | 2 +- 5 files changed, 67 insertions(+), 41 deletions(-) create mode 100644 VDS/Components/RadioButton/RadioButtonGroup.swift create mode 100644 VDS/Components/RadioButton/RadioButtonGroupModel.swift diff --git a/VDS.xcodeproj/project.pbxproj b/VDS.xcodeproj/project.pbxproj index d4baba09..9f769991 100644 --- a/VDS.xcodeproj/project.pbxproj +++ b/VDS.xcodeproj/project.pbxproj @@ -40,6 +40,8 @@ EA3C3B4C2894823E000CA526 /* AnyProxy-PropertyWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3C3B4B2894823E000CA526 /* AnyProxy-PropertyWrapper.swift */; }; EAB1D29428A3ECF700DAE764 /* SelectorGroupBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F13028A17FAB00B287F5 /* SelectorGroupBase.swift */; }; EAB1D29A28A5611D00DAE764 /* SelectorGroupModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAB1D29928A5611D00DAE764 /* SelectorGroupModel.swift */; }; + EAB1D29C28A5618900DAE764 /* RadioButtonGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAB1D29B28A5618900DAE764 /* RadioButtonGroup.swift */; }; + EAB1D29E28A5619500DAE764 /* RadioButtonGroupModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAB1D29D28A5619500DAE764 /* RadioButtonGroupModel.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 */; }; @@ -116,6 +118,8 @@ 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 = ""; }; + EAB1D29B28A5618900DAE764 /* RadioButtonGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioButtonGroup.swift; sourceTree = ""; }; + EAB1D29D28A5619500DAE764 /* RadioButtonGroupModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioButtonGroupModel.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 = ""; }; @@ -369,6 +373,8 @@ children = ( EAF7F11528A1475A00B287F5 /* RadioButton.swift */, EAF7F11628A1475A00B287F5 /* RadioButtonModel.swift */, + EAB1D29B28A5618900DAE764 /* RadioButtonGroup.swift */, + EAB1D29D28A5619500DAE764 /* RadioButtonGroupModel.swift */, ); path = RadioButton; sourceTree = ""; @@ -524,6 +530,7 @@ EAF7F0B9289C139800B287F5 /* ColorConfiguration.swift in Sources */, EA3361BD288B2C760071C351 /* TypeAlias.swift in Sources */, EAF7F09A2899B17200B287F5 /* CATransaction.swift in Sources */, + EAB1D29E28A5619500DAE764 /* RadioButtonGroupModel.swift in Sources */, EAF7F0A2289AFB3900B287F5 /* Errorable.swift in Sources */, EA3C3B4C2894823E000CA526 /* AnyProxy-PropertyWrapper.swift in Sources */, EA3361AF288B26310071C351 /* FormFieldable.swift in Sources */, @@ -533,6 +540,7 @@ EAF7F09E289AAEC000B287F5 /* Constants.swift in Sources */, EA3361B3288B265D0071C351 /* Changable.swift in Sources */, EAF7F0AB289B13FD00B287F5 /* LabelAttributeFont.swift in Sources */, + EAB1D29C28A5618900DAE764 /* RadioButtonGroup.swift in Sources */, EA336171288B19200071C351 /* VDS.docc in Sources */, EAF7F0962899861000B287F5 /* CheckboxModel.swift in Sources */, EA3361AA288B25E40071C351 /* Disabling.swift in Sources */, diff --git a/VDS/Components/RadioButton/RadioButton.swift b/VDS/Components/RadioButton/RadioButton.swift index dae694aa..19ac376e 100644 --- a/VDS/Components/RadioButton/RadioButton.swift +++ b/VDS/Components/RadioButton/RadioButton.swift @@ -12,46 +12,6 @@ import VDSFormControlsTokens public class RadioButton: RadioButtonBase{} -public struct RadioButtonGroupModel: SelectorGroupModel{ - public typealias SelectorType = DefaultRadioButtonModel - 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 - } -} - -public class RadioButtonGroup: SelectorGroupBase { - - public override func didSelect(selected: DefaultRadioButtonModel) { - for selectorModel in model.selectors { - print("Pre Cached Selector: \(selectorModel.inputId): \(selectorModel.selected)") - } - - if var oldSelectedModel = selectedModel { - oldSelectedModel.selected = false - replace(viewModel: oldSelectedModel) - } - - var newSelectedModel = selected - newSelectedModel.selected = true - replace(viewModel: newSelectedModel) - - selectedModel = newSelectedModel - - for selectorModel in model.selectors { - print("Post Cached Selector: \(selectorModel.inputId): \(selectorModel.selected)") - } - - print("\n") - } -} - open class RadioButtonBase: SelectorBase { //-------------------------------------------------- diff --git a/VDS/Components/RadioButton/RadioButtonGroup.swift b/VDS/Components/RadioButton/RadioButtonGroup.swift new file mode 100644 index 00000000..0e7a2acc --- /dev/null +++ b/VDS/Components/RadioButton/RadioButtonGroup.swift @@ -0,0 +1,36 @@ +// +// RadioButtonGroup.swift +// VDS +// +// Created by Matt Bruce on 8/11/22. +// + +import Foundation + +public class RadioButtonGroup: RadioButtonGroupBase {} + +public class RadioButtonGroupBase>: SelectorGroupBase { + + public override func didSelect(selected: RadioButtonGroupModelType.SelectorType) { + for selectorModel in model.selectors { + print("Pre Cached Selector: \(selectorModel.inputId): \(selectorModel.selected)") + } + + if var oldSelectedModel = selectedModel { + oldSelectedModel.selected = false + replace(viewModel: oldSelectedModel) + } + + var newSelectedModel = selected + newSelectedModel.selected = true + replace(viewModel: newSelectedModel) + + selectedModel = newSelectedModel + + for selectorModel in model.selectors { + print("Post Cached Selector: \(selectorModel.inputId): \(selectorModel.selected)") + } + + print("\n") + } +} diff --git a/VDS/Components/RadioButton/RadioButtonGroupModel.swift b/VDS/Components/RadioButton/RadioButtonGroupModel.swift new file mode 100644 index 00000000..8cb5d2db --- /dev/null +++ b/VDS/Components/RadioButton/RadioButtonGroupModel.swift @@ -0,0 +1,22 @@ +// +// RadioButtonGroupModel.swift +// VDS +// +// Created by Matt Bruce on 8/11/22. +// + +import Foundation + +public struct DefaultRadioButtonGroupModel: SelectorGroupModel{ + public typealias SelectorType = DefaultRadioButtonModel + 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/Selector/SelectorGroupBase.swift b/VDS/Components/Selector/SelectorGroupBase.swift index b1d13d9e..bf1e061d 100644 --- a/VDS/Components/Selector/SelectorGroupBase.swift +++ b/VDS/Components/Selector/SelectorGroupBase.swift @@ -9,7 +9,7 @@ import Foundation import UIKit import Combine -open class SelectorGroupBase, SelectorHandlerType: SelectorBase>: View, Changable { +open class SelectorGroupBase>: View, Changable where SelectorType == SelectorGroupType.SelectorType { public var selectorViews: [SelectorHandlerType] = [] public var selectedModel: SelectorType?