// // ToggleModel.swift // VDS // // Created by Matt Bruce on 7/22/22. // import Foundation import UIKit public protocol RadioButtonModel: Modelable, FormFieldable, Errorable, DataTrackable, Accessable, Selectable, BinaryColorable { var labelText: String? { get set } var labelTextAttributes: [any LabelAttributeModel]? { get set } var childText: String? { get set } var childTextAttributes: [any LabelAttributeModel]? { get set } } extension RadioButtonModel { public var shouldShowError: Bool { guard hasError && !disabled && errorText?.isEmpty == false else { return false } return true } public var shouldShowLabels: Bool { guard labelText?.isEmpty == false || childText?.isEmpty == false else { return false } return true } public var labelModel: DefaultLabelModel? { guard let labelText = labelText else { return nil } var model = DefaultLabelModel() model.textPosition = .left model.typograpicalStyle = .BoldBodyLarge model.text = labelText model.surface = surface model.disabled = disabled model.attributes = labelTextAttributes return model } public var childModel: DefaultLabelModel? { guard let childText = childText else { return nil } var model = DefaultLabelModel() model.textPosition = .left model.typograpicalStyle = .BodyLarge model.text = childText model.surface = surface model.disabled = disabled model.attributes = childTextAttributes return model } public var errorModel: DefaultLabelModel? { guard let errorText = errorText, hasError else { return nil } var model = DefaultLabelModel() model.textPosition = .left model.typograpicalStyle = .BodyMedium model.text = errorText model.surface = surface model.disabled = disabled return model } } public struct DefaultRadioButtonModel: RadioButtonModel { public var id = UUID() public var selected: Bool = false public var labelText: String? public var labelTextAttributes: [any LabelAttributeModel]? public var childText: String? public var childTextAttributes: [any LabelAttributeModel]? public var hasError: Bool = false public var errorText: String? public var inputId: String? public var value: AnyHashable? public var surface: Surface = .light public var disabled: Bool = false public var dataAnalyticsTrack: String? public var dataClickStream: String? public var dataTrack: String? public var accessibilityHintEnabled: String? public var accessibilityHintDisabled: String? public var accessibilityValueEnabled: String? public var accessibilityValueDisabled: String? public var accessibilityLabelEnabled: String? public var accessibilityLabelDisabled: String? public init() {} public static func == (lhs: DefaultRadioButtonModel, rhs: DefaultRadioButtonModel) -> Bool { lhs.isEqual(rhs) } public func isEqual(_ equatable: DefaultRadioButtonModel) -> Bool { return id == equatable.id && selected == equatable.selected && labelText == equatable.labelText && labelTextAttributes == equatable.labelTextAttributes && childText == equatable.childText && childTextAttributes == equatable.childTextAttributes && hasError == equatable.hasError && errorText == equatable.errorText && inputId == equatable.inputId && value == equatable.value && surface == equatable.surface && disabled == equatable.disabled && dataAnalyticsTrack == equatable.dataAnalyticsTrack && dataClickStream == equatable.dataClickStream && dataTrack == equatable.dataTrack && accessibilityHintEnabled == equatable.accessibilityHintEnabled && accessibilityHintDisabled == equatable.accessibilityHintDisabled && accessibilityValueEnabled == equatable.accessibilityValueEnabled && accessibilityValueDisabled == equatable.accessibilityValueDisabled && accessibilityLabelEnabled == equatable.accessibilityLabelEnabled && accessibilityLabelDisabled == equatable.accessibilityLabelDisabled } }