104 lines
3.0 KiB
Swift
104 lines
3.0 KiB
Swift
//
|
|
// TextLink.swift
|
|
// VDS
|
|
//
|
|
// Created by Matt Bruce on 11/1/22.
|
|
//
|
|
|
|
import Foundation
|
|
import UIKit
|
|
import VDSColorTokens
|
|
import VDSFormControlsTokens
|
|
import Combine
|
|
|
|
@objc(VDSTextLink)
|
|
open class TextLink: Control {
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - Private Properties
|
|
//--------------------------------------------------
|
|
private var heightConstraint: NSLayoutConstraint?
|
|
private var label = Label()
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - Properties
|
|
//--------------------------------------------------
|
|
open var text: String? { didSet { didChange() } }
|
|
|
|
open var size: ButtonSize = .large { didSet { didChange() }}
|
|
|
|
private var height: CGFloat {
|
|
switch size {
|
|
case .large:
|
|
return 44
|
|
case .small:
|
|
return 32
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - Initializers
|
|
//--------------------------------------------------
|
|
required public init() {
|
|
super.init(frame: .zero)
|
|
initialSetup()
|
|
}
|
|
|
|
public override init(frame: CGRect) {
|
|
super.init(frame: .zero)
|
|
initialSetup()
|
|
}
|
|
|
|
public required init?(coder: NSCoder) {
|
|
super.init(coder: coder)
|
|
initialSetup()
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - Public Functions
|
|
//--------------------------------------------------
|
|
open override func initialSetup() {
|
|
super.initialSetup()
|
|
}
|
|
|
|
open override func setup() {
|
|
super.setup()
|
|
|
|
addSubview(label)
|
|
|
|
//add tapGesture to self
|
|
publisher(for: UITapGestureRecognizer()).sink { [weak self] _ in
|
|
self?.sendActions(for: .touchUpInside)
|
|
}.store(in: &subscribers)
|
|
|
|
//pin stackview to edges
|
|
label.topAnchor.constraint(equalTo: topAnchor).isActive = true
|
|
label.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
|
|
label.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
|
|
label.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
|
|
|
|
heightConstraint = heightAnchor.constraint(equalToConstant: height)
|
|
heightConstraint?.isActive = true
|
|
}
|
|
|
|
open override func reset() {
|
|
super.reset()
|
|
size = .large
|
|
accessibilityCustomActions = []
|
|
accessibilityTraits = .staticText
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
// MARK: - Overrides
|
|
//--------------------------------------------------
|
|
open override func updateView() {
|
|
label.surface = surface
|
|
label.disabled = disabled
|
|
label.typograpicalStyle = size == .large ? TypographicalStyle.BodyLarge : TypographicalStyle.BodySmall
|
|
label.text = text ?? ""
|
|
label.attributes = [UnderlineLabelAttribute(location: 0, length: label.text!.count)]
|
|
heightConstraint?.constant = height
|
|
}
|
|
|
|
}
|