refactored to selector group base and pulled out models
This commit is contained in:
parent
036d9462a8
commit
b0ae07fd69
@ -38,7 +38,8 @@
|
|||||||
EA3362452892F9130071C351 /* Labelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3362442892F9130071C351 /* Labelable.swift */; };
|
EA3362452892F9130071C351 /* Labelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3362442892F9130071C351 /* Labelable.swift */; };
|
||||||
EA33624728931B050071C351 /* Initable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA33624628931B050071C351 /* Initable.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 */; };
|
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 */; };
|
EAF7F0952899861000B287F5 /* Checkbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0932899861000B287F5 /* Checkbox.swift */; };
|
||||||
EAF7F0962899861000B287F5 /* CheckboxModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0942899861000B287F5 /* CheckboxModel.swift */; };
|
EAF7F0962899861000B287F5 /* CheckboxModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0942899861000B287F5 /* CheckboxModel.swift */; };
|
||||||
EAF7F09A2899B17200B287F5 /* CATransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0992899B17200B287F5 /* CATransaction.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 = "<group>"; };
|
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>"; };
|
EA33624628931B050071C351 /* Initable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Initable.swift; sourceTree = "<group>"; };
|
||||||
EA3C3B4B2894823E000CA526 /* AnyProxy-PropertyWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AnyProxy-PropertyWrapper.swift"; sourceTree = "<group>"; };
|
EA3C3B4B2894823E000CA526 /* AnyProxy-PropertyWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AnyProxy-PropertyWrapper.swift"; sourceTree = "<group>"; };
|
||||||
|
EAB1D29928A5611D00DAE764 /* SelectorGroupModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorGroupModel.swift; sourceTree = "<group>"; };
|
||||||
EAF7F0932899861000B287F5 /* Checkbox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Checkbox.swift; sourceTree = "<group>"; };
|
EAF7F0932899861000B287F5 /* Checkbox.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Checkbox.swift; sourceTree = "<group>"; };
|
||||||
EAF7F0942899861000B287F5 /* CheckboxModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckboxModel.swift; sourceTree = "<group>"; };
|
EAF7F0942899861000B287F5 /* CheckboxModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckboxModel.swift; sourceTree = "<group>"; };
|
||||||
EAF7F0992899B17200B287F5 /* CATransaction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CATransaction.swift; sourceTree = "<group>"; };
|
EAF7F0992899B17200B287F5 /* CATransaction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CATransaction.swift; sourceTree = "<group>"; };
|
||||||
@ -141,7 +143,7 @@
|
|||||||
EAF7F11628A1475A00B287F5 /* RadioButtonModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadioButtonModel.swift; sourceTree = "<group>"; };
|
EAF7F11628A1475A00B287F5 /* RadioButtonModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadioButtonModel.swift; sourceTree = "<group>"; };
|
||||||
EAF7F12B28A1617600B287F5 /* SelectorBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorBase.swift; sourceTree = "<group>"; };
|
EAF7F12B28A1617600B287F5 /* SelectorBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorBase.swift; sourceTree = "<group>"; };
|
||||||
EAF7F12E28A1619600B287F5 /* SelectorModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorModel.swift; sourceTree = "<group>"; };
|
EAF7F12E28A1619600B287F5 /* SelectorModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorModel.swift; sourceTree = "<group>"; };
|
||||||
EAF7F13028A17FAB00B287F5 /* SelectorGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorGroup.swift; sourceTree = "<group>"; };
|
EAF7F13028A17FAB00B287F5 /* SelectorGroupBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectorGroupBase.swift; sourceTree = "<group>"; };
|
||||||
EAF7F13228A2A16500B287F5 /* LabelAttributeAttachment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelAttributeAttachment.swift; sourceTree = "<group>"; };
|
EAF7F13228A2A16500B287F5 /* LabelAttributeAttachment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelAttributeAttachment.swift; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
@ -231,7 +233,7 @@
|
|||||||
EAF7F092289985E200B287F5 /* Checkbox */,
|
EAF7F092289985E200B287F5 /* Checkbox */,
|
||||||
EA3361A0288B1E6F0071C351 /* Toggle */,
|
EA3361A0288B1E6F0071C351 /* Toggle */,
|
||||||
EA3362412892EF700071C351 /* Label */,
|
EA3362412892EF700071C351 /* Label */,
|
||||||
EAF7F12D28A1617A00B287F5 /* SelectorBase */,
|
EAF7F12D28A1617A00B287F5 /* Selector */,
|
||||||
);
|
);
|
||||||
path = Components;
|
path = Components;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -371,14 +373,15 @@
|
|||||||
path = RadioButton;
|
path = RadioButton;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
EAF7F12D28A1617A00B287F5 /* SelectorBase */ = {
|
EAF7F12D28A1617A00B287F5 /* Selector */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
EAF7F12B28A1617600B287F5 /* SelectorBase.swift */,
|
|
||||||
EAF7F13028A17FAB00B287F5 /* SelectorGroup.swift */,
|
|
||||||
EAF7F12E28A1619600B287F5 /* SelectorModel.swift */,
|
EAF7F12E28A1619600B287F5 /* SelectorModel.swift */,
|
||||||
|
EAF7F12B28A1617600B287F5 /* SelectorBase.swift */,
|
||||||
|
EAB1D29928A5611D00DAE764 /* SelectorGroupModel.swift */,
|
||||||
|
EAF7F13028A17FAB00B287F5 /* SelectorGroupBase.swift */,
|
||||||
);
|
);
|
||||||
path = SelectorBase;
|
path = Selector;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
@ -497,7 +500,7 @@
|
|||||||
EA3362322891F2ED0071C351 /* FontStyles.swift in Sources */,
|
EA3362322891F2ED0071C351 /* FontStyles.swift in Sources */,
|
||||||
EAF7F0B5289C126F00B287F5 /* UILabel.swift in Sources */,
|
EAF7F0B5289C126F00B287F5 /* UILabel.swift in Sources */,
|
||||||
EAF7F0A6289B0CE000B287F5 /* Resetable.swift in Sources */,
|
EAF7F0A6289B0CE000B287F5 /* Resetable.swift in Sources */,
|
||||||
EAB1D29428A3ECF700DAE764 /* SelectorGroup.swift in Sources */,
|
EAB1D29428A3ECF700DAE764 /* SelectorGroupBase.swift in Sources */,
|
||||||
EA3361C328902D960071C351 /* Toggle.swift in Sources */,
|
EA3361C328902D960071C351 /* Toggle.swift in Sources */,
|
||||||
EAF7F12C28A1617600B287F5 /* SelectorBase.swift in Sources */,
|
EAF7F12C28A1617600B287F5 /* SelectorBase.swift in Sources */,
|
||||||
EAF7F0A0289AB7EC00B287F5 /* View.swift in Sources */,
|
EAF7F0A0289AB7EC00B287F5 /* View.swift in Sources */,
|
||||||
@ -524,6 +527,7 @@
|
|||||||
EAF7F0A2289AFB3900B287F5 /* Errorable.swift in Sources */,
|
EAF7F0A2289AFB3900B287F5 /* Errorable.swift in Sources */,
|
||||||
EA3C3B4C2894823E000CA526 /* AnyProxy-PropertyWrapper.swift in Sources */,
|
EA3C3B4C2894823E000CA526 /* AnyProxy-PropertyWrapper.swift in Sources */,
|
||||||
EA3361AF288B26310071C351 /* FormFieldable.swift in Sources */,
|
EA3361AF288B26310071C351 /* FormFieldable.swift in Sources */,
|
||||||
|
EAB1D29A28A5611D00DAE764 /* SelectorGroupModel.swift in Sources */,
|
||||||
EAF7F0A8289B119400B287F5 /* Fontable.swift in Sources */,
|
EAF7F0A8289B119400B287F5 /* Fontable.swift in Sources */,
|
||||||
EAF7F0BB289D80ED00B287F5 /* Modelable.swift in Sources */,
|
EAF7F0BB289D80ED00B287F5 /* Modelable.swift in Sources */,
|
||||||
EAF7F09E289AAEC000B287F5 /* Constants.swift in Sources */,
|
EAF7F09E289AAEC000B287F5 /* Constants.swift in Sources */,
|
||||||
|
|||||||
@ -26,7 +26,7 @@ public struct RadioButtonGroupModel: SelectorGroupModel{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RadioButtonGroup: SelectorGroup<DefaultRadioButtonModel, RadioButtonGroupModel, RadioButton> {
|
public class RadioButtonGroup: SelectorGroupBase<DefaultRadioButtonModel, RadioButtonGroupModel, RadioButton> {
|
||||||
|
|
||||||
public override func didSelect(selected: DefaultRadioButtonModel) {
|
public override func didSelect(selected: DefaultRadioButtonModel) {
|
||||||
for selectorModel in model.selectors {
|
for selectorModel in model.selectors {
|
||||||
|
|||||||
@ -9,25 +9,7 @@ import Foundation
|
|||||||
import UIKit
|
import UIKit
|
||||||
import Combine
|
import Combine
|
||||||
|
|
||||||
public protocol SelectorGroupModel<SelectorType>: Modelable, FormFieldable {
|
open class SelectorGroupBase<SelectorType, SelectorGroupType: SelectorGroupModel<SelectorType>, SelectorHandlerType: SelectorBase<SelectorType>>: View<SelectorGroupType>, Changable {
|
||||||
associatedtype SelectorType: SelectorModel
|
|
||||||
var selectors: [SelectorType] { get set }
|
|
||||||
}
|
|
||||||
|
|
||||||
public struct DefaultSelectorGroupModel<SelectorType: SelectorModel>: 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<SelectorType, SelectorGroupType: SelectorGroupModel<SelectorType>, SelectorHandlerType: SelectorBase<SelectorType>>: View<SelectorGroupType>, Changable {
|
|
||||||
|
|
||||||
public var selectorViews: [SelectorHandlerType] = []
|
public var selectorViews: [SelectorHandlerType] = []
|
||||||
public var selectedModel: SelectorType?
|
public var selectedModel: SelectorType?
|
||||||
@ -89,15 +71,15 @@ open class SelectorGroup<SelectorType, SelectorGroupType: SelectorGroupModel<Sel
|
|||||||
|
|
||||||
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(id: UUID) -> SelectorHandlerType? {
|
||||||
return selectorViews.first(where: { existingSelectorView in
|
return selectorViews.first(where: { existingSelectorView in
|
||||||
return existingSelectorView.model.inputId == inputId
|
return existingSelectorView.model.id == id
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
for selectorModel in viewModel.selectors {
|
for selectorModel in viewModel.selectors {
|
||||||
//see if view is there for the model
|
//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)
|
foundSelectorView.set(with: selectorModel)
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
26
VDS/Components/Selector/SelectorGroupModel.swift
Normal file
26
VDS/Components/Selector/SelectorGroupModel.swift
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
//
|
||||||
|
// SelectorGroupModel.swift
|
||||||
|
// VDS
|
||||||
|
//
|
||||||
|
// Created by Matt Bruce on 8/11/22.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
public protocol SelectorGroupModel<SelectorType>: Modelable, FormFieldable {
|
||||||
|
associatedtype SelectorType: SelectorModel
|
||||||
|
var selectors: [SelectorType] { get set }
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct DefaultSelectorGroupModel<SelectorType: SelectorModel>: 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
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user