vds_ios_sample/VDSSample/ViewControllers/BadgeViewController.swift
Matt Bruce 2b582cd39c refactored
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
2024-10-08 09:35:10 -05:00

170 lines
5.0 KiB
Swift

//
// BadgeViewController.swift
// VDSSample
//
// Created by Matt Bruce on 9/22/22.
//
import Foundation
import UIKit
import VDS
import VDSCoreTokens
import Combine
class BadgeViewController: BaseViewController<Badge> {
enum NumberOfLines: String, CaseIterable {
case unlimited
case one
case two
case three
case four
var intValue: Int {
switch self {
case .unlimited:
return 0
case .one:
return 1
case .two:
return 2
case .three:
return 3
case .four:
return 4
}
}
}
enum FillColor: String, CaseIterable {
case red, yellow, green, orange, blue, black, white, token, custom
}
enum TextColor: String, CaseIterable {
case `default`, token, custom
}
lazy var numberOfLinesPickerSelectorView = {
PickerSelectorView(title: "one",
picker: self.picker,
items: NumberOfLines.allCases)
}()
var textField = TextField()
var maxWidthTextField = NumericField()
override func viewDidLoad() {
super.viewDidLoad()
addContentTopView(view: component, pinTrailing: false)
setupPicker()
setupModel()
}
lazy var fillColorSection = {
TokenColorPickerSection<FillColor>(rowTitle: "Fill Color", picker: self.picker).with {
$0.onSelected = { [weak self] item in
guard let self else { return }
var fillColor: Badge.FillColor = .red
switch item {
case .red:
fillColor = .red
case .yellow:
fillColor = .yellow
case .green:
fillColor = .green
case .orange:
fillColor = .orange
case .blue:
fillColor = .blue
case .black:
fillColor = .black
case .white:
fillColor = .white
default:
break
}
component.fillColor = fillColor
}
$0.onTokenSelected = { [weak self] color in
guard let self else { return }
component.fillColor = .token(color)
}
$0.onColorSelected = { [weak self] color in
guard let self else { return }
component.fillColor = .custom(color)
}
}
}()
lazy var textColorSection = {
TokenColorPickerSection<TextColor>(rowTitle: "Text Color", picker: self.picker).with {
$0.onSelected = { [weak self] item in
guard let self else { return }
component.textColor = nil
}
$0.onTokenSelected = { [weak self] color in
guard let self else { return }
component.textColor = .token(color)
}
$0.onColorSelected = { [weak self] color in
guard let self else { return }
component.textColor = .custom(color)
}
}
}()
override func setupForm(){
super.setupForm()
addFormRow(label: "Surface", view: surfacePickerSelectorView)
append(section: fillColorSection)
append(section: textColorSection)
addFormRow(label: "Text", view: textField)
addFormRow(label: "Max Width", view: maxWidthTextField)
addFormRow(label: "Number of Lines", view: numberOfLinesPickerSelectorView)
textField
.textPublisher
.sink { [weak self] text in
self?.component.text = text
}.store(in: &subscribers)
maxWidthTextField
.numberPublisher
.sink { [weak self] number in
guard let number else { return }
self?.component.maxWidth = number.cgFloatValue
}.store(in: &subscribers)
}
func setupModel() {
component.fillColor = .red
component.text = "Terms and conditions"
component.numberOfLines = 1
//setup UI
surfacePickerSelectorView.text = component.surface.rawValue
textField.text = component.text
fillColorSection.setDefault(value: .red)
textColorSection.setDefault(value: .default)
}
func setupPicker(){
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
self?.component.surface = item
self?.contentTopView.backgroundColor = item.color
}
}
}
extension BadgeViewController: ComponentSampleable {
static func makeSample() -> ComponentSample {
let c = Self()
c.setupModel()
return ComponentSample(component: c.component, trailingPinningType: .lessThanOrEqual)
}
}