From e666a792e067d3422ef0d8aa1241fc80ef4c45bf Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 11 Apr 2024 16:50:54 -0500 Subject: [PATCH 01/24] initial commit for datePicker Signed-off-by: Matt Bruce --- VDSSample.xcodeproj/project.pbxproj | 4 + VDSSample/Extensions/IconName.swift | 1 - .../DatePickerViewController.swift | 141 ++++++++++++++++++ .../ViewControllers/MenuViewController.swift | 1 + 4 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 VDSSample/ViewControllers/DatePickerViewController.swift diff --git a/VDSSample.xcodeproj/project.pbxproj b/VDSSample.xcodeproj/project.pbxproj index 128bc3d..e5cf453 100644 --- a/VDSSample.xcodeproj/project.pbxproj +++ b/VDSSample.xcodeproj/project.pbxproj @@ -43,6 +43,7 @@ EA0D1C312A673F3500E5C127 /* RadioButtonViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0D1C302A673F3500E5C127 /* RadioButtonViewController.swift */; }; EA0D1C332A673FD400E5C127 /* RadioButtonItemViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0D1C322A673FD400E5C127 /* RadioButtonItemViewController.swift */; }; EA0FC2C12912DC5500DF80B4 /* TextLinkCaretViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0FC2C02912DC5500DF80B4 /* TextLinkCaretViewController.swift */; }; + EA1758462BC8893700A5C0D9 /* DatePickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1758452BC8893700A5C0D9 /* DatePickerViewController.swift */; }; EA297A682A02F5320031ED56 /* TableViewTestController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA297A672A02F5320031ED56 /* TableViewTestController.swift */; }; EA3C3B9D289966EF000CA526 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3C3B9C289966EF000CA526 /* AppDelegate.swift */; }; EA3C3B9F289966EF000CA526 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3C3B9E289966EF000CA526 /* SceneDelegate.swift */; }; @@ -142,6 +143,7 @@ EA0D1C302A673F3500E5C127 /* RadioButtonViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioButtonViewController.swift; sourceTree = ""; }; EA0D1C322A673FD400E5C127 /* RadioButtonItemViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioButtonItemViewController.swift; sourceTree = ""; }; EA0FC2C02912DC5500DF80B4 /* TextLinkCaretViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLinkCaretViewController.swift; sourceTree = ""; }; + EA1758452BC8893700A5C0D9 /* DatePickerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatePickerViewController.swift; sourceTree = ""; }; EA297A672A02F5320031ED56 /* TableViewTestController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableViewTestController.swift; sourceTree = ""; }; EA3C3B99289966EF000CA526 /* VDSSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VDSSample.app; sourceTree = BUILT_PRODUCTS_DIR; }; EA3C3B9C289966EF000CA526 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -330,6 +332,7 @@ EA89204D28B67332006B9984 /* CheckBoxGroupViewController.swift */, EAF7F09B2899B92400B287F5 /* CheckboxItemViewController.swift */, EA0D1C2E2A66CFE900E5C127 /* CheckboxViewController.swift */, + EA1758452BC8893700A5C0D9 /* DatePickerViewController.swift */, 186D13CC2BBA990800986B53 /* DropdownSelectViewController.swift */, EA985C00296CC21C00F2FF2E /* IconViewController.swift */, EAA5EEAC28EB6924003B3210 /* InputFieldViewController.swift */, @@ -524,6 +527,7 @@ EA3C3BB428996775000CA526 /* PickerBase.swift in Sources */, EAB2376C29E9E74900AABE9A /* TrailingTooltipLabelViewController.swift in Sources */, EAB1D2C928AAAA1D00DAE764 /* BaseViewController.swift in Sources */, + EA1758462BC8893700A5C0D9 /* DatePickerViewController.swift in Sources */, EAD062AD2A3B86950015965D /* BadgeIndicatorViewController.swift in Sources */, EA5E305C295111050082B959 /* TileletViewController.swift in Sources */, EAD062A32A3913920015965D /* DropShawdowViewController.swift in Sources */, diff --git a/VDSSample/Extensions/IconName.swift b/VDSSample/Extensions/IconName.swift index 8dc6b69..7e96269 100644 --- a/VDSSample/Extensions/IconName.swift +++ b/VDSSample/Extensions/IconName.swift @@ -62,7 +62,6 @@ extension Icon.Name { public static let bucketTruck = Icon.Name(name: "bucket-truck") public static let bug = Icon.Name(name: "bug") public static let businessContinuity = Icon.Name(name: "business-continuity") - public static let calendar = Icon.Name(name: "calendar") public static let calibrate = Icon.Name(name: "calibrate") public static let callDisconnected = Icon.Name(name: "call-disconnected") public static let callerId = Icon.Name(name: "caller-id") diff --git a/VDSSample/ViewControllers/DatePickerViewController.swift b/VDSSample/ViewControllers/DatePickerViewController.swift new file mode 100644 index 0000000..70b2bdf --- /dev/null +++ b/VDSSample/ViewControllers/DatePickerViewController.swift @@ -0,0 +1,141 @@ +// +// 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() + + 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: "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.required = sender.isOn + } + + readonlySwitch.onChange = { [weak self] sender in + self?.component.readOnly = 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.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.required + 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 + } + } + + func updateTooltip() { + let title = tooltipTitleTextField.text ?? "" + let content = tooltipContentTextField.text ?? "" + + component.tooltipModel = !title.isEmpty || !content.isEmpty ? .init(title: title, + content: content) : nil + } +} diff --git a/VDSSample/ViewControllers/MenuViewController.swift b/VDSSample/ViewControllers/MenuViewController.swift index 86484c6..2916b7d 100644 --- a/VDSSample/ViewControllers/MenuViewController.swift +++ b/VDSSample/ViewControllers/MenuViewController.swift @@ -78,6 +78,7 @@ class MenuViewController: UITableViewController, TooltipLaunchable { MenuComponent(title: "Checkbox", completed: true, viewController: CheckboxViewController.self), MenuComponent(title: "CheckboxItem", completed: true, viewController: CheckboxItemViewController.self), MenuComponent(title: "CheckboxGroup", completed: true, viewController: CheckboxGroupViewController.self), + MenuComponent(title: "DatePicker", completed: false, viewController: DatePickerViewController.self), MenuComponent(title: "DropdownSelect", completed: true, viewController: DropdownSelectViewController.self), MenuComponent(title: "Icon", completed: true, viewController: IconViewController.self), MenuComponent(title: "InputField", completed: false, viewController: InputFieldViewController.self), From 6e1bab1b175f87306c46473ab063e5f42362c7e2 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 11 Apr 2024 17:28:06 -0500 Subject: [PATCH 02/24] added formatter Signed-off-by: Matt Bruce --- .../ViewControllers/DatePickerViewController.swift | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/VDSSample/ViewControllers/DatePickerViewController.swift b/VDSSample/ViewControllers/DatePickerViewController.swift index 70b2bdf..69690ca 100644 --- a/VDSSample/ViewControllers/DatePickerViewController.swift +++ b/VDSSample/ViewControllers/DatePickerViewController.swift @@ -21,7 +21,12 @@ class DatePickerViewController: BaseViewController { 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) @@ -33,6 +38,7 @@ class DatePickerViewController: BaseViewController { 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) @@ -101,6 +107,7 @@ class DatePickerViewController: BaseViewController { } 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." @@ -129,6 +136,11 @@ class DatePickerViewController: BaseViewController { self?.component.surface = item self?.contentTopView.backgroundColor = item.color } + + dateFormatPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.dateFormat = item + } + } func updateTooltip() { From 2e6b2d6b55837b218efb8eb74788fb6e6147b671 Mon Sep 17 00:00:00 2001 From: vasavk Date: Wed, 24 Apr 2024 18:04:57 +0530 Subject: [PATCH 03/24] Digital ACT-191 ONEAPP-7016 story: added new controller for calendar --- VDSSample.xcodeproj/project.pbxproj | 4 ++++ .../CalendarViewController.swift | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 VDSSample/ViewControllers/CalendarViewController.swift diff --git a/VDSSample.xcodeproj/project.pbxproj b/VDSSample.xcodeproj/project.pbxproj index fc9f459..6cb427f 100644 --- a/VDSSample.xcodeproj/project.pbxproj +++ b/VDSSample.xcodeproj/project.pbxproj @@ -35,6 +35,7 @@ 1808BEBE2BA4479500129230 /* CarouselScrollbarViewConttroller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1808BEBD2BA4479500129230 /* CarouselScrollbarViewConttroller.swift */; }; 1832AC5B2BA1347B008AE476 /* BreadcrumbsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1832AC5A2BA1347B008AE476 /* BreadcrumbsViewController.swift */; }; 186D13CD2BBA990800986B53 /* DropdownSelectViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 186D13CC2BBA990800986B53 /* DropdownSelectViewController.swift */; }; + 18A3F1302BD9332500498E4A /* CalendarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A3F12F2BD9332500498E4A /* CalendarViewController.swift */; }; 445BA07A29C088470036A7C5 /* NotificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 445BA07929C088470036A7C5 /* NotificationViewController.swift */; }; 44604AD929CE1CF900E62B51 /* LineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44604AD829CE1CF900E62B51 /* LineViewController.swift */; }; 5FC35BE928D5235A004EBEAC /* ButtonViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FC35BE828D5235A004EBEAC /* ButtonViewController.swift */; }; @@ -129,6 +130,7 @@ 1808BEBD2BA4479500129230 /* CarouselScrollbarViewConttroller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CarouselScrollbarViewConttroller.swift; sourceTree = ""; }; 1832AC5A2BA1347B008AE476 /* BreadcrumbsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BreadcrumbsViewController.swift; sourceTree = ""; }; 186D13CC2BBA990800986B53 /* DropdownSelectViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropdownSelectViewController.swift; sourceTree = ""; }; + 18A3F12F2BD9332500498E4A /* CalendarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarViewController.swift; sourceTree = ""; }; 445BA07929C088470036A7C5 /* NotificationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationViewController.swift; sourceTree = ""; }; 44604AD829CE1CF900E62B51 /* LineViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LineViewController.swift; sourceTree = ""; }; 5FC35BE828D5235A004EBEAC /* ButtonViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonViewController.swift; sourceTree = ""; }; @@ -317,6 +319,7 @@ EAB5FEEE2927E28400998C17 /* ButtonGroupViewController.swift */, EA81410D2A0ED8DC004F60D2 /* ButtonIconViewController.swift */, 5FC35BE828D5235A004EBEAC /* ButtonViewController.swift */, + 18A3F12F2BD9332500498E4A /* CalendarViewController.swift */, 1808BEBD2BA4479500129230 /* CarouselScrollbarViewConttroller.swift */, EA89204D28B67332006B9984 /* CheckBoxGroupViewController.swift */, EAF7F09B2899B92400B287F5 /* CheckboxItemViewController.swift */, @@ -529,6 +532,7 @@ 71B23C312B921D740027F7D9 /* PaginationViewController.swift in Sources */, EAF7F09C2899B92400B287F5 /* CheckboxItemViewController.swift in Sources */, EA0D1C2F2A66CFE900E5C127 /* CheckboxViewController.swift in Sources */, + 18A3F1302BD9332500498E4A /* CalendarViewController.swift in Sources */, EA596ABA2A16B2ED00300C4B /* TabsViewController.swift in Sources */, EA89204E28B67332006B9984 /* CheckBoxGroupViewController.swift in Sources */, EAA5EEAD28EB6924003B3210 /* InputFieldViewController.swift in Sources */, diff --git a/VDSSample/ViewControllers/CalendarViewController.swift b/VDSSample/ViewControllers/CalendarViewController.swift new file mode 100644 index 0000000..2fb4259 --- /dev/null +++ b/VDSSample/ViewControllers/CalendarViewController.swift @@ -0,0 +1,19 @@ +// +// CalendarViewController.swift +// VDSSample +// +// Created by Kanamarlapudi, Vasavi on 19/04/24. +// + +import Foundation +import UIKit +import VDS +import Combine +import VDSTokens + +class CalendarViewController: BaseViewController { + + override func viewDidLoad() { + super.viewDidLoad() + } +} From 2f259686d110ce786750688d2b0fcd3a4e889a1d Mon Sep 17 00:00:00 2001 From: vasavk Date: Mon, 29 Apr 2024 10:06:20 +0530 Subject: [PATCH 04/24] =?UTF-8?q?Digital=20ACT-191=20ONEAPP-7016=20story:?= =?UTF-8?q?=20Setup=20form=20to=20pass=20values=20=E2=80=8B=E2=80=8Bto=20c?= =?UTF-8?q?alendar=20properties.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CalendarViewController.swift | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) diff --git a/VDSSample/ViewControllers/CalendarViewController.swift b/VDSSample/ViewControllers/CalendarViewController.swift index 2fb4259..f43f7dc 100644 --- a/VDSSample/ViewControllers/CalendarViewController.swift +++ b/VDSSample/ViewControllers/CalendarViewController.swift @@ -13,7 +13,134 @@ import VDSTokens class CalendarViewController: BaseViewController { + var borderSwitch = Toggle() + var dateIndicatorSwitch = Toggle() + var transparentSwitch = Toggle() + var indicatorOneSwitch = Toggle() + var indicatorTwoSwitch = Toggle() + var indicatorThreeSwitch = Toggle() + var legendOneField = TextField() + var legendTwoField = TextField() + var legendThreeField = TextField() + private var minDateField: UIDatePicker = UIDatePicker() + private var maxDateField: UIDatePicker = UIDatePicker() + private var datePickerOne: UIDatePicker = UIDatePicker() + private var datePickerTwo: UIDatePicker = UIDatePicker() + private var datePickerThree: UIDatePicker = UIDatePicker() + var indicators: [CalendarBase.CalendarIndicatorModel] = [] + override func viewDidLoad() { super.viewDidLoad() + addContentTopView(view: component) + + setupPicker() + setupModel() + } + + override func setupForm() { + super.setupForm() + configurePicker(datePickerOne) + datePickerOne.tag = 1 + configurePicker(datePickerTwo) + datePickerTwo.tag = 2 + configurePicker(datePickerThree) + datePickerThree.tag = 3 + configurePicker(minDateField) + minDateField.tag = 4 + configurePicker(maxDateField) + maxDateField.tag = 5 + indicators = [ + .init(label: "Due Date", date: datePickerOne.date), + .init(label: "Auto Pay", date: datePickerTwo.date), + .init(label: "Scheduled", date: datePickerTwo.date), + ] + + //add form rows + addFormRow(label: "Surface", view: surfacePickerSelectorView) + addFormRow(label: "Hide Container Border", view: borderSwitch) + addFormRow(label: "Hide Current Date Indicator", view: dateIndicatorSwitch) + addFormRow(label: "Min Date", view: minDateField) + addFormRow(label: "Max Date", view: maxDateField) + addFormRow(label: "Transparent Background", view: transparentSwitch) + addFormRow(label: "Indicator One", view: indicatorOneSwitch) + addFormRow(label: "Indicator Two", view: indicatorTwoSwitch) + addFormRow(label: "Indicator Three", view: indicatorThreeSwitch) + addFormRow(label: "Legend One", view: legendOneField) + addFormRow(label: "Legend Two", view: legendTwoField) + addFormRow(label: "Legend Three", view: legendThreeField) + addFormRow(label: "Indicator One Date", view: datePickerOne) + addFormRow(label: "Indicator Two Date", view: datePickerTwo) + addFormRow(label: "Indicator Three Date", view: datePickerThree) + + legendOneField + .textPublisher + .sink { + [weak self] text in + self?.updateIndicatorData(label: text, index: 0) + }.store(in: &subscribers) + + legendTwoField + .textPublisher + .sink { + [weak self] text in + self?.updateIndicatorData(label: text, index: 1) + }.store(in: &subscribers) + + legendThreeField + .textPublisher + .sink { + [weak self] text in + self?.updateIndicatorData(label: text, index: 2) + }.store(in: &subscribers) + } + + func setupPicker(){ + surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.surface = item + self?.contentTopView.backgroundColor = item.color + } + } + + func setupModel() { + legendOneField.text = "Due Date" + legendTwoField.text = "Auto Pay" + legendThreeField.text = "Scheduled" + } + + func updateIndicatorData(label: String = "", date: Date = Date(), index:Int) { + + print("Indicator data here >>> ") + } + + func configurePicker(_ sender:UIDatePicker) { + // Set some of UIDatePicker properties + sender.timeZone = NSTimeZone.local + sender.backgroundColor = UIColor.white + + // Add an event to call onDidChangeDate function when value is changed. + sender.addTarget(self, action: #selector(self.datePickerValueChanged(_:)), for: .valueChanged) + } + + @objc func datePickerValueChanged(_ sender: UIDatePicker){ + + // Create date formatter + let dateFormatter: DateFormatter = DateFormatter() + + // Set date format + dateFormatter.dateFormat = "MM/dd/yyyy hh:mm a" + + // Apply date format + let selectedDate: String = dateFormatter.string(from: sender.date) + + let date: Date = dateFormatter.date(from: selectedDate) ?? sender.date //TO DO: check is this required? + + switch sender.tag { + case 1: updateIndicatorData(date: sender.date, index: 0) + case 2: updateIndicatorData(date: sender.date, index: 1) + case 3: updateIndicatorData(date: sender.date, index: 2) + default: break + } + + print("Selected value \(selectedDate)") } } From 75310e1c4dc737e1bef990a0ed7160404e6a08d5 Mon Sep 17 00:00:00 2001 From: vasavk Date: Tue, 30 Apr 2024 11:26:14 +0530 Subject: [PATCH 05/24] Digital ACT-191 ONEAPP-7016 story: passing updated text for indicators --- .../CalendarViewController.swift | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/VDSSample/ViewControllers/CalendarViewController.swift b/VDSSample/ViewControllers/CalendarViewController.swift index f43f7dc..31fa5e8 100644 --- a/VDSSample/ViewControllers/CalendarViewController.swift +++ b/VDSSample/ViewControllers/CalendarViewController.swift @@ -27,7 +27,7 @@ class CalendarViewController: BaseViewController { private var datePickerOne: UIDatePicker = UIDatePicker() private var datePickerTwo: UIDatePicker = UIDatePicker() private var datePickerThree: UIDatePicker = UIDatePicker() - var indicators: [CalendarBase.CalendarIndicatorModel] = [] + var indicators: [CalendarIndicatorModel] = [] override func viewDidLoad() { super.viewDidLoad() @@ -76,21 +76,21 @@ class CalendarViewController: BaseViewController { .textPublisher .sink { [weak self] text in - self?.updateIndicatorData(label: text, index: 0) + self?.updateIndicatorData(label: text, date: self?.datePickerOne.date, index: 0) }.store(in: &subscribers) legendTwoField .textPublisher .sink { [weak self] text in - self?.updateIndicatorData(label: text, index: 1) + self?.updateIndicatorData(label: text, date: self?.datePickerTwo.date, index: 1) }.store(in: &subscribers) legendThreeField .textPublisher .sink { [weak self] text in - self?.updateIndicatorData(label: text, index: 2) + self?.updateIndicatorData(label: text, date: self?.datePickerThree.date, index: 2) }.store(in: &subscribers) } @@ -102,14 +102,16 @@ class CalendarViewController: BaseViewController { } func setupModel() { + component.indicators = indicators legendOneField.text = "Due Date" legendTwoField.text = "Auto Pay" legendThreeField.text = "Scheduled" } - func updateIndicatorData(label: String = "", date: Date = Date(), index:Int) { - - print("Indicator data here >>> ") + func updateIndicatorData(label: String = "", date: Date?, index:Int) { + indicators[index].label = label + indicators[index].date = date ?? Date() + component.indicators = indicators } func configurePicker(_ sender:UIDatePicker) { @@ -131,16 +133,13 @@ class CalendarViewController: BaseViewController { // Apply date format let selectedDate: String = dateFormatter.string(from: sender.date) - - let date: Date = dateFormatter.date(from: selectedDate) ?? sender.date //TO DO: check is this required? switch sender.tag { - case 1: updateIndicatorData(date: sender.date, index: 0) - case 2: updateIndicatorData(date: sender.date, index: 1) - case 3: updateIndicatorData(date: sender.date, index: 2) + case 1: updateIndicatorData(label: legendOneField.text ?? "", date: sender.date, index: 0) + case 2: updateIndicatorData(label: legendTwoField.text ?? "", date: sender.date, index: 1) + case 3: updateIndicatorData(label: legendThreeField.text ?? "", date: sender.date, index: 2) default: break } - - print("Selected value \(selectedDate)") +// print("Selected value \(selectedDate)") } } From a6b06f507686e66ed15f6c5a52fd2ebba341c20e Mon Sep 17 00:00:00 2001 From: vasavk Date: Tue, 30 Apr 2024 19:23:40 +0530 Subject: [PATCH 06/24] Digital ACT-191 ONEAPP-7016 story: added calendar to menu --- VDSSample/ViewControllers/CalendarViewController.swift | 4 ++-- VDSSample/ViewControllers/MenuViewController.swift | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/VDSSample/ViewControllers/CalendarViewController.swift b/VDSSample/ViewControllers/CalendarViewController.swift index 31fa5e8..2c40971 100644 --- a/VDSSample/ViewControllers/CalendarViewController.swift +++ b/VDSSample/ViewControllers/CalendarViewController.swift @@ -27,7 +27,7 @@ class CalendarViewController: BaseViewController { private var datePickerOne: UIDatePicker = UIDatePicker() private var datePickerTwo: UIDatePicker = UIDatePicker() private var datePickerThree: UIDatePicker = UIDatePicker() - var indicators: [CalendarIndicatorModel] = [] + var indicators: [CalendarBase.CalendarIndicatorModel] = [] override func viewDidLoad() { super.viewDidLoad() @@ -132,7 +132,7 @@ class CalendarViewController: BaseViewController { dateFormatter.dateFormat = "MM/dd/yyyy hh:mm a" // Apply date format - let selectedDate: String = dateFormatter.string(from: sender.date) +// let selectedDate: String = dateFormatter.string(from: sender.date) switch sender.tag { case 1: updateIndicatorData(label: legendOneField.text ?? "", date: sender.date, index: 0) diff --git a/VDSSample/ViewControllers/MenuViewController.swift b/VDSSample/ViewControllers/MenuViewController.swift index c300171..b929fa5 100644 --- a/VDSSample/ViewControllers/MenuViewController.swift +++ b/VDSSample/ViewControllers/MenuViewController.swift @@ -74,6 +74,7 @@ class MenuViewController: UITableViewController, TooltipLaunchable { MenuComponent(title: "Button", completed: true, viewController: ButtonViewController.self), MenuComponent(title: "ButtonGroup", completed: true, viewController: ButtonGroupViewController.self), MenuComponent(title: "ButtonIcon", completed: true, viewController: ButtonIconViewController.self), + MenuComponent(title: "Calendar", completed: false, viewController: CalendarViewController.self), MenuComponent(title: "Carousel Scrollbar", completed: true, viewController: CarouselScrollbarViewConttroller.self), MenuComponent(title: "Checkbox", completed: true, viewController: CheckboxViewController.self), MenuComponent(title: "CheckboxItem", completed: true, viewController: CheckboxItemViewController.self), From c45775759af404ba6bafdef1da88fb61641199ee Mon Sep 17 00:00:00 2001 From: vasavk Date: Sat, 4 May 2024 15:03:23 +0530 Subject: [PATCH 07/24] Digital ACT-191 ONEAPP-7016 story: Hide/Show indicators by toggling on/off --- .../CalendarViewController.swift | 71 +++++++++++++++++-- 1 file changed, 64 insertions(+), 7 deletions(-) diff --git a/VDSSample/ViewControllers/CalendarViewController.swift b/VDSSample/ViewControllers/CalendarViewController.swift index 2c40971..680f9f2 100644 --- a/VDSSample/ViewControllers/CalendarViewController.swift +++ b/VDSSample/ViewControllers/CalendarViewController.swift @@ -31,12 +31,11 @@ class CalendarViewController: BaseViewController { override func viewDidLoad() { super.viewDidLoad() - addContentTopView(view: component) - + addContentTopView(view: component) setupPicker() setupModel() } - + override func setupForm() { super.setupForm() configurePicker(datePickerOne) @@ -52,7 +51,7 @@ class CalendarViewController: BaseViewController { indicators = [ .init(label: "Due Date", date: datePickerOne.date), .init(label: "Auto Pay", date: datePickerTwo.date), - .init(label: "Scheduled", date: datePickerTwo.date), + .init(label: "Scheduled", date: datePickerTwo.date) ] //add form rows @@ -92,6 +91,41 @@ class CalendarViewController: BaseViewController { [weak self] text in self?.updateIndicatorData(label: text, date: self?.datePickerThree.date, index: 2) }.store(in: &subscribers) + + indicatorOneSwitch.onChange = { [weak self] sender in + guard let self else { return } + if !sender.isOn { + component.indicators.removeAll() + } else { + self.setIndicatorsData() + } + } + + indicatorTwoSwitch.onChange = { [weak self] sender in + guard let self else { return } + if !sender.isOn { + if component.indicators.count > 2 { + component.indicators.removeLast() + component.indicators.removeLast() + } else if component.indicators.count == 2 { + component.indicators.removeLast() + } + } else { + self.setIndicatorsData() + } + + } + + indicatorThreeSwitch.onChange = { [weak self] sender in + guard let self else { return } + if !sender.isOn { + if component.indicators.count > 2 { + component.indicators.removeLast() + } + } else { + self.setIndicatorsData() + } + } } func setupPicker(){ @@ -106,6 +140,9 @@ class CalendarViewController: BaseViewController { legendOneField.text = "Due Date" legendTwoField.text = "Auto Pay" legendThreeField.text = "Scheduled" + indicatorOneSwitch.isOn = true + indicatorTwoSwitch.isOn = true + indicatorThreeSwitch.isOn = true } func updateIndicatorData(label: String = "", date: Date?, index:Int) { @@ -113,7 +150,27 @@ class CalendarViewController: BaseViewController { indicators[index].date = date ?? Date() component.indicators = indicators } - + + func setIndicatorsData() { + if indicatorOneSwitch.isOn && indicatorTwoSwitch.isOn && indicatorThreeSwitch.isOn { + component.indicators = [ + .init(label: self.legendOneField.text ?? "", date: datePickerOne.date), + .init(label: self.legendTwoField.text ?? "", date: datePickerTwo.date), + .init(label: self.legendThreeField.text ?? "", date: datePickerTwo.date) + ] + } else if indicatorOneSwitch.isOn && indicatorTwoSwitch.isOn && !indicatorThreeSwitch.isOn { + component.indicators = [ + .init(label: self.legendOneField.text ?? "", date: datePickerOne.date), + .init(label: self.legendTwoField.text ?? "", date: datePickerTwo.date), + ] + + } else if indicatorOneSwitch.isOn && !indicatorTwoSwitch.isOn { + component.indicators = [ + .init(label: self.legendOneField.text ?? "", date: datePickerOne.date), + ] + } + } + func configurePicker(_ sender:UIDatePicker) { // Set some of UIDatePicker properties sender.timeZone = NSTimeZone.local @@ -132,7 +189,7 @@ class CalendarViewController: BaseViewController { dateFormatter.dateFormat = "MM/dd/yyyy hh:mm a" // Apply date format -// let selectedDate: String = dateFormatter.string(from: sender.date) + // let selectedDate: String = dateFormatter.string(from: sender.date) switch sender.tag { case 1: updateIndicatorData(label: legendOneField.text ?? "", date: sender.date, index: 0) @@ -140,6 +197,6 @@ class CalendarViewController: BaseViewController { case 3: updateIndicatorData(label: legendThreeField.text ?? "", date: sender.date, index: 2) default: break } -// print("Selected value \(selectedDate)") + // print("Selected value \(selectedDate)") } } From b408be250ad9a4b41e8d34305ad99524e40f9d3d Mon Sep 17 00:00:00 2001 From: vasavk Date: Mon, 6 May 2024 09:51:07 +0530 Subject: [PATCH 08/24] Digital ACT-191 ONEAPP-7016 story: hide/show container border --- .../ViewControllers/CalendarViewController.swift | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/VDSSample/ViewControllers/CalendarViewController.swift b/VDSSample/ViewControllers/CalendarViewController.swift index 680f9f2..a2ae7a7 100644 --- a/VDSSample/ViewControllers/CalendarViewController.swift +++ b/VDSSample/ViewControllers/CalendarViewController.swift @@ -13,7 +13,7 @@ import VDSTokens class CalendarViewController: BaseViewController { - var borderSwitch = Toggle() + var containerBorderSwitch = Toggle() var dateIndicatorSwitch = Toggle() var transparentSwitch = Toggle() var indicatorOneSwitch = Toggle() @@ -31,7 +31,7 @@ class CalendarViewController: BaseViewController { override func viewDidLoad() { super.viewDidLoad() - addContentTopView(view: component) + addContentTopView(view: component) setupPicker() setupModel() } @@ -56,7 +56,7 @@ class CalendarViewController: BaseViewController { //add form rows addFormRow(label: "Surface", view: surfacePickerSelectorView) - addFormRow(label: "Hide Container Border", view: borderSwitch) + addFormRow(label: "Hide Container Border", view: containerBorderSwitch) addFormRow(label: "Hide Current Date Indicator", view: dateIndicatorSwitch) addFormRow(label: "Min Date", view: minDateField) addFormRow(label: "Max Date", view: maxDateField) @@ -71,6 +71,11 @@ class CalendarViewController: BaseViewController { addFormRow(label: "Indicator Two Date", view: datePickerTwo) addFormRow(label: "Indicator Three Date", view: datePickerThree) + containerBorderSwitch.onChange = { [weak self] sender in + guard let self else { return } + component.hideContainerBorder = sender.isOn + } + legendOneField .textPublisher .sink { From 68f7450255809d7f78540a02239f14992bd2a7ac Mon Sep 17 00:00:00 2001 From: vasavk Date: Mon, 6 May 2024 16:11:54 +0530 Subject: [PATCH 09/24] Digital ACT-191 ONEAPP-7016 story: hide/show current date indicator --- .../CalendarViewController.swift | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/VDSSample/ViewControllers/CalendarViewController.swift b/VDSSample/ViewControllers/CalendarViewController.swift index a2ae7a7..4506ffd 100644 --- a/VDSSample/ViewControllers/CalendarViewController.swift +++ b/VDSSample/ViewControllers/CalendarViewController.swift @@ -14,8 +14,8 @@ import VDSTokens class CalendarViewController: BaseViewController { var containerBorderSwitch = Toggle() - var dateIndicatorSwitch = Toggle() - var transparentSwitch = Toggle() + var hideCurrentDateIndicatorSwitch = Toggle() + var transparentBgSwitch = Toggle() var indicatorOneSwitch = Toggle() var indicatorTwoSwitch = Toggle() var indicatorThreeSwitch = Toggle() @@ -57,10 +57,10 @@ class CalendarViewController: BaseViewController { //add form rows addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Hide Container Border", view: containerBorderSwitch) - addFormRow(label: "Hide Current Date Indicator", view: dateIndicatorSwitch) + addFormRow(label: "Hide Current Date Indicator", view: hideCurrentDateIndicatorSwitch) addFormRow(label: "Min Date", view: minDateField) addFormRow(label: "Max Date", view: maxDateField) - addFormRow(label: "Transparent Background", view: transparentSwitch) + addFormRow(label: "Transparent Background", view: transparentBgSwitch) addFormRow(label: "Indicator One", view: indicatorOneSwitch) addFormRow(label: "Indicator Two", view: indicatorTwoSwitch) addFormRow(label: "Indicator Three", view: indicatorThreeSwitch) @@ -76,6 +76,16 @@ class CalendarViewController: BaseViewController { component.hideContainerBorder = sender.isOn } + hideCurrentDateIndicatorSwitch.onChange = { [weak self] sender in + guard let self else { return } + component.hideCurrentDateIndicator = sender.isOn + } + + transparentBgSwitch.onChange = { [weak self] sender in + guard let self else { return } + component.transparentBackground = sender.isOn + } + legendOneField .textPublisher .sink { @@ -148,6 +158,7 @@ class CalendarViewController: BaseViewController { indicatorOneSwitch.isOn = true indicatorTwoSwitch.isOn = true indicatorThreeSwitch.isOn = true + hideCurrentDateIndicatorSwitch.isOn = false } func updateIndicatorData(label: String = "", date: Date?, index:Int) { From d85003e66b2f4774bb2fcfb75905d665835fc807 Mon Sep 17 00:00:00 2001 From: vasavk Date: Tue, 7 May 2024 11:21:26 +0530 Subject: [PATCH 10/24] Digital ACT-191 ONEAPP-7016 story: added active dates, inactive dates options to form. --- .../CalendarViewController.swift | 159 ++++++++++++++---- 1 file changed, 123 insertions(+), 36 deletions(-) diff --git a/VDSSample/ViewControllers/CalendarViewController.swift b/VDSSample/ViewControllers/CalendarViewController.swift index 4506ffd..6b7b107 100644 --- a/VDSSample/ViewControllers/CalendarViewController.swift +++ b/VDSSample/ViewControllers/CalendarViewController.swift @@ -19,15 +19,30 @@ class CalendarViewController: BaseViewController { var indicatorOneSwitch = Toggle() var indicatorTwoSwitch = Toggle() var indicatorThreeSwitch = Toggle() + var clearActiveDatesSwitch = Toggle() + var clearInactiveDatesSwitch = Toggle() + var activeDatesField = TextField() + var inactiveDatesField = TextField() var legendOneField = TextField() var legendTwoField = TextField() var legendThreeField = TextField() - private var minDateField: UIDatePicker = UIDatePicker() - private var maxDateField: UIDatePicker = UIDatePicker() - private var datePickerOne: UIDatePicker = UIDatePicker() - private var datePickerTwo: UIDatePicker = UIDatePicker() - private var datePickerThree: UIDatePicker = UIDatePicker() + + private var minDatePicker: UIDatePicker = UIDatePicker() + private var maxDatePicker: UIDatePicker = UIDatePicker() + private var indicatorOnePicker: UIDatePicker = UIDatePicker() + private var indicatorTwoPicker: UIDatePicker = UIDatePicker() + private var indicatorThreePicker: UIDatePicker = UIDatePicker() + private var activeDatePicker: UIDatePicker = UIDatePicker() + private var inactiveDatePicker: UIDatePicker = UIDatePicker() + var indicators: [CalendarBase.CalendarIndicatorModel] = [] + let indicatorOnePickerTag = 1 + let indicatorTwoPickerTag = 2 + let indicatorThreePickerTag = 3 + let minDatePickerTag = 4 + let maxDatePickerTag = 5 + let activeDatePickerTag = 6 + let inactiveDatePickerTag = 7 override func viewDidLoad() { super.viewDidLoad() @@ -38,38 +53,52 @@ class CalendarViewController: BaseViewController { override func setupForm() { super.setupForm() - configurePicker(datePickerOne) - datePickerOne.tag = 1 - configurePicker(datePickerTwo) - datePickerTwo.tag = 2 - configurePicker(datePickerThree) - datePickerThree.tag = 3 - configurePicker(minDateField) - minDateField.tag = 4 - configurePicker(maxDateField) - maxDateField.tag = 5 + configurePicker(indicatorOnePicker) + indicatorOnePicker.tag = indicatorOnePickerTag + configurePicker(indicatorTwoPicker) + indicatorTwoPicker.tag = indicatorTwoPickerTag + configurePicker(indicatorThreePicker) + indicatorThreePicker.tag = indicatorThreePickerTag + configurePicker(minDatePicker) + minDatePicker.tag = minDatePickerTag + configurePicker(maxDatePicker) + maxDatePicker.tag = maxDatePickerTag + configurePicker(activeDatePicker) + activeDatePicker.tag = activeDatePickerTag + configurePicker(inactiveDatePicker) + inactiveDatePicker.tag = inactiveDatePickerTag indicators = [ - .init(label: "Due Date", date: datePickerOne.date), - .init(label: "Auto Pay", date: datePickerTwo.date), - .init(label: "Scheduled", date: datePickerTwo.date) + .init(label: "Due Date", date: indicatorOnePicker.date), + .init(label: "Auto Pay", date: indicatorTwoPicker.date), + .init(label: "Scheduled", date: indicatorThreePicker.date) ] //add form rows addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Hide Container Border", view: containerBorderSwitch) addFormRow(label: "Hide Current Date Indicator", view: hideCurrentDateIndicatorSwitch) - addFormRow(label: "Min Date", view: minDateField) - addFormRow(label: "Max Date", view: maxDateField) + addFormRow(label: "Min Date", view: minDatePicker) + addFormRow(label: "Max Date", view: maxDatePicker) addFormRow(label: "Transparent Background", view: transparentBgSwitch) + addFormRow(label: "Active Dates", view: activeDatesField) + addFormRow(label: "Select ActiveDate", view: activeDatePicker) + addFormRow(label: "Clear Active Dates", view: clearActiveDatesSwitch) + addFormRow(label: "Inactive Dates", view: inactiveDatesField) + addFormRow(label: "Select InActiveDate", view: inactiveDatePicker) + addFormRow(label: "Clear Inactive Dates", view: clearInactiveDatesSwitch) addFormRow(label: "Indicator One", view: indicatorOneSwitch) addFormRow(label: "Indicator Two", view: indicatorTwoSwitch) addFormRow(label: "Indicator Three", view: indicatorThreeSwitch) addFormRow(label: "Legend One", view: legendOneField) addFormRow(label: "Legend Two", view: legendTwoField) addFormRow(label: "Legend Three", view: legendThreeField) - addFormRow(label: "Indicator One Date", view: datePickerOne) - addFormRow(label: "Indicator Two Date", view: datePickerTwo) - addFormRow(label: "Indicator Three Date", view: datePickerThree) + addFormRow(label: "Indicator One Date", view: indicatorOnePicker) + addFormRow(label: "Indicator Two Date", view: indicatorTwoPicker) + addFormRow(label: "Indicator Three Date", view: indicatorThreePicker) + activeDatesField.isUserInteractionEnabled = false + inactiveDatesField.isUserInteractionEnabled = false + activeDatesField.isEnabled = false + inactiveDatesField.isEnabled = false containerBorderSwitch.onChange = { [weak self] sender in guard let self else { return } @@ -86,25 +115,41 @@ class CalendarViewController: BaseViewController { component.transparentBackground = sender.isOn } + clearActiveDatesSwitch.onChange = { [weak self] sender in + guard let self else { return } + if sender.isOn { + activeDatesField.text = "" + component.activeDates = [] + } + } + + clearInactiveDatesSwitch.onChange = { [weak self] sender in + guard let self else { return } + if sender.isOn { + inactiveDatesField.text = "" + component.inactiveDates = [] + } + } + legendOneField .textPublisher .sink { [weak self] text in - self?.updateIndicatorData(label: text, date: self?.datePickerOne.date, index: 0) + self?.updateIndicatorData(label: text, date: self?.indicatorOnePicker.date, index: 0) }.store(in: &subscribers) legendTwoField .textPublisher .sink { [weak self] text in - self?.updateIndicatorData(label: text, date: self?.datePickerTwo.date, index: 1) + self?.updateIndicatorData(label: text, date: self?.indicatorTwoPicker.date, index: 1) }.store(in: &subscribers) legendThreeField .textPublisher .sink { [weak self] text in - self?.updateIndicatorData(label: text, date: self?.datePickerThree.date, index: 2) + self?.updateIndicatorData(label: text, date: self?.indicatorThreePicker.date, index: 2) }.store(in: &subscribers) indicatorOneSwitch.onChange = { [weak self] sender in @@ -159,6 +204,12 @@ class CalendarViewController: BaseViewController { indicatorTwoSwitch.isOn = true indicatorThreeSwitch.isOn = true hideCurrentDateIndicatorSwitch.isOn = false + indicatorOnePicker.date = Calendar.current.date(byAdding: .day, value: 1, to: Date())! + indicatorTwoPicker.date = Calendar.current.date(byAdding: .day, value: 1, to: Date())! + indicatorThreePicker.date = Calendar.current.date(byAdding: .day, value: 1, to: Date())! + updateIndicatorData(label: legendOneField.text ?? "", date: indicatorOnePicker.date, index: 0) + updateIndicatorData(label: legendTwoField.text ?? "", date: indicatorTwoPicker.date, index: 1) + updateIndicatorData(label: legendThreeField.text ?? "", date: indicatorThreePicker.date, index: 2) } func updateIndicatorData(label: String = "", date: Date?, index:Int) { @@ -170,19 +221,19 @@ class CalendarViewController: BaseViewController { func setIndicatorsData() { if indicatorOneSwitch.isOn && indicatorTwoSwitch.isOn && indicatorThreeSwitch.isOn { component.indicators = [ - .init(label: self.legendOneField.text ?? "", date: datePickerOne.date), - .init(label: self.legendTwoField.text ?? "", date: datePickerTwo.date), - .init(label: self.legendThreeField.text ?? "", date: datePickerTwo.date) + .init(label: self.legendOneField.text ?? "", date: indicatorOnePicker.date), + .init(label: self.legendTwoField.text ?? "", date: indicatorTwoPicker.date), + .init(label: self.legendThreeField.text ?? "", date: indicatorThreePicker.date) ] } else if indicatorOneSwitch.isOn && indicatorTwoSwitch.isOn && !indicatorThreeSwitch.isOn { component.indicators = [ - .init(label: self.legendOneField.text ?? "", date: datePickerOne.date), - .init(label: self.legendTwoField.text ?? "", date: datePickerTwo.date), + .init(label: self.legendOneField.text ?? "", date: indicatorOnePicker.date), + .init(label: self.legendTwoField.text ?? "", date: indicatorTwoPicker.date), ] } else if indicatorOneSwitch.isOn && !indicatorTwoSwitch.isOn { component.indicators = [ - .init(label: self.legendOneField.text ?? "", date: datePickerOne.date), + .init(label: self.legendOneField.text ?? "", date: indicatorOnePicker.date), ] } } @@ -206,13 +257,49 @@ class CalendarViewController: BaseViewController { // Apply date format // let selectedDate: String = dateFormatter.string(from: sender.date) + // print("Selected value \(selectedDate)") switch sender.tag { - case 1: updateIndicatorData(label: legendOneField.text ?? "", date: sender.date, index: 0) - case 2: updateIndicatorData(label: legendTwoField.text ?? "", date: sender.date, index: 1) - case 3: updateIndicatorData(label: legendThreeField.text ?? "", date: sender.date, index: 2) + case indicatorOnePickerTag: + updateIndicatorData(label: legendOneField.text ?? "", date: sender.date, index: 0) + case indicatorTwoPickerTag: + updateIndicatorData(label: legendTwoField.text ?? "", date: sender.date, index: 1) + case indicatorThreePickerTag: + updateIndicatorData(label: legendThreeField.text ?? "", date: sender.date, index: 2) + case minDatePickerTag: + component.minDate = sender.date + case maxDatePickerTag: + component.maxDate = sender.date + case activeDatePickerTag: + component.activeDates.append(sender.date) + var text = activeDatesField.text + if let textEmpty = text?.isEmpty, textEmpty == true { + text?.append("") + } else { + text?.append(", ") + } + text?.append("\(self.getSelectedDate(with: sender.date))") + clearActiveDatesSwitch.isOn = false + activeDatesField.text = text + case inactiveDatePickerTag: + component.inactiveDates.append(sender.date) + var text = inactiveDatesField.text + if let textEmpty = text?.isEmpty, textEmpty == true { + text?.append("") + } else { + text?.append(", ") + } + text?.append("\(self.getSelectedDate(with: sender.date))") + clearInactiveDatesSwitch.isOn = false + inactiveDatesField.text = text default: break } - // print("Selected value \(selectedDate)") + } + + func getSelectedDate(with date:Date) -> String { + let dateFormatter: DateFormatter = DateFormatter() + dateFormatter.dateFormat = "MM/dd/yyyy" + let day: String = dateFormatter.string(from: date) + return day } } From de0ca8ab862dafcc9707f998b53f7e1a02620dfd Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 8 May 2024 11:04:11 -0500 Subject: [PATCH 11/24] updated version Signed-off-by: Matt Bruce --- VDSSample.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/VDSSample.xcodeproj/project.pbxproj b/VDSSample.xcodeproj/project.pbxproj index 55a1456..3d37249 100644 --- a/VDSSample.xcodeproj/project.pbxproj +++ b/VDSSample.xcodeproj/project.pbxproj @@ -692,7 +692,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 61; + CURRENT_PROJECT_VERSION = 62; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = FCMA4QKS77; GENERATE_INFOPLIST_FILE = YES; @@ -727,7 +727,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 61; + CURRENT_PROJECT_VERSION = 62; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = FCMA4QKS77; GENERATE_INFOPLIST_FILE = YES; From b069fff09fe94def6074f090186f76cff554ce5b Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 9 May 2024 14:33:45 -0500 Subject: [PATCH 12/24] added more areas for input Signed-off-by: Matt Bruce --- .../InputFieldViewController.swift | 82 ++++++++++++++----- 1 file changed, 63 insertions(+), 19 deletions(-) diff --git a/VDSSample/ViewControllers/InputFieldViewController.swift b/VDSSample/ViewControllers/InputFieldViewController.swift index 71fbf7e..addadae 100644 --- a/VDSSample/ViewControllers/InputFieldViewController.swift +++ b/VDSSample/ViewControllers/InputFieldViewController.swift @@ -62,6 +62,14 @@ class InputFieldViewController: BaseViewController { $0.isHidden = true } + //inlineAction + var inlineActionTextField = TextField() + lazy var inlineActionSection = FormSection().with { + $0.title = "inlineAction Settings" + $0.addFormRow(label: "Action Text", view: inlineActionTextField) + $0.isHidden = true + } + override func viewDidLoad() { super.viewDidLoad() addContentTopView(view: component) @@ -71,23 +79,36 @@ class InputFieldViewController: BaseViewController { override func setupForm(){ super.setupForm() - addFormRow(label: "Disabled", view: disabledSwitch) - addFormRow(label: "Required", view: requiredSwitch) - addFormRow(label: "Surface", view: surfacePickerSelectorView) - addFormRow(label: "Label Text", view: labelTextField) - addFormRow(label: "Helper Text Placement", view: helperTextPlacementPickerSelectorView) - addFormRow(label: "Helper Text", view: helperTextField) - addFormRow(label: "Error", view: showErrorSwitch) - addFormRow(label: "Error Text", view: errorTextField) - addFormRow(label: "Success", view: showSuccessSwitch) - addFormRow(label: "Success Text", view: successTextField) - addFormRow(label: "Width", view: widthTextField) - addFormRow(label: "ToolTip Title", view: tooltipTitleTextField) - addFormRow(label: "ToolTip Content", view: tooltipContentTextField) - addFormRow(label: "Field Type", view: inputTypePickerSelectorView) + + let fieldType = FormSection().with { + $0.title = "Field Type Settings" + $0.addFormRow(label: "Field Type", view: inputTypePickerSelectorView) + } + + let general = FormSection().with { + $0.title = "\n\nGeneral Settings" + } + + general.addFormRow(label: "Disabled", view: disabledSwitch) + general.addFormRow(label: "Required", view: requiredSwitch) + general.addFormRow(label: "Surface", view: surfacePickerSelectorView) + general.addFormRow(label: "Label Text", view: labelTextField) + general.addFormRow(label: "Helper Text Placement", view: helperTextPlacementPickerSelectorView) + general.addFormRow(label: "Helper Text", view: helperTextField) + general.addFormRow(label: "Error", view: showErrorSwitch) + general.addFormRow(label: "Error Text", view: errorTextField) + general.addFormRow(label: "Success", view: showSuccessSwitch) + general.addFormRow(label: "Success Text", view: successTextField) + general.addFormRow(label: "Width", view: widthTextField) + general.addFormRow(label: "ToolTip Title", view: tooltipTitleTextField) + general.addFormRow(label: "ToolTip Content", view: tooltipContentTextField) + + append(section: fieldType) append(section: passwordSection) append(section: dateSection) + append(section: inlineActionSection) + append(section: general) requiredSwitch.onChange = { [weak self] sender in self?.component.isRequired = sender.isOn @@ -162,6 +183,21 @@ class InputFieldViewController: BaseViewController { .sink { [weak self] text in self?.component.showPasswordButtonText = text }.store(in: &subscribers) + + //inlineAction + inlineActionTextField + .textPublisher + .sink { [weak self] text in + if !text.isEmpty { + self?.component.actionTextLinkModel = .init(text: text, onClick: { inputField in + var value = inputField.value ?? "" + value = !value.isEmpty ? value : "nil" + self?.present(UIAlertController(title: "inlineAction", message: "Clicked and you get the value: \(value)", preferredStyle: .alert).with{ $0.addAction(.init(title: "OK", style: .default)) }, animated: true) + }) + } else { + self?.component.actionTextLinkModel = nil + } + }.store(in: &subscribers) } func setupModel() { @@ -171,7 +207,6 @@ class InputFieldViewController: BaseViewController { component.helperText = "For example: 123 Verizon St" component.errorText = "Enter a valid address." component.successText = "Good job entering a valid address!" - component.tooltipModel = .init(title: "Check the formatting of your address", content:"House/Building number then street name") component.onChange = { component in if let text = component.value { @@ -184,6 +219,7 @@ class InputFieldViewController: BaseViewController { //setup UI surfacePickerSelectorView.text = component.surface.rawValue helperTextPlacementPickerSelectorView.text = component.helperTextPlacement.rawValue + dateFormatPickerSelectorView.text = component.dateFormat.rawValue inputTypePickerSelectorView.text = component.fieldType.rawValue disabledSwitch.isOn = !component.isEnabled requiredSwitch.isOn = component.isRequired @@ -213,6 +249,7 @@ class InputFieldViewController: BaseViewController { inputTypePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.fieldType = item + self?.component.text = "" self?.updateFormSections() } @@ -231,7 +268,13 @@ class InputFieldViewController: BaseViewController { } func updateFormSections() { - [passwordSection, dateSection].forEach { $0.isHidden = true } + [passwordSection, dateSection, inlineActionSection].forEach { $0.isHidden = true } + //reset other fields + component.actionTextLinkModel = nil + component.tooltipModel = nil + tooltipTitleTextField.text = nil + tooltipContentTextField.text = nil + switch component.fieldType { case .text: break @@ -240,15 +283,16 @@ class InputFieldViewController: BaseViewController { break case .inlineAction: - break - + inlineActionTextField.text = nil + inlineActionSection.isHidden = false + case .password: passwordSection.isHidden = false case .creditCard: break - case .tel: + case .telephone: break case .date: From 363397e12f6830f4c7abf270d5b210cef09d3e40 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Fri, 10 May 2024 11:07:33 -0500 Subject: [PATCH 13/24] updated for components Signed-off-by: Matt Bruce --- .../DropdownSelectViewController.swift | 21 ++++++++++ .../InputFieldViewController.swift | 40 +++++++++++-------- 2 files changed, 45 insertions(+), 16 deletions(-) diff --git a/VDSSample/ViewControllers/DropdownSelectViewController.swift b/VDSSample/ViewControllers/DropdownSelectViewController.swift index 5d03dbe..6fcc338 100644 --- a/VDSSample/ViewControllers/DropdownSelectViewController.swift +++ b/VDSSample/ViewControllers/DropdownSelectViewController.swift @@ -10,6 +10,12 @@ import VDS class DropdownSelectViewController: BaseViewController { + lazy var helperTextPlacementPickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: InputField.HelperTextPlacement.allCases) + }() + var disabledSwitch = Toggle() var requiredSwitch = Toggle() var labelTextField = TextField() @@ -21,6 +27,7 @@ class DropdownSelectViewController: BaseViewController { var errorSwitch = Toggle() var tooltipTitleTextField = TextField() var tooltipContentTextField = TextField() + var widthTextField = NumericField() var optionsSwitch = Toggle() var moreOptions: [DropdownSelect.DropdownOptionModel] = [ .init(text: "Alabama"), @@ -60,12 +67,14 @@ class DropdownSelectViewController: BaseViewController { addFormRow(label: "Disabled", view: disabledSwitch) addFormRow(label: "Required", view: requiredSwitch) addFormRow(label: "Label Text", view: labelTextField) + addFormRow(label: "Helper Text Placement", view: helperTextPlacementPickerSelectorView) addFormRow(label: "Helper Text", view: helperTextField) addFormRow(label: "Inline Label", view: .makeWrapper(for: inlineLabelSwitch)) 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: "Width", view: widthTextField) addFormRow(label: "ToolTip Title", view: tooltipTitleTextField) addFormRow(label: "ToolTip Content", view: tooltipContentTextField) addFormRow(label: "More Options", view: optionsSwitch) @@ -119,6 +128,12 @@ class DropdownSelectViewController: BaseViewController { 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 @@ -161,6 +176,7 @@ class DropdownSelectViewController: BaseViewController { requiredSwitch.isOn = component.isRequired surfacePickerSelectorView.text = component.surface.rawValue labelTextField.text = component.labelText + helperTextPlacementPickerSelectorView.text = component.helperTextPlacement.rawValue helperTextField.text = component.helperText readonlySwitch.isOn = false transparentBgSwitch.isOn = false @@ -176,6 +192,11 @@ class DropdownSelectViewController: BaseViewController { self?.component.surface = item self?.contentTopView.backgroundColor = item.color } + + helperTextPlacementPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.helperTextPlacement = item + } + } func updateTooltip() { diff --git a/VDSSample/ViewControllers/InputFieldViewController.swift b/VDSSample/ViewControllers/InputFieldViewController.swift index addadae..d9c94af 100644 --- a/VDSSample/ViewControllers/InputFieldViewController.swift +++ b/VDSSample/ViewControllers/InputFieldViewController.swift @@ -70,6 +70,19 @@ class InputFieldViewController: BaseViewController { $0.isHidden = true } + //securityCode + lazy var cardTypePickerSelectorView = { + PickerSelectorView(title: "", + picker: self.picker, + items: InputField.CreditCardType.allCases) + }() + + lazy var securityCodeSection = FormSection().with { + $0.title = "Security Code Settings" + $0.addFormRow(label: "Card Type", view: cardTypePickerSelectorView) + $0.isHidden = true + } + override func viewDidLoad() { super.viewDidLoad() addContentTopView(view: component) @@ -108,6 +121,7 @@ class InputFieldViewController: BaseViewController { append(section: passwordSection) append(section: dateSection) append(section: inlineActionSection) + append(section: securityCodeSection) append(section: general) requiredSwitch.onChange = { [weak self] sender in @@ -257,6 +271,10 @@ class InputFieldViewController: BaseViewController { self?.component.dateFormat = item self?.updateFormSections() } + + cardTypePickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.cardType = item + } } func updateTooltip() { @@ -268,20 +286,16 @@ class InputFieldViewController: BaseViewController { } func updateFormSections() { - [passwordSection, dateSection, inlineActionSection].forEach { $0.isHidden = true } + [passwordSection, dateSection, inlineActionSection, securityCodeSection].forEach { $0.isHidden = true } //reset other fields component.actionTextLinkModel = nil component.tooltipModel = nil + component.cardType = .generic tooltipTitleTextField.text = nil tooltipContentTextField.text = nil - + dateFormatPickerSelectorView.text = component.dateFormat.rawValue + cardTypePickerSelectorView.text = component.cardType.rawValue switch component.fieldType { - case .text: - break - - case .number: - break - case .inlineAction: inlineActionTextField.text = nil inlineActionSection.isHidden = false @@ -289,19 +303,13 @@ class InputFieldViewController: BaseViewController { case .password: passwordSection.isHidden = false - case .creditCard: - break - - case .telephone: - break - case .date: dateSection.isHidden = false case .securityCode: - break + securityCodeSection.isHidden = false - @unknown default: + default: break } } From beb64408beb98982b12a6cce6eeb1f7205b85ff8 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Fri, 10 May 2024 15:27:04 -0500 Subject: [PATCH 14/24] removed default Signed-off-by: Matt Bruce --- VDSSample/ViewControllers/InputFieldViewController.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/VDSSample/ViewControllers/InputFieldViewController.swift b/VDSSample/ViewControllers/InputFieldViewController.swift index d9c94af..9ca4875 100644 --- a/VDSSample/ViewControllers/InputFieldViewController.swift +++ b/VDSSample/ViewControllers/InputFieldViewController.swift @@ -216,7 +216,6 @@ class InputFieldViewController: BaseViewController { func setupModel() { component.fieldType = .text - component.width = 328 component.labelText = "Street Address" component.helperText = "For example: 123 Verizon St" component.errorText = "Enter a valid address." From 2f43f4cae560c8275fa55966b6f510fb32fb1e66 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Fri, 10 May 2024 17:04:16 -0500 Subject: [PATCH 15/24] updated controllers Signed-off-by: Matt Bruce --- VDSSample/ViewControllers/MenuViewController.swift | 2 +- VDSSample/ViewControllers/TextAreaViewController.swift | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/VDSSample/ViewControllers/MenuViewController.swift b/VDSSample/ViewControllers/MenuViewController.swift index c300171..78c0e97 100644 --- a/VDSSample/ViewControllers/MenuViewController.swift +++ b/VDSSample/ViewControllers/MenuViewController.swift @@ -80,7 +80,7 @@ class MenuViewController: UITableViewController, TooltipLaunchable { MenuComponent(title: "CheckboxGroup", completed: true, viewController: CheckboxGroupViewController.self), MenuComponent(title: "DropdownSelect", completed: true, viewController: DropdownSelectViewController.self), MenuComponent(title: "Icon", completed: true, viewController: IconViewController.self), - MenuComponent(title: "InputField", completed: false, viewController: InputFieldViewController.self), + MenuComponent(title: "InputField", completed: true, viewController: InputFieldViewController.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), diff --git a/VDSSample/ViewControllers/TextAreaViewController.swift b/VDSSample/ViewControllers/TextAreaViewController.swift index 22dc701..6559a2e 100644 --- a/VDSSample/ViewControllers/TextAreaViewController.swift +++ b/VDSSample/ViewControllers/TextAreaViewController.swift @@ -126,7 +126,6 @@ class TextAreaViewController: BaseViewController