added ParentViewProtocol to views and updated children
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
d336b8dfda
commit
c41599578a
@ -31,7 +31,6 @@ public protocol SelectorControlable: Control, Changeable {
|
||||
@objcMembers
|
||||
@objc(VDSSelectorBase)
|
||||
open class SelectorBase: Control, SelectorControlable, ParentViewProtocol {
|
||||
public var children: [any ViewProtocol] { [selectorView] }
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
@ -51,6 +50,8 @@ open class SelectorBase: Control, SelectorControlable, ParentViewProtocol {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var children: [any ViewProtocol] { [selectorView] }
|
||||
|
||||
open var onChangeSubscriber: AnyCancellable?
|
||||
|
||||
open var size = CGSize(width: 20, height: 20) { didSet { setNeedsUpdate() } }
|
||||
|
||||
@ -40,7 +40,6 @@ extension SelectorGroupSingleSelect {
|
||||
|
||||
/// Base Class used for any Grouped Form Control of a Selector Type.
|
||||
open class SelectorGroupBase<SelectorItemType: Groupable>: Control, SelectorGroup, Changeable, ParentViewProtocol {
|
||||
public var children: [any ViewProtocol] { items }
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Private Properties
|
||||
@ -58,6 +57,8 @@ open class SelectorGroupBase<SelectorItemType: Groupable>: Control, SelectorGrou
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var children: [any ViewProtocol] { items }
|
||||
|
||||
/// Array of the HandlerType registered.
|
||||
/// Array of HandlerType that the user will have the ability to select from.
|
||||
open var items: [SelectorItemType] = [] {
|
||||
|
||||
@ -12,7 +12,6 @@ import VDSCoreTokens
|
||||
|
||||
/// Base Class used to build out a SelectorControlable control.
|
||||
open class SelectorItemBase<Selector: SelectorBase>: Control, Errorable, Changeable, Groupable, ParentViewProtocol {
|
||||
public var children: [any ViewProtocol] { [label, childLabel, errorLabel, selectorView] }
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
@ -62,7 +61,9 @@ open class SelectorItemBase<Selector: SelectorBase>: Control, Errorable, Changea
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var onChangeSubscriber: AnyCancellable?
|
||||
open var children: [any ViewProtocol] { [label, childLabel, errorLabel, selectorView] }
|
||||
|
||||
open var onChangeSubscriber: AnyCancellable?
|
||||
|
||||
/// Label used to render labelText.
|
||||
open var label = Label().with {
|
||||
|
||||
@ -17,7 +17,7 @@ import Combine
|
||||
/// to its parent this object will stretch to the parent's width.
|
||||
@objcMembers
|
||||
@objc(VDSBadge)
|
||||
open class Badge: View {
|
||||
open class Badge: View, ParentViewProtocol {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
@ -45,6 +45,8 @@ open class Badge: View {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var children: [any ViewProtocol] { [label] }
|
||||
|
||||
/// Label used to render text
|
||||
open var label = Label().with {
|
||||
$0.isAccessibilityElement = false
|
||||
|
||||
@ -13,7 +13,7 @@ import Combine
|
||||
/// A badge indicator is a visual label used to convey status or highlight supplemental information.
|
||||
@objcMembers
|
||||
@objc(VDSBadgeIndicator)
|
||||
open class BadgeIndicator: View {
|
||||
open class BadgeIndicator: View, ParentViewProtocol {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
@ -135,6 +135,8 @@ open class BadgeIndicator: View {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var children: [any ViewProtocol] { [label, badgeView] }
|
||||
|
||||
/// Label used for the numeric kind.
|
||||
open var label = Label().with {
|
||||
$0.setContentCompressionResistancePriority(.required, for: .vertical)
|
||||
|
||||
@ -15,11 +15,13 @@ import Combine
|
||||
/// Breadcrumbs are secondary navigation that use a hierarchy of internal links to tell customers where they are in an experience. Each breadcrumb links to its respective page, except for that of current page.
|
||||
@objcMembers
|
||||
@objc(VDSBreadcrumbs)
|
||||
open class Breadcrumbs: View {
|
||||
open class Breadcrumbs: View, ParentViewProtocol {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var children: [any ViewProtocol] { breadcrumbs }
|
||||
|
||||
/// Array of ``BreadcrumbItem`` views for the Breadcrumbs.
|
||||
open var breadcrumbs: [BreadcrumbItem] = [] { didSet { setNeedsUpdate() } }
|
||||
|
||||
|
||||
@ -94,6 +94,12 @@ open class DatePicker: EntryFieldBase<String> {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open override var children: [any ViewProtocol] {
|
||||
var current = super.children
|
||||
current.append(selectedDateLabel)
|
||||
return current
|
||||
}
|
||||
|
||||
open var calendarIcon = Icon().with {
|
||||
$0.name = .calendar
|
||||
$0.size = .medium
|
||||
|
||||
@ -31,7 +31,7 @@ open class DropdownSelect: EntryFieldBase<String> {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
//--------------------------------------------------
|
||||
/// If true, the label will be displayed inside the dropdown containerView. Otherwise, the label will be above the dropdown containerView like a normal text input.
|
||||
open var showInlineLabel: Bool = false { didSet { setNeedsUpdate() }}
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ import Combine
|
||||
/// It usually represents a supplementary or utilitarian action. A button icon can stand alone, but often
|
||||
/// exists in a group when there are several actions that can be performed.
|
||||
@objc(VDSButtonIcon)
|
||||
open class ButtonIcon: Control, Changeable {
|
||||
open class ButtonIcon: Control, Changeable, ParentViewProtocol {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
@ -109,6 +109,8 @@ open class ButtonIcon: Control, Changeable {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var children: [any ViewProtocol] { [icon] }
|
||||
|
||||
public var onChangeSubscriber: AnyCancellable?
|
||||
|
||||
///Badge Indicator object used to render for the ButtonIcon.
|
||||
|
||||
@ -70,6 +70,12 @@ open class InputStepper: EntryFieldBase<Int> {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open override var children: [any ViewProtocol] {
|
||||
var current = super.children
|
||||
current.append(contentsOf: [decrementButton, incrementButton, textLabel])
|
||||
return current
|
||||
}
|
||||
|
||||
/// If there is a width that is larger than this size's minimumWidth, the input stepper will resize to this width.
|
||||
open var controlWidth: ControlWidth? {
|
||||
get { _controlWidth }
|
||||
|
||||
@ -16,7 +16,7 @@ import Combine
|
||||
/// experience-wide.
|
||||
@objcMembers
|
||||
@objc(VDSNotification)
|
||||
open class Notification: View {
|
||||
open class Notification: View, ParentViewProtocol {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
@ -101,6 +101,8 @@ open class Notification: View {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var children: [any ViewProtocol] { [typeIcon, closeButton, titleLabel, subTitleLabel, primaryButton, secondaryButton] }
|
||||
|
||||
/// Icon used for denoting type.
|
||||
open var typeIcon = Icon().with {
|
||||
$0.name = .infoBold
|
||||
|
||||
@ -11,7 +11,7 @@ import VDSCoreTokens
|
||||
|
||||
@objcMembers
|
||||
@objc(VDSPriceLockup)
|
||||
open class PriceLockup: View {
|
||||
open class PriceLockup: View, ParentViewProtocol {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
@ -90,6 +90,7 @@ open class PriceLockup: View {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var children: [any ViewProtocol] { [priceLockupLabel] }
|
||||
|
||||
/// If true, the component will render as bold.
|
||||
open var bold: Bool = false { didSet { setNeedsUpdate() } }
|
||||
|
||||
@ -15,7 +15,6 @@ import VDSCoreTokens
|
||||
@objcMembers
|
||||
@objc(VDSRadioBoxItem)
|
||||
open class RadioBoxItem: Control, Changeable, FormFieldable, Groupable, ParentViewProtocol {
|
||||
public var children: [any ViewProtocol] { [textLabel, subTextLabel, subTextRightLabel, selectorView] }
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
@ -54,6 +53,8 @@ open class RadioBoxItem: Control, Changeable, FormFieldable, Groupable, ParentVi
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var children: [any ViewProtocol] { [textLabel, subTextLabel, subTextRightLabel, selectorView] }
|
||||
|
||||
open var onChangeSubscriber: AnyCancellable?
|
||||
|
||||
/// Label used to render the text.
|
||||
|
||||
@ -12,7 +12,7 @@ import VDSCoreTokens
|
||||
/// Tabs are organizational components that group content and allow customers to navigate its display. Use them to separate content when the content is related but doesn’t need to be compared.
|
||||
@objcMembers
|
||||
@objc(VDSTabs)
|
||||
open class Tabs: View {
|
||||
open class Tabs: View, ParentViewProtocol {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
@ -84,6 +84,8 @@ open class Tabs: View {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var children: [any ViewProtocol] { tabViews }
|
||||
|
||||
/// A callback when the selectedIndex changes. Passes parameters (tabIndex).
|
||||
open var onTabDidSelect: ((Int) -> Void)?
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@ import VDSCoreTokens
|
||||
import Combine
|
||||
|
||||
/// Base Class used to build out a Input controls.
|
||||
open class EntryFieldBase<ValueType>: Control, Changeable, FormFieldInternalValidatable {
|
||||
open class EntryFieldBase<ValueType>: Control, Changeable, FormFieldInternalValidatable, ParentViewProtocol {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
//--------------------------------------------------
|
||||
@ -155,6 +155,8 @@ open class EntryFieldBase<ValueType>: Control, Changeable, FormFieldInternalVali
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var children: [any ViewProtocol] { [titleLabel, helperLabel, errorLabel, statusIcon] }
|
||||
|
||||
/// This is the view that will be wrapped with the border for userInteraction.
|
||||
/// The only subview of this view is the fieldStackView
|
||||
open var containerView = View().with {
|
||||
|
||||
@ -44,7 +44,7 @@ open class TileContainer: TileContainerBase<TileContainer.Padding> {
|
||||
}
|
||||
}
|
||||
|
||||
open class TileContainerBase<PaddingType: DefaultValuing & Valuing>: View where PaddingType.ValueType == CGFloat {
|
||||
open class TileContainerBase<PaddingType: DefaultValuing & Valuing>: View where PaddingType.ValueType == CGFloat {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
@ -122,7 +122,7 @@ open class TileContainerBase<PaddingType: DefaultValuing & Valuing>: View where
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
//--------------------------------------------------
|
||||
/// This takes an image source url and applies it as a background image.
|
||||
open var backgroundImage: UIImage? { didSet { setNeedsUpdate() } }
|
||||
|
||||
@ -340,21 +340,21 @@ open class TileContainerBase<PaddingType: DefaultValuing & Valuing>: View where
|
||||
|
||||
open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
|
||||
super.touchesBegan(touches, with: event)
|
||||
if let onClickSubscriber {
|
||||
if onClickSubscriber != nil {
|
||||
isHighlighted = true
|
||||
}
|
||||
}
|
||||
|
||||
open override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
|
||||
super.touchesEnded(touches, with: event)
|
||||
if let onClickSubscriber {
|
||||
if onClickSubscriber != nil {
|
||||
isHighlighted = false
|
||||
}
|
||||
}
|
||||
|
||||
open override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
|
||||
super.touchesCancelled(touches, with: event)
|
||||
if let onClickSubscriber {
|
||||
if onClickSubscriber != nil {
|
||||
isHighlighted = false
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,7 +17,7 @@ import Combine
|
||||
/// function.
|
||||
@objcMembers
|
||||
@objc(VDSTilelet)
|
||||
open class Tilelet: TileContainerBase<Tilelet.Padding> {
|
||||
open class Tilelet: TileContainerBase<Tilelet.Padding>, ParentViewProtocol {
|
||||
|
||||
/// Enum used to describe the padding choices used for this component.
|
||||
public enum Padding: String, DefaultValuing, Valuing, CaseIterable {
|
||||
@ -110,6 +110,8 @@ open class Tilelet: TileContainerBase<Tilelet.Padding> {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var children: [any ViewProtocol] { [badge, titleLockup, descriptiveIcon, directionalIcon] }
|
||||
|
||||
/// Title lockup positioned in the contentView.
|
||||
open var titleLockup = TitleLockup().with {
|
||||
$0.standardStyleConfiguration = .init(styleConfigurations: [
|
||||
|
||||
@ -14,7 +14,7 @@ import Combine
|
||||
/// with approved built in text size configurations.
|
||||
@objcMembers
|
||||
@objc(VDSTitleLockup)
|
||||
open class TitleLockup: View {
|
||||
open class TitleLockup: View, ParentViewProtocol {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
@ -62,6 +62,8 @@ open class TitleLockup: View {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var children: [any ViewProtocol] { [eyebrowLabel, titleLabel, subTitleLabel] }
|
||||
|
||||
/// Aligns TitleLockup's subcomponent's text
|
||||
open var textAlignment: TextAlignment = .left { didSet { setNeedsUpdate() } }
|
||||
|
||||
|
||||
@ -14,7 +14,7 @@ import Combine
|
||||
/// or turn off a single option, setting or function.
|
||||
@objcMembers
|
||||
@objc(VDSToggle)
|
||||
open class Toggle: Control, Changeable, FormFieldable {
|
||||
open class Toggle: Control, Changeable, FormFieldable, ParentViewProtocol {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
@ -90,6 +90,8 @@ open class Toggle: Control, Changeable, FormFieldable {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var children: [any ViewProtocol] { [toggleView, label] }
|
||||
|
||||
open var onChangeSubscriber: AnyCancellable?
|
||||
|
||||
/// Actual toggle used in this component.
|
||||
|
||||
@ -11,7 +11,7 @@ import VDSCoreTokens
|
||||
|
||||
@objcMembers
|
||||
@objc(VDSTooltipDialog)
|
||||
open class TooltipDialog: View, UIScrollViewDelegate {
|
||||
open class TooltipDialog: View, UIScrollViewDelegate, ParentViewProtocol {
|
||||
|
||||
//--------------------------------------------------
|
||||
// MARK: - Initializers
|
||||
@ -55,6 +55,8 @@ open class TooltipDialog: View, UIScrollViewDelegate {
|
||||
//--------------------------------------------------
|
||||
// MARK: - Public Properties
|
||||
//--------------------------------------------------
|
||||
open var children: [any ViewProtocol] { [titleLabel, contentLabel] }
|
||||
|
||||
open var tooltipModel = Tooltip.TooltipModel() { didSet { setNeedsUpdate() } }
|
||||
|
||||
open var titleLabel = Label().with { label in
|
||||
|
||||
@ -42,15 +42,15 @@ extension ViewProtocol {
|
||||
public func setNeedsUpdate() {
|
||||
if shouldUpdateView {
|
||||
shouldUpdateView = false
|
||||
//let parent = self as? ParentViewProtocol
|
||||
//parent?.children.forEach{ $0.shouldUpdateView = false }
|
||||
let parent = self as? ParentViewProtocol
|
||||
parent?.children.forEach{ $0.shouldUpdateView = false }
|
||||
updateView()
|
||||
updateAccessibility()
|
||||
// parent?.children.forEach{
|
||||
// $0.updateView()
|
||||
// $0.updateAccessibility()
|
||||
// $0.shouldUpdateView = true
|
||||
// }
|
||||
parent?.children.forEach{
|
||||
$0.updateView()
|
||||
$0.updateAccessibility()
|
||||
$0.shouldUpdateView = true
|
||||
}
|
||||
shouldUpdateView = true
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user