vds_ios/VDS/Components/RadioButton/RadioButtonGroup.swift
Matt Bruce 304023381c updated to copyWith
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
2022-08-22 17:49:44 -05:00

75 lines
2.4 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 existing.copyWith {
$0.hasError = newHasError
}
}
model.hasError = newHasError
model.selectors = selectors
}
}
override public func shouldUpdateView(viewModel: SelectorGroupBase<RadioButtonGroupModelType.SelectorType, RadioButtonGroupModelType, RadioButtonType>.ModelType) -> Bool {
let update = viewModel.selectedModel?.id != model.selectedModel?.id
|| super.shouldUpdateView(viewModel: viewModel)
return update
}
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")
}
}