69 lines
2.1 KiB
Swift
69 lines
2.1 KiB
Swift
//
|
|
// RadioButtonGroup.swift
|
|
// VDS
|
|
//
|
|
// Created by Matt Bruce on 8/11/22.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
public class RadioButtonGroup: RadioButtonGroupBase<DefaultRadioButtonGroupModel, RadioButton> {}
|
|
|
|
public class RadioButtonGroupBase<RadioButtonGroupModelType: RadioButtonGroupModel, RadioButtonType: RadioButtonBase<RadioButtonGroupModelType.SelectorType>>: SelectorGroupBase<RadioButtonGroupModelType.SelectorType, RadioButtonGroupModelType, RadioButtonType> {
|
|
|
|
@Proxy(\.model.selectedModel)
|
|
public var selectedModel: RadioButtonGroupModelType.SelectorType? {
|
|
didSet{
|
|
if hasError, selectedModel != nil {
|
|
hasError = false
|
|
}
|
|
}
|
|
}
|
|
|
|
public var hasError: Bool {
|
|
get { model.hasError }
|
|
set {
|
|
var newHasError = newValue
|
|
if selectedModel != nil, newHasError {
|
|
newHasError = false
|
|
}
|
|
let selectors = model.selectors.compactMap { existing in
|
|
return updated(existing){
|
|
$0.hasError = newHasError
|
|
}
|
|
}
|
|
model.hasError = newHasError
|
|
model.selectors = selectors
|
|
}
|
|
}
|
|
|
|
public override func didSelect(selector: RadioButtonGroupModelType.SelectorType) {
|
|
|
|
for selectorModel in model.selectors {
|
|
print("Pre Cached Selector: \(selectorModel.id): \(selectorModel.selected)")
|
|
}
|
|
|
|
if var oldSelectedModel = selectedModel {
|
|
oldSelectedModel.selected = false
|
|
replace(viewModel: oldSelectedModel)
|
|
}
|
|
|
|
//only select is selected
|
|
if selector.selected {
|
|
var newSelectedModel = selector
|
|
newSelectedModel.selected = true
|
|
replace(viewModel: newSelectedModel)
|
|
selectedModel = newSelectedModel
|
|
} else {
|
|
//ensure current value is removed
|
|
selectedModel = nil
|
|
}
|
|
|
|
for selectorModel in model.selectors {
|
|
print("Post Cached Selector: \(selectorModel.id): \(selectorModel.selected)")
|
|
}
|
|
|
|
print("\n")
|
|
}
|
|
}
|