refactored to hasError
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
706c55d0f2
commit
9d440aaeac
@ -126,7 +126,7 @@ open class CheckboxBase<ModelType: CheckboxModel>: SelectorBase<ModelType> {
|
||||
public let error = BinarySurfaceColorConfiguration<ModelType>()
|
||||
override func getColor(_ viewModel: ModelType) -> UIColor {
|
||||
//only show error is enabled and showError == true
|
||||
let showErrorColor = !viewModel.disabled && viewModel.showError
|
||||
let showErrorColor = !viewModel.disabled && viewModel.hasError
|
||||
|
||||
if showErrorColor {
|
||||
return error.getColor(viewModel)
|
||||
|
||||
@ -24,7 +24,7 @@ public struct DefaultCheckboxModel: CheckboxModel {
|
||||
public var childText: String?
|
||||
public var childTextAttributes: [LabelAttributeModel]?
|
||||
|
||||
public var showError: Bool = false
|
||||
public var hasError: Bool = false
|
||||
public var errorText: String?
|
||||
|
||||
public var inputId: String?
|
||||
|
||||
@ -57,6 +57,11 @@ open class RadioButtonBase<ModelType: RadioButtonModel>: SelectorBase<ModelType>
|
||||
return config
|
||||
}()
|
||||
|
||||
open override func toggleAndAction() {
|
||||
guard !isSelected else { return }
|
||||
super.toggleAndAction()
|
||||
}
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - RadioButton View
|
||||
//--------------------------------------------------
|
||||
@ -107,7 +112,7 @@ open class RadioButtonBase<ModelType: RadioButtonModel>: SelectorBase<ModelType>
|
||||
public let error = BinarySurfaceColorConfiguration<ModelType>()
|
||||
override func getColor(_ viewModel: ModelType) -> UIColor {
|
||||
//only show error is enabled and showError == true
|
||||
let showErrorColor = !viewModel.disabled && viewModel.showError
|
||||
let showErrorColor = !viewModel.disabled && viewModel.hasError
|
||||
|
||||
if showErrorColor {
|
||||
return error.getColor(viewModel)
|
||||
|
||||
@ -9,24 +9,54 @@ import Foundation
|
||||
|
||||
public class RadioButtonGroup: RadioButtonGroupBase<DefaultRadioButtonGroupModel, RadioButton> {}
|
||||
|
||||
public class RadioButtonGroupBase<RadioButtonGroupModelType: SelectorGroupModel, RadioButtonType: RadioButtonBase<RadioButtonGroupModelType.SelectorType>>: SelectorGroupBase<RadioButtonGroupModelType.SelectorType, RadioButtonGroupModelType, RadioButtonType> {
|
||||
public class RadioButtonGroupBase<RadioButtonGroupModelType: RadioButtonGroupModel, RadioButtonType: RadioButtonBase<RadioButtonGroupModelType.SelectorType>>: SelectorGroupBase<RadioButtonGroupModelType.SelectorType, RadioButtonGroupModelType, RadioButtonType> {
|
||||
|
||||
public override func didSelect(selected: RadioButtonGroupModelType.SelectorType) {
|
||||
@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.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)
|
||||
}
|
||||
|
||||
var newSelectedModel = selected
|
||||
newSelectedModel.selected = true
|
||||
replace(viewModel: newSelectedModel)
|
||||
|
||||
selectedModel = newSelectedModel
|
||||
|
||||
//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)")
|
||||
|
||||
@ -7,7 +7,15 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
public struct DefaultRadioButtonGroupModel: SelectorGroupModel {
|
||||
public protocol RadioButtonGroupModel: SelectorGroupModel {
|
||||
var selectedModel: SelectorType? { get set }
|
||||
}
|
||||
|
||||
extension RadioButtonGroupModel {
|
||||
public var errorText: String? { return nil }
|
||||
}
|
||||
|
||||
public struct DefaultRadioButtonGroupModel: RadioButtonGroupModel {
|
||||
public typealias SelectorType = DefaultRadioButtonModel
|
||||
public var id: UUID = UUID()
|
||||
public var inputId: String?
|
||||
@ -16,6 +24,8 @@ public struct DefaultRadioButtonGroupModel: SelectorGroupModel {
|
||||
public var disabled: Bool = false
|
||||
public var selectedModel: DefaultRadioButtonModel?
|
||||
public var selectors: [SelectorType]
|
||||
public var hasError: Bool = false
|
||||
public var errorText: String?
|
||||
public init() { selectors = [] }
|
||||
public init(selectors: [SelectorType]){
|
||||
self.selectors = selectors
|
||||
|
||||
@ -25,7 +25,7 @@ public struct DefaultRadioButtonModel: RadioButtonModel {
|
||||
public var childText: String?
|
||||
public var childTextAttributes: [LabelAttributeModel]?
|
||||
|
||||
public var showError: Bool = false
|
||||
public var hasError: Bool = false
|
||||
public var errorText: String?
|
||||
|
||||
public var inputId: String?
|
||||
|
||||
@ -87,7 +87,7 @@ open class SelectorBase<ModelType: SelectorModel>: Control<ModelType>, Changable
|
||||
@Proxy(\.model.childText)
|
||||
open var childText: String?
|
||||
|
||||
@Proxy(\.model.showError)
|
||||
@Proxy(\.model.hasError)
|
||||
open var showError: Bool
|
||||
|
||||
@Proxy(\.model.errorText)
|
||||
@ -260,7 +260,7 @@ open class SelectorBase<ModelType: SelectorModel>: Control<ModelType>, Changable
|
||||
}
|
||||
|
||||
/// This will checkbox the state of the Checkbox and execute the actionBlock if provided.
|
||||
@objc public func toggleAndAction() {
|
||||
@objc open func toggleAndAction() {
|
||||
isSelected.toggle()
|
||||
onChange?()
|
||||
}
|
||||
@ -289,7 +289,7 @@ open class SelectorBase<ModelType: SelectorModel>: Control<ModelType>, Changable
|
||||
return viewModel.selected != model.selected
|
||||
|| viewModel.labelText != model.labelText
|
||||
|| viewModel.childText != model.childText
|
||||
|| viewModel.showError != model.showError
|
||||
|| viewModel.hasError != model.hasError
|
||||
|| viewModel.surface != model.surface
|
||||
|| viewModel.disabled != model.disabled
|
||||
}
|
||||
|
||||
@ -12,10 +12,7 @@ import Combine
|
||||
open class SelectorGroupBase<SelectorType, SelectorGroupType: SelectorGroupModel, SelectorHandlerType: SelectorBase<SelectorType>>: View<SelectorGroupType>, Changable where SelectorType == SelectorGroupType.SelectorType {
|
||||
|
||||
public var selectorViews: [SelectorHandlerType] = []
|
||||
|
||||
@Proxy(\.model.selectedModel)
|
||||
public var selectedModel: SelectorType?
|
||||
|
||||
|
||||
public var onChange: Blocks.ActionBlock?
|
||||
|
||||
//--------------------------------------------------
|
||||
@ -92,7 +89,7 @@ open class SelectorGroupBase<SelectorType, SelectorGroupType: SelectorGroupModel
|
||||
//add the selectedPublisher for the change
|
||||
newSelectorView.selectedPublisher().sink { [weak self] model in
|
||||
guard self?.model.selectors.count ?? 0 > 0 else { return }
|
||||
self?.didSelect(selected: model)
|
||||
self?.didSelect(selector: model)
|
||||
}.store(in: &subscribers)
|
||||
|
||||
//add model update to the subscribers
|
||||
@ -127,6 +124,6 @@ open class SelectorGroupBase<SelectorType, SelectorGroupType: SelectorGroupModel
|
||||
}
|
||||
}
|
||||
|
||||
open func didSelect(selected: SelectorType) { }
|
||||
open func didSelect(selector: SelectorType) { }
|
||||
|
||||
}
|
||||
|
||||
@ -7,9 +7,8 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
public protocol SelectorGroupModel<SelectorType>: Modelable, FormFieldable {
|
||||
public protocol SelectorGroupModel<SelectorType>: Modelable, FormFieldable, Errorable {
|
||||
associatedtype SelectorType: SelectorModel
|
||||
var selectedModel: SelectorType? { get set }
|
||||
var selectors: [SelectorType] { get set }
|
||||
}
|
||||
|
||||
@ -18,6 +17,8 @@ public struct DefaultSelectorGroupModel<SelectorType: SelectorModel>: SelectorGr
|
||||
public var inputId: String?
|
||||
public var value: AnyHashable?
|
||||
public var surface: Surface = .light
|
||||
public var hasError: Bool = false
|
||||
public var errorText: String?
|
||||
public var disabled: Bool = false
|
||||
public var selectedModel: SelectorType?
|
||||
public var selectors: [SelectorType]
|
||||
|
||||
@ -26,7 +26,7 @@ extension SelectorModel {
|
||||
}
|
||||
|
||||
public var shouldShowError: Bool {
|
||||
guard showError && !disabled && errorText?.isEmpty == false else { return false }
|
||||
guard hasError && !disabled && errorText?.isEmpty == false else { return false }
|
||||
return true
|
||||
}
|
||||
|
||||
@ -64,7 +64,7 @@ extension SelectorModel {
|
||||
}
|
||||
|
||||
public var errorModel: DefaultLabelModel? {
|
||||
guard let errorText = errorText, showError else { return nil }
|
||||
guard let errorText = errorText, hasError else { return nil }
|
||||
var model = DefaultLabelModel()
|
||||
model.fontSize = .medium
|
||||
model.textPosition = .left
|
||||
|
||||
@ -8,6 +8,6 @@
|
||||
import Foundation
|
||||
|
||||
public protocol Errorable {
|
||||
var showError: Bool { get set }
|
||||
var hasError: Bool { get set }
|
||||
var errorText: String? { get set }
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user