// // RadioButtonGroup.swift // VDS // // Created by Matt Bruce on 8/11/22. // import Foundation public class RadioButtonGroup: RadioButtonGroupBase {} public class RadioButtonGroupBase>: SelectorGroupBase { @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 } } override public func shouldUpdateView(viewModel: SelectorGroupBase.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") } }