// // TabsViewController.swift // VDSSample // // Created by Matt Bruce on 5/18/23. // import Foundation import UIKit import VDS import Combine import VDSColorTokens class TabsViewController: BaseViewController { var disabledSwitch = Toggle() var borderlineSwitch = Toggle() var fillContainerSwitch = Toggle() var sampleSwitch = Toggle() var widthValueTextField = NumericField() var widthPercentageTextField = NumericField() var verticalOrientationFormStackView: UIStackView = { return UIStackView().with { $0.translatesAutoresizingMaskIntoConstraints = false $0.alignment = .fill $0.distribution = .fillProportionally $0.axis = .vertical $0.spacing = 10 $0.isHidden = true } }() var horizontalOrientationFormStackView: UIStackView = { return UIStackView().with { $0.translatesAutoresizingMaskIntoConstraints = false $0.alignment = .fill $0.distribution = .fillProportionally $0.axis = .vertical $0.spacing = 10 } }() override func allTextFields() -> [TextField]? { [widthValueTextField, widthPercentageTextField] } lazy var orientationPickerSelectorView = { PickerSelectorView(title: "", picker: self.picker, items: Tabs.Orientation.allCases) }() lazy var indicatorPositionPickerSelectorView = { PickerSelectorView(title: "", picker: self.picker, items: Tabs.IndicatorPosition.allCases) }() lazy var sizePickerSelectorView = { PickerSelectorView(title: "", picker: self.picker, items: Tabs.Size.allCases) }() lazy var overflowPickerSelectorView = { PickerSelectorView(title: "", picker: self.picker, items: Tabs.Overflow.allCases) }() override func viewDidLoad() { super.viewDidLoad() addContentTopView(view: component) setupPicker() setupModel() } override func setupForm(){ super.setupForm() addFormRow(label: "Large Sample", view: .makeWrapper(for: sampleSwitch)) addFormRow(label: "Disabled", view: .makeWrapper(for: disabledSwitch)) addFormRow(label: "Show Borderline", view: .makeWrapper(for: borderlineSwitch)) addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Size", view: sizePickerSelectorView) if UIDevice.isIPad { addFormRow(label: "Orientation", view: orientationPickerSelectorView) // //only in vertical mode // addFormRow(label: "% Width (0.25 -> 1.0)", view: widthPercentageTextField, stackView: verticalOrientationFormStackView) // addFormRow(label: "# Width", view: widthValueTextField, stackView: verticalOrientationFormStackView) } //only in horizontal mode addFormRow(label: "Fill Container", view: .makeWrapper(for: fillContainerSwitch), stackView: horizontalOrientationFormStackView) addFormRow(label: "Indicator Position", view: indicatorPositionPickerSelectorView, stackView: horizontalOrientationFormStackView) addFormRow(label: "Overflow", view: overflowPickerSelectorView, stackView: horizontalOrientationFormStackView) // formStackView.addArrangedSubview(verticalOrientationFormStackView) formStackView.addArrangedSubview(horizontalOrientationFormStackView) disabledSwitch.onChange = { [weak self] sender in self?.component.disabled = sender.isOn } borderlineSwitch.onChange = { [weak self] sender in self?.component.borderLine = sender.isOn } fillContainerSwitch.onChange = { [weak self] sender in self?.component.fillContainer = sender.isOn } sampleSwitch.onChange = { [weak self] sender in guard let self else { return } self.component.selectedIndex = 0 self.component.tabModels = sender.isOn ? self.allTabs : self.some } // widthValueTextField.textPublisher.sink { [weak self] text in // if let value = Double(text) { // self?.component.width = .value(value) // self?.widthPercentageTextField.text = "" // // } // }.store(in: &subscribers) // // widthPercentageTextField.textPublisher.sink { [weak self] text in // if let value = Double(text) { // self?.component.width = .percentage(value) // self?.widthValueTextField.text = "" // } // }.store(in: &subscribers) } var allTabs: [Tabs.TabModel] = [ .init(text: "Accessories"), .init(text: "Internet and TV"), .init(text: "Customer Service"), .init(text: "Contact Us") ] var some: [Tabs.TabModel] = [ .init(text: "Accessories"), .init(text: "Internet and TV") ] func setupModel() { //set to the large sample component.tabModels = allTabs //setup UI surfacePickerSelectorView.text = component.surface.rawValue sizePickerSelectorView.text = component.size.rawValue orientationPickerSelectorView.text = component.orientation.rawValue indicatorPositionPickerSelectorView.text = component.indicatorPosition.rawValue overflowPickerSelectorView.text = component.overflow.rawValue disabledSwitch.isOn = component.disabled borderlineSwitch.isOn = component.borderLine fillContainerSwitch.isOn = component.fillContainer sampleSwitch.isOn = true // updateWidth() } func setupPicker(){ surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.surface = item self?.contentTopView.backgroundColor = item.color } sizePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.size = item } orientationPickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.orientation = item self?.verticalOrientationFormStackView.isHidden = item == .horizontal self?.horizontalOrientationFormStackView.isHidden = item == .vertical } indicatorPositionPickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.indicatorPosition = item } overflowPickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.overflow = item } } // func updateWidth() { // switch component.width { // case .percentage(let percentage): // widthPercentageTextField.text = "\(percentage)" // case .value(let value): // widthValueTextField.text = "\(value)" // widthPercentageTextField.text = "" // @unknown default: // print("") // } // } }