// // TextAreaViewController.swift // VDSSample // // Created by Matt Bruce on 1/10/23. // import Foundation import Foundation import UIKit import VDS import VDSColorTokens import Combine class TextAreaViewController: BaseViewController { var disabledSwitch = Toggle() var requiredSwitch = Toggle() var labelTextField = TextField() var errorTextField = TextField() var helperTextField = TextField() var widthTextField = NumericField() var showErrorSwitch = Toggle() var tooltipTitleTextField = TextField() var tooltipContentTextField = TextField() var textArea = TextArea() override func viewDidLoad() { super.viewDidLoad() addContentTopView(view: textArea) setupForm() setupPicker() setupModel() } override func allTextFields() -> [TextField]? { [labelTextField, errorTextField, helperTextField, widthTextField, tooltipTitleTextField, tooltipContentTextField] } func setupForm(){ addFormRow(label: "Disabled", view: .makeWrapper(for: disabledSwitch)) addFormRow(label: "Required", view: .makeWrapper(for: requiredSwitch)) addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Label Text", view: labelTextField) addFormRow(label: "Helper Text", view: helperTextField) addFormRow(label: "Error", view: .makeWrapper(for: showErrorSwitch)) addFormRow(label: "Error Text", view: errorTextField) addFormRow(label: "Width", view: widthTextField) addFormRow(label: "ToolTip Title", view: tooltipTitleTextField) addFormRow(label: "ToolTip Content", view: tooltipContentTextField) requiredSwitch.onChange = { [weak self] sender in self?.textArea.required = sender.isOn } showErrorSwitch.onChange = { [weak self] sender in guard let self else { return } self.textArea.showError = sender.isOn if self.textArea.showError != sender.isOn { self.showErrorSwitch.isOn = self.textArea.showError } } disabledSwitch.onChange = { [weak self] sender in self?.textArea.disabled = sender.isOn } labelTextField .textPublisher .sink { [weak self] text in self?.textArea.labelText = text }.store(in: &subscribers) helperTextField .textPublisher .sink { [weak self] text in self?.textArea.helperText = text }.store(in: &subscribers) errorTextField .textPublisher .sink { [weak self] text in self?.textArea.errorText = text }.store(in: &subscribers) widthTextField .textPublisher .sink { [weak self] width in guard let width = Float(width) else { return } self?.textArea.width = CGFloat(width) }.store(in: &subscribers) tooltipTitleTextField .textPublisher .sink { [weak self] text in self?.textArea.tooltipTitle = text }.store(in: &subscribers) tooltipContentTextField .textPublisher .sink { [weak self] text in self?.textArea.tooltipContent = text }.store(in: &subscribers) } func setupModel() { textArea.width = 328 textArea.labelText = "Street Address" textArea.helperText = "For example: 123 Verizon St" textArea.errorText = "Enter a valid address." textArea.tooltipTitle = "Check the formatting of your address" textArea.tooltipContent = "House/Building number then street name" textArea .publisher(for: .valueChanged) .sink { textArea in if let text = textArea.value { print("text entry: \(text)") } else { print("text entry: null") } }.store(in: &subscribers) //setup UI surfacePickerSelectorView.text = textArea.surface.rawValue disabledSwitch.isOn = textArea.disabled requiredSwitch.isOn = textArea.required labelTextField.text = textArea.labelText helperTextField.text = textArea.helperText showErrorSwitch.isOn = textArea.showError errorTextField.text = textArea.errorText tooltipTitleTextField.text = textArea.tooltipTitle tooltipContentTextField.text = textArea.tooltipContent } //Picker func setupPicker(){ surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.textArea.surface = item self?.contentTopView.backgroundColor = item.color } } }