refactored

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2022-10-20 10:55:07 -05:00
parent b485bbf47b
commit 8242cbd9de
10 changed files with 146 additions and 300 deletions

View File

@ -11,7 +11,7 @@ import VDS
import VDSColorTokens import VDSColorTokens
import Combine import Combine
class BadgeViewController: ModelScrollViewController<DefaultBadgeModel> { class BadgeViewController: ModelScrollViewController {
enum NumberOfLines: String, CaseIterable { enum NumberOfLines: String, CaseIterable {
case unlimited case unlimited
@ -93,28 +93,13 @@ class BadgeViewController: ModelScrollViewController<DefaultBadgeModel> {
} }
func setupModel() { func setupModel() {
var defaultModel = DefaultBadgeModel() badge.fillColor = .red
defaultModel.fillColor = .red badge.text = "Terms and conditions"
defaultModel.text = "Terms and conditions" badge.numberOfLines = 1
defaultModel.numberOfLines = 1
set(with: defaultModel)
badge
.handlerPublisher()
.sink { [weak self] viewModel in
self?.model = viewModel
}.store(in: &subscribers)
//setup UI //setup UI
surfacePickerSelectorView.text = model.surface.rawValue surfacePickerSelectorView.text = badge.surface.rawValue
textField.text = model.text textField.text = badge.text
}
override func updateView(viewModel: DefaultBadgeModel) {
print("\(Self.self) updateView(viewModel)")
badge.set(with: viewModel)
} }
func setupPicker(){ func setupPicker(){

View File

@ -10,7 +10,7 @@ import UIKit
import VDS import VDS
import VDSColorTokens import VDSColorTokens
class ButtonViewController: ModelScrollViewController<DefaultButtonModel> { class ButtonViewController: ModelScrollViewController {
lazy var usePickerSelectorView = { lazy var usePickerSelectorView = {
PickerSelectorView<Use>(title: "", PickerSelectorView<Use>(title: "",
@ -77,16 +77,8 @@ class ButtonViewController: ModelScrollViewController<DefaultButtonModel> {
} }
func setupModel() { func setupModel() {
var defaultModel = DefaultButtonModel() button.text = "Button"
defaultModel.text = "Button"
set(with: defaultModel)
button
.handlerPublisher()
.sink { [weak self] viewModel in
self?.model = viewModel
}.store(in: &subscribers)
button button
.publisher(for: .touchUpInside) .publisher(for: .touchUpInside)
.sink { control in .sink { control in
@ -95,17 +87,13 @@ class ButtonViewController: ModelScrollViewController<DefaultButtonModel> {
//setup UI //setup UI
surfacePickerSelectorView.text = model.surface.rawValue surfacePickerSelectorView.text = button.surface.rawValue
disabledSwitch.isOn = model.disabled disabledSwitch.isOn = button.disabled
textField.text = model.text textField.text = button.text
usePickerSelectorView.text = model.use.rawValue usePickerSelectorView.text = button.use.rawValue
widthTextField.text = "" widthTextField.text = ""
buttonSizePickerSelectorView.text = ButtonSize.large.rawValue buttonSizePickerSelectorView.text = ButtonSize.large.rawValue
} }
override func updateView(viewModel: DefaultButtonModel) {
button.set(with: viewModel)
}
func setupPicker(){ func setupPicker(){

View File

@ -11,14 +11,13 @@ import VDS
import VDSColorTokens import VDSColorTokens
import Combine import Combine
class CheckboxGroupViewController: ModelScrollViewController<DefaultCheckboxGroupModel> { class CheckboxGroupViewController: ModelScrollViewController {
var disabledSwitch = UISwitch() var disabledSwitch = UISwitch()
var labelTextField = TextField() var labelTextField = TextField()
var childTextField = TextField() var childTextField = TextField()
var showErrorSwitch = UISwitch() var showErrorSwitch = UISwitch()
var checkboxGroup = CheckboxGroup() var checkboxGroup = CheckboxGroup()
override func viewDidLoad() { override func viewDidLoad() {
@ -63,27 +62,20 @@ class CheckboxGroupViewController: ModelScrollViewController<DefaultCheckboxGro
} }
func setupModel() { func setupModel() {
var defaultModel = DefaultCheckboxGroupModel() var checkbox1 = Checkbox()
var model1 = DefaultCheckboxModel() checkbox1.inputId = "model1"
model1.inputId = "model1" checkbox1.value = "model 1 Value"
model1.value = "model 1 Value" checkbox1.labelText = "iPhone 11 Bundle 1"
model1.labelText = "iPhone 11 Bundle 1" checkbox1.childText = "Apple iPhone 11 - 64 GB\nOtterbox Case Red\nScreen Protector"
model1.childText = "Apple iPhone 11 - 64 GB\nOtterbox Case Red\nScreen Protector"
var model2 = DefaultCheckboxModel() var checkbox2 = Checkbox()
model2.inputId = "model2" checkbox2.inputId = "model2"
model2.value = "model 2 Value" checkbox2.value = "model 2 Value"
model2.labelText = "iPhone 11 Bundle 2" checkbox2.labelText = "iPhone 11 Bundle 2"
model2.childText = "Apple iPhone 11 - 128 GB\nOtterbox Case Black\nScreen Protector" checkbox2.childText = "Apple iPhone 11 - 128 GB\nOtterbox Case Black\nScreen Protector"
defaultModel.selectors = [model1, model2]
set(with: defaultModel) checkboxGroup.selectorViews = [checkbox1, checkbox2]
checkboxGroup
.handlerPublisher()
.sink { [weak self] viewModel in
self?.model = viewModel
}.store(in: &subscribers)
checkboxGroup checkboxGroup
.publisher(for: .valueChanged) .publisher(for: .valueChanged)
.sink { group in .sink { group in
@ -95,21 +87,14 @@ class CheckboxGroupViewController: ModelScrollViewController<DefaultCheckboxGro
}.store(in: &subscribers) }.store(in: &subscribers)
//setup UI //setup UI
surfacePickerSelectorView.text = model.surface.rawValue surfacePickerSelectorView.text = checkboxGroup.surface.rawValue
disabledSwitch.isOn = model.disabled disabledSwitch.isOn = checkboxGroup.disabled
labelTextField.text = model2.labelText labelTextField.text = checkbox1.labelText
childTextField.text = model1.childText childTextField.text = checkbox1.childText
showErrorSwitch.isOn = model.showError showErrorSwitch.isOn = checkboxGroup.showError
} }
override func updateView(viewModel: DefaultCheckboxGroupModel) {
print("\(Self.self) updateView(viewModel)")
showErrorSwitch.isOn = viewModel.showError
disabledSwitch.isOn = viewModel.disabled
checkboxGroup.set(with: viewModel)
}
var checkbox: Checkbox? { var checkbox: Checkbox? {
checkboxGroup.selectorViews.first checkboxGroup.selectorViews.first
} }

View File

@ -11,7 +11,7 @@ import VDS
import VDSColorTokens import VDSColorTokens
import Combine import Combine
class CheckboxViewController: ModelScrollViewController<DefaultCheckboxModel> { class CheckboxViewController: ModelScrollViewController {
var disabledSwitch = UISwitch() var disabledSwitch = UISwitch()
var labelTextField = TextField() var labelTextField = TextField()
@ -38,12 +38,6 @@ class CheckboxViewController: ModelScrollViewController<DefaultCheckboxModel> {
addFormRow(label: "Error", view: showErrorSwitch) addFormRow(label: "Error", view: showErrorSwitch)
addFormRow(label: "Error Text", view: errorTextField) addFormRow(label: "Error Text", view: errorTextField)
checkbox
.handlerPublisher()
.sink { [weak self] viewModel in
self?.model = viewModel
}.store(in: &subscribers)
showErrorSwitch showErrorSwitch
.publisher(for: .valueChanged) .publisher(for: .valueChanged)
.sink { [weak self] sender in .sink { [weak self] sender in
@ -76,18 +70,10 @@ class CheckboxViewController: ModelScrollViewController<DefaultCheckboxModel> {
} }
func setupModel() { func setupModel() {
var defaultModel = DefaultCheckboxModel() checkbox.labelText = "Terms and conditions"
defaultModel.labelText = "Terms and conditions" checkbox.childText = "I agree to Verizon's terms and conditions click here"
defaultModel.childText = "I agree to Verizon's terms and conditions click here" checkbox.errorText = "Error Text"
defaultModel.errorText = "Error Text"
set(with: defaultModel)
checkbox
.handlerPublisher()
.sink { [weak self] viewModel in
self?.model = viewModel
}.store(in: &subscribers)
checkbox checkbox
.publisher(for: .valueChanged) .publisher(for: .valueChanged)
.sink { checkbox in .sink { checkbox in
@ -95,22 +81,15 @@ class CheckboxViewController: ModelScrollViewController<DefaultCheckboxModel> {
}.store(in: &subscribers) }.store(in: &subscribers)
//setup UI //setup UI
surfacePickerSelectorView.text = model.surface.rawValue surfacePickerSelectorView.text = checkbox.surface.rawValue
disabledSwitch.isOn = model.selected disabledSwitch.isOn = checkbox.disabled
labelTextField.text = model.labelText labelTextField.text = checkbox.labelText
childTextField.text = model.childText childTextField.text = checkbox.childText
showErrorSwitch.isOn = model.showError showErrorSwitch.isOn = checkbox.showError
errorTextField.text = model.errorText errorTextField.text = checkbox.errorText
} }
override func updateView(viewModel: DefaultCheckboxModel) {
print("\(Self.self) updateView(viewModel)")
showErrorSwitch.isOn = viewModel.showError
disabledSwitch.isOn = viewModel.disabled
checkbox.set(with: viewModel)
}
//Picker //Picker
func setupPicker(){ func setupPicker(){
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in

View File

@ -10,7 +10,7 @@ import UIKit
import VDS import VDS
import VDSColorTokens import VDSColorTokens
class LabelViewController: ModelScrollViewController<DefaultLabelModel> { class LabelViewController: ModelScrollViewController {
lazy var textSizePickerSelectorView = { lazy var textSizePickerSelectorView = {
TextSizePickerSelectorView(title: "", TextSizePickerSelectorView(title: "",
@ -67,22 +67,14 @@ class LabelViewController: ModelScrollViewController<DefaultLabelModel> {
} }
func setupModel() { func setupModel() {
var defaultModel = DefaultLabelModel() label.text = "Label Component"
defaultModel.text = "Label Component" label.typograpicalStyle = .FeatureSmall
defaultModel.typograpicalStyle = .FeatureSmall
set(with: defaultModel)
label
.handlerPublisher()
.sink { [weak self] viewModel in
self?.model = viewModel
}.store(in: &subscribers)
//setup UI //setup UI
surfacePickerSelectorView.text = model.surface.rawValue surfacePickerSelectorView.text = label.surface.rawValue
disabledSwitch.isOn = model.disabled disabledSwitch.isOn = label.disabled
boldSwitch.isOn = isBold boldSwitch.isOn = isBold
textField.text = model.text textField.text = label.text
//set the font //set the font
fontCategory = .feature fontCategory = .feature
@ -91,10 +83,6 @@ class LabelViewController: ModelScrollViewController<DefaultLabelModel> {
textSizePickerSelectorView.text = "Small" textSizePickerSelectorView.text = "Small"
} }
override func updateView(viewModel: DefaultLabelModel) {
label.set(with: viewModel)
}
//Picker //Picker
private var fontCategory: TypographicalStyle.FontCategory = .feature { private var fontCategory: TypographicalStyle.FontCategory = .feature {
didSet { didSet {

View File

@ -10,7 +10,7 @@ import UIKit
import Combine import Combine
import VDS import VDS
public class ModelScrollViewController<ModelType: Modelable>: UIViewController, ModelHandlerable, Initable { public class ModelScrollViewController: UIViewController, ModelHandlerable, Initable {
deinit { deinit {
print("\(Self.self) deinit") print("\(Self.self) deinit")
} }
@ -21,8 +21,7 @@ public class ModelScrollViewController<ModelType: Modelable>: UIViewController,
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Combine Properties // MARK: - Combine Properties
//-------------------------------------------------- //--------------------------------------------------
@Published public var model: ModelType = ModelType() public var subject = PassthroughSubject<Void, Never>()
public var modelPublisher: Published<ModelType>.Publisher { $model }
public var subscribers = Set<AnyCancellable>() public var subscribers = Set<AnyCancellable>()
public var firstRender: Bool = false public var firstRender: Bool = false
@ -31,11 +30,9 @@ public class ModelScrollViewController<ModelType: Modelable>: UIViewController,
//-------------------------------------------------- //--------------------------------------------------
private var initialSetupPerformed = false private var initialSetupPerformed = false
@Proxy(\.model.surface) open var surface: Surface = .light { didSet { subject.send() }}
open var surface: Surface
@Proxy(\.model.disabled) open var disabled: Bool = false { didSet { subject.send() }}
open var disabled: Bool
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Initializers // MARK: - Initializers
@ -43,15 +40,8 @@ public class ModelScrollViewController<ModelType: Modelable>: UIViewController,
required public init() { required public init() {
super.init(nibName: nil, bundle: nil) super.init(nibName: nil, bundle: nil)
initialSetup() initialSetup()
set(with: model)
} }
public required init(with model: ModelType) {
super.init(nibName: nil, bundle: nil)
initialSetup()
set(with: model)
}
public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nil, bundle: nil) super.init(nibName: nil, bundle: nil)
initialSetup() initialSetup()
@ -206,6 +196,8 @@ public class ModelScrollViewController<ModelType: Modelable>: UIViewController,
open func setup() {} open func setup() {}
open func updateView(viewModel: ModelType) {} open func updateView() {
print("\(Self.self) updateView()")
}
} }

View File

@ -11,7 +11,7 @@ import VDS
import VDSColorTokens import VDSColorTokens
import Combine import Combine
class RadioBoxGroupViewController: ModelScrollViewController<DefaultRadioBoxGroupModel> { class RadioBoxGroupViewController: ModelScrollViewController {
var disabledSwitch = UISwitch() var disabledSwitch = UISwitch()
var strikeThroughSwitch = UISwitch() var strikeThroughSwitch = UISwitch()
@ -71,33 +71,22 @@ class RadioBoxGroupViewController: ModelScrollViewController<DefaultRadioBoxGro
} }
func setupModel(){ func setupModel(){
var defaultModel = DefaultRadioBoxGroupModel()
var model1 = DefaultRadioBoxModel()
model1.inputId = "model1"
model1.selected = true
model1.value = "model 1 Value"
model1.text = "iPhone 11 Bundle 1"
model1.subText = "Apple iPhone 11 - 64 GB\nOtterbox Case Red\nScreen Protector"
model1.subTextRight = "Right Text"
var model2 = DefaultRadioBoxModel() var radioBox1 = RadioBox()
model2.inputId = "model2" radioBox1.inputId = "model1"
model2.value = "model 2 Value" radioBox1.isSelected = true
model2.text = "iPhone 11 Bundle 2" radioBox1.value = "model 1 Value"
model2.subText = "Apple iPhone 11 - 128 GB\nOtterbox Case Black\nScreen Protector" radioBox1.text = "iPhone 11 Bundle 1"
radioBox1.subText = "Apple iPhone 11 - 64 GB\nOtterbox Case Red\nScreen Protector"
radioBox1.subTextRight = "Right Text"
defaultModel.selectors = [model1, model2] var radioBox2 = RadioBox()
set(with: defaultModel) radioBox2.inputId = "model2"
radioBox2.value = "model 2 Value"
radioBox2.text = "iPhone 11 Bundle 2"
radioBox2.subText = "Apple iPhone 11 - 128 GB\nOtterbox Case Black\nScreen Protector"
//update the model radioBoxGroup.selectorViews = [radioBox1, radioBox2]
radioBoxGroup
.handlerPublisher()
.sink { [weak self] updatedModel in
self?.model = updatedModel
self?.showErrorSwitch.isOn = updatedModel.showError
self?.disabledSwitch.isOn = updatedModel.disabled
}
.store(in: &subscribers)
radioBoxGroup radioBoxGroup
.publisher(for: .valueChanged) .publisher(for: .valueChanged)
@ -106,20 +95,13 @@ class RadioBoxGroupViewController: ModelScrollViewController<DefaultRadioBoxGro
}.store(in: &subscribers) }.store(in: &subscribers)
//set UI values //set UI values
surfacePickerSelectorView.text = model.surface.rawValue surfacePickerSelectorView.text = radioBoxGroup.surface.rawValue
disabledSwitch.isOn = model.disabled disabledSwitch.isOn = radioBoxGroup.disabled
textField.text = model1.text textField.text = radioBox1.text
subTextField.text = model1.subText subTextField.text = radioBox1.subText
subTextRightField.text = model1.subTextRight subTextRightField.text = radioBox1.subTextRight
} }
override func updateView(viewModel: ModelType) {
print("\(Self.self) updateView(viewModel)")
showErrorSwitch.isOn = viewModel.showError
disabledSwitch.isOn = viewModel.disabled
radioBoxGroup.set(with: viewModel)
}
var radioBox: RadioBox? { var radioBox: RadioBox? {
radioBoxGroup.selectorViews.first radioBoxGroup.selectorViews.first
} }

View File

@ -11,7 +11,7 @@ import VDS
import VDSColorTokens import VDSColorTokens
import Combine import Combine
class RadioButtonViewController: ModelScrollViewController<DefaultRadioButtonGroupModel> { class RadioButtonViewController: ModelScrollViewController {
var disabledSwitch = UISwitch() var disabledSwitch = UISwitch()
var labelTextField = TextField() var labelTextField = TextField()
@ -63,36 +63,25 @@ class RadioButtonViewController: ModelScrollViewController<DefaultRadioButtonGr
} }
func setupModel(){ func setupModel(){
var defaultModel = DefaultRadioButtonGroupModel() let radioButton1 = RadioButton()
var model1 = DefaultRadioButtonModel() radioButton1.inputId = "model1"
model1.inputId = "model1" radioButton1.value = "model 1 Value"
model1.value = "model 1 Value" radioButton1.labelText = "iPhone 11 Bundle 1"
model1.labelText = "iPhone 11 Bundle 1" radioButton1.childText = "Apple iPhone 11 - 64 GB\nOtterbox Case Red\nScreen Protector"
model1.childText = "Apple iPhone 11 - 64 GB\nOtterbox Case Red\nScreen Protector"
var model2 = DefaultRadioButtonModel() let radioButton2 = RadioButton()
model2.inputId = "model2" radioButton2.inputId = "model2"
model2.value = "model 2 Value" radioButton2.value = "model 2 Value"
model2.labelText = "iPhone 11 Bundle 2" radioButton2.labelText = "iPhone 11 Bundle 2"
model2.childText = "Apple iPhone 11 - 128 GB\nOtterbox Case Black\nScreen Protector" radioButton2.childText = "Apple iPhone 11 - 128 GB\nOtterbox Case Black\nScreen Protector"
var model3 = DefaultRadioButtonModel() let radioButton3 = RadioButton()
model3.inputId = "model3" radioButton3.inputId = "model3"
model3.value = "model 3 Value" radioButton3.value = "model 3 Value"
model3.labelText = "iPhone 11 Bundle 3" radioButton3.labelText = "iPhone 11 Bundle 3"
model3.childText = "Apple iPhone 11 - 256 GB\nOtterbox Case Black\nScreen Protector" radioButton3.childText = "Apple iPhone 11 - 256 GB\nOtterbox Case Black\nScreen Protector"
defaultModel.selectors = [model1, model2, model3]
set(with: defaultModel) radioButtonGroup.selectorViews = [radioButton1, radioButton2, radioButton3]
//update the model
radioButtonGroup
.handlerPublisher()
.sink { [weak self] updatedModel in
self?.model = updatedModel
self?.showErrorSwitch.isOn = updatedModel.showError
self?.disabledSwitch.isOn = updatedModel.disabled
}
.store(in: &subscribers)
radioButtonGroup radioButtonGroup
.publisher(for: .valueChanged) .publisher(for: .valueChanged)
@ -101,18 +90,11 @@ class RadioButtonViewController: ModelScrollViewController<DefaultRadioButtonGr
}.store(in: &subscribers) }.store(in: &subscribers)
//set UI values //set UI values
surfacePickerSelectorView.text = model.surface.rawValue surfacePickerSelectorView.text = radioButtonGroup.surface.rawValue
disabledSwitch.isOn = model.disabled disabledSwitch.isOn = radioButtonGroup.disabled
showErrorSwitch.isOn = model.showError showErrorSwitch.isOn = radioButtonGroup.showError
labelTextField.text = model1.labelText labelTextField.text = radioButton1.labelText
childTextField.text = model1.childText childTextField.text = radioButton1.childText
}
override func updateView(viewModel: DefaultRadioButtonGroupModel) {
print("\(Self.self) updateView(viewModel)")
showErrorSwitch.isOn = viewModel.showError
disabledSwitch.isOn = viewModel.disabled
radioButtonGroup.set(with: viewModel)
} }
var radioButton: RadioButton? { var radioButton: RadioButton? {

View File

@ -11,7 +11,7 @@ import VDS
import VDSColorTokens import VDSColorTokens
import Combine import Combine
class RadioSwatchGroupViewController: ModelScrollViewController<DefaultRadioSwatchGroupModel> { class RadioSwatchGroupViewController: ModelScrollViewController {
var disabledSwitch = UISwitch() var disabledSwitch = UISwitch()
var strikeThroughSwitch = UISwitch() var strikeThroughSwitch = UISwitch()
@ -39,93 +39,64 @@ class RadioSwatchGroupViewController: ModelScrollViewController<DefaultRadioSwa
strikeThroughSwitch strikeThroughSwitch
.publisher(for: .valueChanged) .publisher(for: .valueChanged)
.sink { [weak self] sender in .sink { [weak self] sender in
let selectors = self?.model.selectors.compactMap { existing in self?.radioSwatchGroup.selectorViews.first?.strikethrough = sender.isOn
if existing.id == self?.model.selectors.first?.id {
return existing.copyWith {
$0.strikethrough = sender.isOn
}
} else {
return existing
}
}
if let selectors {
self?.model.selectors = selectors
}
}.store(in: &subscribers) }.store(in: &subscribers)
} }
func setupModel(){ func setupModel(){
var defaultModel = DefaultRadioSwatchGroupModel()
var model1 = DefaultRadioSwatchModel() let radioSwatch1 = RadioSwatch()
model1.fillImage = UIImage(named: "imageSwatch") radioSwatch1.fillImage = UIImage(named: "imageSwatch")
model1.text = "Image" radioSwatch1.text = "Image"
model1.inputId = "radioSwatch1" radioSwatch1.inputId = "radioSwatch1"
var model2 = DefaultRadioSwatchModel() let radioSwatch2 = RadioSwatch()
model2.primaryColor = .red radioSwatch2.primaryColor = .red
model2.secondaryColor = .blue radioSwatch2.secondaryColor = .blue
model2.text = "Red/Blue" radioSwatch2.text = "Red/Blue"
model2.inputId = "radioSwatch2" radioSwatch2.inputId = "radioSwatch2"
var model3 = DefaultRadioSwatchModel() let radioSwatch3 = RadioSwatch()
model3.primaryColor = .green radioSwatch3.primaryColor = .green
model3.text = "Green" radioSwatch3.text = "Green"
model3.inputId = "radioSwatch3" radioSwatch3.inputId = "radioSwatch3"
var model4 = DefaultRadioSwatchModel() let radioSwatch4 = RadioSwatch()
model4.primaryColor = .orange radioSwatch4.primaryColor = .orange
model4.text = "Orange" radioSwatch4.text = "Orange"
model4.inputId = "radioSwatch4" radioSwatch4.inputId = "radioSwatch4"
var model5 = DefaultRadioSwatchModel() let radioSwatch5 = RadioSwatch()
model5.primaryColor = .brown radioSwatch5.primaryColor = .brown
model5.text = "Brown" radioSwatch5.text = "Brown"
model5.inputId = "radioSwatch5" radioSwatch5.inputId = "radioSwatch5"
var model6 = DefaultRadioSwatchModel() let radioSwatch6 = RadioSwatch()
model6.primaryColor = .yellow radioSwatch6.primaryColor = .yellow
model6.text = "Yellow" radioSwatch6.text = "Yellow"
model6.inputId = "radioSwatch6" radioSwatch6.inputId = "radioSwatch6"
var model7 = DefaultRadioSwatchModel() let radioSwatch7 = RadioSwatch()
model7.primaryColor = .purple radioSwatch7.primaryColor = .purple
model7.text = "Puple" radioSwatch7.text = "Puple"
model7.inputId = "radioSwatch7" radioSwatch7.inputId = "radioSwatch7"
var model8 = DefaultRadioSwatchModel()
model8.primaryColor = .systemPink
model8.text = "Pink"
model8.inputId = "radioSwatch8"
let radioSwatch8 = RadioSwatch()
radioSwatch8.primaryColor = .systemPink
radioSwatch8.text = "Pink"
radioSwatch8.inputId = "radioSwatch8"
defaultModel.selectors = [model1, model2, model3, model4, model5, model6, model7, model8] radioSwatchGroup.selectorViews = [radioSwatch1, radioSwatch2, radioSwatch3, radioSwatch4, radioSwatch5, radioSwatch6, radioSwatch7, radioSwatch8]
set(with: defaultModel)
//update the model
radioSwatchGroup
.handlerPublisher()
.sink { [weak self] updatedModel in
self?.model = updatedModel
self?.disabledSwitch.isOn = updatedModel.disabled
}
.store(in: &subscribers)
radioSwatchGroup radioSwatchGroup
.publisher(for: .valueChanged) .publisher(for: .valueChanged)
.sink { group in .sink { group in
print("Selected: \(group.selectedModelHandler?.text ?? "none")") print("Selected: \(group.selectedHandler?.text ?? "none")")
}.store(in: &subscribers) }.store(in: &subscribers)
//set UI values //set UI values
surfacePickerSelectorView.text = model.surface.rawValue surfacePickerSelectorView.text = radioSwatchGroup.surface.rawValue
disabledSwitch.isOn = model.disabled disabledSwitch.isOn = radioSwatchGroup.disabled
}
override func updateView(viewModel: ModelType) {
print("\(Self.self) updateView(viewModel)")
disabledSwitch.isOn = viewModel.disabled
radioSwatchGroup.set(with: viewModel)
} }
//Picker //Picker

View File

@ -10,7 +10,7 @@ import UIKit
import VDS import VDS
import VDSColorTokens import VDSColorTokens
class ToggleViewController: ModelScrollViewController<DefaultToggleModel> { class ToggleViewController: ModelScrollViewController {
lazy var textSizePickerSelectorView = { lazy var textSizePickerSelectorView = {
PickerSelectorView(title: "", PickerSelectorView(title: "",
@ -105,20 +105,14 @@ class ToggleViewController: ModelScrollViewController<DefaultToggleModel> {
textFormStackView.isHidden = true textFormStackView.isHidden = true
//setup UI //setup UI
surfacePickerSelectorView.text = model.surface.rawValue surfacePickerSelectorView.text = toggle.surface.rawValue
textSizePickerSelectorView.text = model.textSize.rawValue textSizePickerSelectorView.text = toggle.textSize.rawValue
textPositionPickerSelectorView.text = model.textPosition.rawValue textPositionPickerSelectorView.text = toggle.textPosition.rawValue
onTextField.text = model.onText onTextField.text = toggle.onText
offTextField.text = model.offText offTextField.text = toggle.offText
} }
override func updateView(viewModel: DefaultToggleModel) { //Picker
print("\(Self.self) updateView(viewModel)")
toggle.set(with: viewModel)
}
//Picker
func setupPicker(){ func setupPicker(){
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in