vds_ios/VDS/Components/RadioBox/RadioBoxModel.swift
Matt Bruce 9e2d5fff47 added Equality to Modelable
added AnyEquality to classes that have an a property with 'any'
added default implementation on shouldUpdateView() to check equality, this can be re-implemented in classes
removed all shouldUpdateView methods everywhere since above was done

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
2022-09-16 09:14:27 -05:00

123 lines
4.3 KiB
Swift

//
// RadioBoxModel.swift
// VDS
//
// Created by Matt Bruce on 8/23/22.
//
import Foundation
import UIKit
public protocol RadioBoxModel: Modelable, FormFieldable, DataTrackable, Accessable, Selectable, BinaryColorable {
var text: String { get set }
var textAttributes: [any LabelAttributeModel]? { get set }
var subText: String? { get set }
var subTextAttributes: [any LabelAttributeModel]? { get set }
var subTextRight: String? { get set }
var subTextRightAttributes: [any LabelAttributeModel]? { get set }
var strikethrough: Bool { get set }
}
extension RadioBoxModel {
public var textModel: DefaultLabelModel {
var model = DefaultLabelModel()
model.textPosition = .left
model.typograpicalStyle = .BoldBodyLarge
model.text = text
model.surface = surface
model.disabled = disabled
model.attributes = textAttributes
return model
}
public var subTextModel: DefaultLabelModel? {
guard let subText else { return nil }
var model = DefaultLabelModel()
model.textPosition = .left
model.typograpicalStyle = .BodyLarge
model.text = subText
model.surface = surface
model.disabled = disabled
model.attributes = subTextAttributes
return model
}
public var subTextRightModel: DefaultLabelModel? {
guard let subTextRight else { return nil }
var model = DefaultLabelModel()
model.textPosition = .right
model.typograpicalStyle = .BodyLarge
model.text = subTextRight
model.surface = surface
model.disabled = disabled
model.attributes = subTextRightAttributes
return model
}
}
public struct DefaultRadioBoxModel: RadioBoxModel {
public var id = UUID()
public var selected: Bool = false
public var text: String = "Default Text"
public var textAttributes: [any LabelAttributeModel]?
public var subText: String?
public var subTextAttributes: [any LabelAttributeModel]?
public var subTextRight: String?
public var subTextRightAttributes: [any LabelAttributeModel]?
public var selectedAccentColor: UIColor?
public var strikethrough: Bool = false
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: DefaultRadioBoxModel, rhs: DefaultRadioBoxModel) -> Bool {
lhs.isEqual(rhs)
}
public func isEqual(_ equatable: DefaultRadioBoxModel) -> Bool {
return id == equatable.id
&& selected == equatable.selected
&& text == equatable.text
&& textAttributes == equatable.textAttributes
&& subText == equatable.subText
&& subTextAttributes == equatable.subTextAttributes
&& subTextRight == equatable.subTextRight
&& subTextRightAttributes == equatable.subTextRightAttributes
&& selectedAccentColor == equatable.selectedAccentColor
&& strikethrough == equatable.strikethrough
&& 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
}
}