From 2edd58c6d89cc08e6ad6990fa53e1da60e0fd5d6 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Mon, 1 Aug 2022 11:54:27 -0500 Subject: [PATCH] updated for accessable and ensure label on showtext/textposition changes Signed-off-by: Matt Bruce --- VDS/Components/Toggle/VDSToggle.swift | 39 ++++++++++++++++++--------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/VDS/Components/Toggle/VDSToggle.swift b/VDS/Components/Toggle/VDSToggle.swift index 124b4917..34a6c275 100644 --- a/VDS/Components/Toggle/VDSToggle.swift +++ b/VDS/Components/Toggle/VDSToggle.swift @@ -20,7 +20,7 @@ import Combine @objcMembers open class VDSToggle: VDSControl, Modelable, Changable { public typealias ModelType = VDSToggleModel - @Published public var model: ModelType = DefaultToggleModel() + @Published open var model: ModelType = DefaultToggleModel() private var cancellable: AnyCancellable? //-------------------------------------------------- @@ -83,7 +83,13 @@ import Combine // MARK: - Computed Properties //-------------------------------------------------- @Proxy(\.model.showText) - public var showText: Bool + public var showText: Bool { + didSet { + if oldValue != showText { + ensureLabel() + } + } + } @Proxy(\.model.onText) public var onText: String @@ -92,7 +98,13 @@ import Combine public var offText: String @Proxy(\.model.textPosition) - public var textPosition: VDSTextPosition + public var textPosition: VDSTextPosition { + didSet { + if oldValue != textPosition { + ensureLabel() + } + } + } @Proxy(\.model.fontSize) public var fontSize: VDSFontSize @@ -103,9 +115,12 @@ import Combine @Proxy(\.model.surface) public var surface: Surface - @Proxy(\VDSToggle.model.on) + @Proxy(\.model.on) open var isOn: Bool + @Proxy(\.model.disabled) + open var disabled: Bool + open override var isEnabled: Bool { get { !model.disabled } set { @@ -132,7 +147,8 @@ import Combine // MARK: - Initializers //-------------------------------------------------- public required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") + super.init(coder: coder) + setup() } public override init(frame: CGRect) { @@ -179,10 +195,7 @@ import Combine super.setupView() isAccessibilityElement = true - setAccessibilityHint() - setAccessibilityLabel() accessibilityTraits = .button - addSubview(stackView) let toggleSize = Self.toggleSize @@ -317,9 +330,9 @@ import Combine /// Follow the SwiftUI View paradigm /// - Parameter viewModel: state - private func onStateChange(viewModel: ModelType) { + open func onStateChange(viewModel: ModelType) { let enabled = !viewModel.disabled - + label.set(with: viewModel) label.text = viewModel.on ? viewModel.onText : viewModel.offText @@ -367,9 +380,9 @@ import Combine backgroundColor = viewModel.surface == .dark ? VDSColor.backgroundPrimaryDark : .clear isUserInteractionEnabled = !viewModel.disabled - accessibilityHint = enabled ? viewModel.accessibilityHintEnabled :viewModel.accessibilityHintDisabled - accessibilityValue = viewModel.on ? viewModel.accessibilityValueEnabled : viewModel.accessibilityValueDisabled - accessibilityLabel = viewModel.on ? viewModel.accessibilityLabelEnabled : viewModel.accessibilityLabelDisabled + setAccessibilityHint(enabled) + setAccessibilityValue(viewModel.on) + setAccessibilityLabel(viewModel.on) setNeedsLayout() layoutIfNeeded()