// // DatePickerViewController.swift // VDSSample // // Created by Matt Bruce on 4/11/24. // import Foundation import VDS class DatePickerViewController: BaseViewController { var disabledSwitch = Toggle() var requiredSwitch = Toggle() var labelTextField = TextField() var errorTextField = TextField() var helperTextField = TextField() var inlineLabelSwitch = Toggle() var readonlySwitch = Toggle() var transparentBgSwitch = Toggle() var errorSwitch = Toggle() var tooltipTitleTextField = TextField() var tooltipContentTextField = TextField() lazy var dateFormatPickerSelectorView = { PickerSelectorView(title: "shortNumeric", picker: self.picker, items: DatePicker.DateFormat.allCases) }() override func viewDidLoad() { super.viewDidLoad() addContentTopView(view: component) setupModel() setupPicker() } override func setupForm(){ addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Disabled", view: disabledSwitch) addFormRow(label: "Required", view: requiredSwitch) addFormRow(label: "Date Format", view: dateFormatPickerSelectorView) addFormRow(label: "Label Text", view: labelTextField) addFormRow(label: "Helper Text", view: helperTextField) addFormRow(label: "Readonly", view: readonlySwitch) addFormRow(label: "Transparent Background", view: transparentBgSwitch) addFormRow(label: "Error", view: .makeWrapper(for: errorSwitch)) addFormRow(label: "Error Text", view: errorTextField) addFormRow(label: "ToolTip Title", view: tooltipTitleTextField) addFormRow(label: "ToolTip Content", view: tooltipContentTextField) disabledSwitch.onChange = { [weak self] sender in self?.component.isEnabled = !sender.isOn } requiredSwitch.onChange = { [weak self] sender in self?.component.isRequired = sender.isOn } readonlySwitch.onChange = { [weak self] sender in self?.component.isReadOnly = sender.isOn } transparentBgSwitch.onChange = { [weak self] sender in self?.component.transparentBackground = sender.isOn } errorSwitch .publisher(for: .valueChanged) .sink { [weak self] sender in guard let self else { return } component.showError = sender.isOn if component.showError != sender.isOn { self.errorSwitch.isOn = self.component.showError } }.store(in: &subscribers) labelTextField .textPublisher .sink { [weak self] text in self?.component.labelText = text }.store(in: &subscribers) helperTextField .textPublisher .sink { [weak self] text in self?.component.helperText = text }.store(in: &subscribers) errorTextField .textPublisher .sink { [weak self] text in self?.component.errorText = text }.store(in: &subscribers) tooltipTitleTextField .textPublisher .sink { [weak self] text in self?.updateTooltip() }.store(in: &subscribers) tooltipContentTextField .textPublisher .sink { [weak self] text in self?.updateTooltip() }.store(in: &subscribers) } func setupModel() { component.selectedDate = Calendar.current.date(byAdding: .day, value: -5, to: Date()) component.labelText = "Date" component.helperText = "Pick a date for your needs." component.errorText = "Enter a date." component.tooltipModel = .init(title: "Check your date.", content:"Here is the content for your date component") component.onChange = { c in print("selected value: \(c.value ?? "no date selected")") } //setup UI disabledSwitch.isOn = !component.isEnabled requiredSwitch.isOn = component.isRequired surfacePickerSelectorView.text = component.surface.rawValue labelTextField.text = component.labelText helperTextField.text = component.helperText readonlySwitch.isOn = false transparentBgSwitch.isOn = false errorSwitch.isOn = component.showError errorTextField.text = component.errorText tooltipTitleTextField.text = component.tooltipModel?.title tooltipContentTextField.text = component.tooltipModel?.content } func setupPicker() { surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.surface = item self?.contentTopView.backgroundColor = item.color } dateFormatPickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.dateFormat = item } } func updateTooltip() { let title = tooltipTitleTextField.text ?? "" let content = tooltipContentTextField.text ?? "" component.tooltipModel = !title.isEmpty || !content.isEmpty ? .init(title: title, content: content) : nil } }