From ed6344a9a4b43ae0575a0c6a92d247c83caa98b6 Mon Sep 17 00:00:00 2001 From: Vasavi Kanamarlapudi Date: Fri, 12 Jul 2024 13:45:46 +0530 Subject: [PATCH] Digital ACT-191 ONEAPP-9311 story: setup form to pass values to stepper --- .../InputStepperViewController.swift | 151 +++++++++++++++++- .../ViewControllers/MenuViewController.swift | 1 + 2 files changed, 151 insertions(+), 1 deletion(-) diff --git a/VDSSample/ViewControllers/InputStepperViewController.swift b/VDSSample/ViewControllers/InputStepperViewController.swift index 64e79a8..06ad839 100644 --- a/VDSSample/ViewControllers/InputStepperViewController.swift +++ b/VDSSample/ViewControllers/InputStepperViewController.swift @@ -11,9 +11,158 @@ import VDS import VDSCoreTokens import Combine -class InputStepperViewController: BaseViewController { +class InputStepperViewController: BaseViewController { + + var controlWidthTextField = NumericField() + var defaultValueField = NumericField() + var maxValueTextField = NumericField() + var minValueTextField = NumericField() + var trailingTextField = TextField() + + var widthTextField = NumericField() + var disabledSwitch = Toggle() + var readOnlySwitch = Toggle() + var requiredSwitch = Toggle() + var labelTextField = TextField() + var showErrorSwitch = Toggle() + var errorTextField = TextField() + var helperTextField = TextField() + var tooltipTitleTextField = TextField() + var tooltipContentTextField = TextField() + + lazy var controlwidthPickerSelectorView = { + PickerSelectorView(title: "", picker: self.picker, items: InputStepper.controlWidth.allCases) + } + + lazy var helperTextPlacementPickerSelectorView = { + PickerSelectorView(title: "", picker: self.picker, items: InputStepper.HelperTextPlacement.allCases) + }() + override func viewDidLoad() { super.viewDidLoad() + addContentTopView(view: component) + setupPicker() + setupModel() + } + + override func setupForm(){ + super.setupForm() + + addFormRow(label: "Surface", view: surfacePickerSelectorView) + addFormRow(label: "Control Width", view: controlWidthTextField) + addFormRow(label: "Default Value", view: defaultValueField) + addFormRow(label: "Max Value", view: maxValueTextField) + addFormRow(label: "Min Value", view: minValueTextField) + addFormRow(label: "Trailing Text", view: trailingTextField) + + addFormRow(label: "Width", view: widthTextField) + addFormRow(label: "Disabled", view: disabledSwitch) + addFormRow(label: "Read Only", view: readOnlySwitch) + addFormRow(label: "Required", view: requiredSwitch) + addFormRow(label: "Label Text", view: labelTextField) + addFormRow(label: "Error", view: showErrorSwitch) + addFormRow(label: "Error Text", view: errorTextField) + addFormRow(label: "Helper Text Placement", view: helperTextPlacementPickerSelectorView) + addFormRow(label: "Helper Text", view: helperTextField) + addFormRow(label: "Tooltip Title", view: tooltipTitleTextField) + addFormRow(label: "Tooltip Content", view: tooltipContentTextField) + + requiredSwitch.onChange = { [weak self] sender in + self?.component.isRequired = sender.isOn + } + + showErrorSwitch.onChange = { [weak self] sender in + guard let self else { return } + self.component.showError = sender.isOn + if self.component.showError != sender.isOn { + self.showErrorSwitch.isOn = self.component.showError + } + } + + disabledSwitch.onChange = { [weak self] sender in + self?.component.isEnabled = !sender.isOn + } + + readOnlySwitch.onChange = { [weak self] sender in + self?.component.isReadOnly = sender.isOn + } + + 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) + +// widthTextField +// .numberPublisher +// .sink { [weak self] number in +// self?.component.width = number?.cgFloatValue +// }.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 updateTooltip() { + let title = tooltipTitleTextField.text ?? "" + let content = tooltipContentTextField.text ?? "" + + component.tooltipModel = !title.isEmpty || !content.isEmpty ? .init(title: title, + content: content) : nil + } + + //Picker + func setupPicker(){ + surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.surface = item + self?.contentTopView.backgroundColor = item.color + } + + helperTextPlacementPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.helperTextPlacement = item + } + } + + func setupModel() { + component.labelText = "Quantity" + component.helperText = "Add up to 99 lines." + component.errorText = "You must choose a number of lines before advancing to the next step." + component.defaultValue = 2 + component.trailingText = "lines" + + +// component.onChange = { component in +// if let text = component.value { +// print("text entry: \(text)") +// } else { +// print("text entry: null") +// } +// } + + //setup UI + surfacePickerSelectorView.text = component.surface.rawValue + helperTextPlacementPickerSelectorView.text = component.helperTextPlacement.rawValue } } diff --git a/VDSSample/ViewControllers/MenuViewController.swift b/VDSSample/ViewControllers/MenuViewController.swift index 4ce88ab..ff15e16 100644 --- a/VDSSample/ViewControllers/MenuViewController.swift +++ b/VDSSample/ViewControllers/MenuViewController.swift @@ -83,6 +83,7 @@ class MenuViewController: UITableViewController, TooltipLaunchable { MenuComponent(title: "DropdownSelect", completed: true, viewController: DropdownSelectViewController.self), MenuComponent(title: "Icon", completed: true, viewController: IconViewController.self), MenuComponent(title: "InputField", completed: true, viewController: InputFieldViewController.self), + MenuComponent(title: "InputStepper", completed: false, viewController: InputStepperViewController.self), MenuComponent(title: "Label", completed: true, viewController: LabelViewController.self), MenuComponent(title: "Line", completed: true, viewController: LineViewController.self), MenuComponent(title: "Loader", completed: true, viewController: LoaderViewController.self),