// // LabelViewController.swift // VDSSample // // Created by Matt Bruce on 8/16/22. // import Foundation import UIKit import VDS import VDSColorTokens class LabelViewController: ModelScrollViewController { lazy var surfacePickerSelectorView = { SurfacePickerSelectorView(picker: self.picker) }() lazy var textSizePickerSelectorView = { TextSizePickerSelectorView(title: "", picker: self.picker) }() lazy var fontCategoryPickerSelectorView = { FontCategoryPickerSelectorView(title: "", picker: self.picker) }() var boldSwitch = UISwitch() var disabledSwitch = UISwitch() var textField = TextField() private var isBold: Bool = false var label = Label() override func viewDidLoad() { super.viewDidLoad() addContentTopView(view: label) setupForm() setupPicker() setupModel() } func setupForm(){ addFormRow(label: "Disabled", view: disabledSwitch) addFormRow(label: "Bold", view: boldSwitch) addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Font Category", view: fontCategoryPickerSelectorView) addFormRow(label: "Text Size", view: textSizePickerSelectorView) addFormRow(label: "Text", view: textField) disabledSwitch .publisher(for: .valueChanged) .sink { [weak self] sender in self?.label.disabled = sender.isOn }.store(in: &subscribers) boldSwitch .publisher(for: .valueChanged) .sink { [weak self] sender in self?.isBold = sender.isOn self?.updateLabelStyle() }.store(in: &subscribers) textField .textPublisher .sink { [weak self] text in self?.label.text = text }.store(in: &subscribers) } func setupModel() { var defaultModel = DefaultLabelModel() defaultModel.text = "Label Component" defaultModel.typograpicalStyle = .FeatureSmall set(with: defaultModel) label .handlerPublisher() .sink { [weak self] viewModel in self?.model = viewModel }.store(in: &subscribers) //setup UI surfacePickerSelectorView.text = model.surface.rawValue disabledSwitch.isOn = model.disabled boldSwitch.isOn = isBold textField.text = model.text //set the font fontCategory = .feature fontCategoryPickerSelectorView.text = "Feature" textSize = .small textSizePickerSelectorView.text = "Small" } override func updateView(viewModel: DefaultLabelModel) { label.set(with: viewModel) } //Picker private var fontCategory: TypographicalStyle.FontCategory = .feature { didSet { fontCategoryPickerSelectorView.text = fontCategory.rawValue textSizePickerSelectorView.items = fontCategory.sizes if textSizePickerSelectorView.items.count > 0 { textSize = textSizePickerSelectorView.items[0] } else { textSize = nil } updateLabelStyle() } } private var textSize: TypographicalStyle.FontSize? = .large { didSet { textSizePickerSelectorView.text = textSize?.rawValue ?? "" updateLabelStyle() } } func updateLabelStyle(){ if let style = fontCategory.style(for: textSize, isBold: isBold) { label.typograpicalStyle = style } } func setupPicker(){ surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.label.surface = item self?.contentTopView.backgroundColor = item.color self?.surfacePickerSelectorView.text = item.rawValue } textSizePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.textSize = item } fontCategoryPickerSelectorView.onPickerDidSelect = { [weak self] item in self?.fontCategory = item } } }