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