From 503449cd66f2e793430d55b6eebd2e4a9f71645f Mon Sep 17 00:00:00 2001 From: vasavk Date: Tue, 19 Mar 2024 17:50:52 +0530 Subject: [PATCH 1/6] Digital ACT-191 ONEAPP-6830 story: added new scrollbar page --- VDSSample.xcodeproj/project.pbxproj | 4 + .../CarouselScrollbarViewConttroller.swift | 87 +++++++++++++++++++ .../ViewControllers/MenuViewController.swift | 1 + 3 files changed, 92 insertions(+) create mode 100644 VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift diff --git a/VDSSample.xcodeproj/project.pbxproj b/VDSSample.xcodeproj/project.pbxproj index 071627e..f475755 100644 --- a/VDSSample.xcodeproj/project.pbxproj +++ b/VDSSample.xcodeproj/project.pbxproj @@ -32,6 +32,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 1808BEBE2BA4479500129230 /* CarouselScrollbarViewConttroller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1808BEBD2BA4479500129230 /* CarouselScrollbarViewConttroller.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 */; }; @@ -127,6 +128,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 1808BEBD2BA4479500129230 /* CarouselScrollbarViewConttroller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CarouselScrollbarViewConttroller.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 @@ EA81410D2A0ED8DC004F60D2 /* ButtonIconViewController.swift */, EAB5FEEE2927E28400998C17 /* ButtonGroupViewController.swift */, 5FC35BE828D5235A004EBEAC /* ButtonViewController.swift */, + 1808BEBD2BA4479500129230 /* CarouselScrollbarViewConttroller.swift */, EA0D1C2E2A66CFE900E5C127 /* CheckboxViewController.swift */, EAF7F09B2899B92400B287F5 /* CheckboxItemViewController.swift */, EA89204D28B67332006B9984 /* CheckBoxGroupViewController.swift */, @@ -493,6 +496,7 @@ EA89205128B68307006B9984 /* TextField.swift in Sources */, EA297A682A02F5320031ED56 /* TableViewTestController.swift in Sources */, 44604AD929CE1CF900E62B51 /* LineViewController.swift in Sources */, + 1808BEBE2BA4479500129230 /* CarouselScrollbarViewConttroller.swift in Sources */, EA3C3BB528996775000CA526 /* StoryboardInitable.swift in Sources */, EA89201928B56DF5006B9984 /* RadioBoxGroupViewController.swift in Sources */, EA3C3BB628996775000CA526 /* MenuViewController.swift in Sources */, diff --git a/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift b/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift new file mode 100644 index 0000000..2ad8bb8 --- /dev/null +++ b/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift @@ -0,0 +1,87 @@ +// +// CarouselScrollbarViewConttroller.swift +// VDSSample +// +// Created by Kanamarlapudi, Vasavi on 15/03/24. +// + +import Foundation +import UIKit +import VDS +import Combine +import VDSColorTokens + +class CarouselScrollbarViewConttroller: BaseViewController { + + lazy var layoutPickerSelectorView = { + PickerSelectorView(title: "1UP", + picker: self.picker, + items: CarouselScrollbar.Layout.allCases) + }() + + var slidesTextField = NumericField() + var disabledSwitch = Toggle() + var positionTextField = NumericField() + + + override func viewDidLoad() { + super.viewDidLoad() + addContentTopView(view: component) + setupPicker() + setupModel() + } + + override func setupForm(){ + super.setupForm() + addFormRow(label: "Disabled", view: disabledSwitch) + addFormRow(label: "Surface", view: surfacePickerSelectorView) + addFormRow(label: "Layout", view: layoutPickerSelectorView) + addFormRow(label: "Number Of Slides", view: slidesTextField) + addFormRow(label: "Position", view: positionTextField) + + disabledSwitch.onChange = { [weak self] sender in + self?.component.isEnabled = !sender.isOn + } + + slidesTextField + .numberPublisher + .sink { [weak self] number in + guard let number else { + self?.component.numberOfSlides = nil + return + } + self?.component.numberOfSlides = number.intValue + }.store(in: &subscribers) + + positionTextField + .numberPublisher + .sink { [weak self] number in + guard let number else { + self?.component.position = nil + return + } + self?.component.position = number.intValue + }.store(in: &subscribers) + + } + + func setupModel() { + //setup UI + component.numberOfSlides = 8 + surfacePickerSelectorView.text = component.surface.rawValue + disabledSwitch.isOn = !component.isEnabled + slidesTextField.text = String(component.numberOfSlides ?? 1) + } + + func setupPicker(){ + + surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.surface = item + self?.contentTopView.backgroundColor = item.color + } + + layoutPickerSelectorView.onPickerDidSelect = { [weak self] item in + self?.component.selectedLayout = item + } + } +} diff --git a/VDSSample/ViewControllers/MenuViewController.swift b/VDSSample/ViewControllers/MenuViewController.swift index 0ef29b7..3964b0b 100644 --- a/VDSSample/ViewControllers/MenuViewController.swift +++ b/VDSSample/ViewControllers/MenuViewController.swift @@ -73,6 +73,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: "Carousel Scrollbar", completed: false, viewController: CarouselScrollbarViewConttroller.self), MenuComponent(title: "Checkbox", completed: true, viewController: CheckboxViewController.self), MenuComponent(title: "CheckboxItem", completed: true, viewController: CheckboxItemViewController.self), MenuComponent(title: "CheckboxGroup", completed: true, viewController: CheckboxGroupViewController.self), From b91e931f4782936f809768aa579e468f9679e932 Mon Sep 17 00:00:00 2001 From: vasavk Date: Thu, 21 Mar 2024 09:32:57 +0530 Subject: [PATCH 2/6] Digital ACT-191 ONEAPP-6830 story: scroll thumb on given position value --- .../ViewControllers/CarouselScrollbarViewConttroller.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift b/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift index 2ad8bb8..537e2de 100644 --- a/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift +++ b/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift @@ -51,6 +51,7 @@ class CarouselScrollbarViewConttroller: BaseViewController { return } self?.component.numberOfSlides = number.intValue + self?.component.position = Int(self?.positionTextField.text ?? "1") }.store(in: &subscribers) positionTextField @@ -67,7 +68,7 @@ class CarouselScrollbarViewConttroller: BaseViewController { func setupModel() { //setup UI - component.numberOfSlides = 8 + component.numberOfSlides = 3 surfacePickerSelectorView.text = component.surface.rawValue disabledSwitch.isOn = !component.isEnabled slidesTextField.text = String(component.numberOfSlides ?? 1) @@ -82,6 +83,7 @@ class CarouselScrollbarViewConttroller: BaseViewController { layoutPickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.selectedLayout = item + self?.component.position = Int(self?.positionTextField.text ?? "1") } } } From 7fa81a7794e0b6b07250415040505dce7701ca2b Mon Sep 17 00:00:00 2001 From: vasavk Date: Thu, 21 Mar 2024 12:09:09 +0530 Subject: [PATCH 3/6] Digital ACT-191 ONEAPP-6830 story: added callback to update scroll container if needed --- .../CarouselScrollbarViewConttroller.swift | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift b/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift index 537e2de..5810683 100644 --- a/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift +++ b/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift @@ -68,10 +68,16 @@ class CarouselScrollbarViewConttroller: BaseViewController { func setupModel() { //setup UI - component.numberOfSlides = 3 + component.numberOfSlides = 8 surfacePickerSelectorView.text = component.surface.rawValue disabledSwitch.isOn = !component.isEnabled - slidesTextField.text = String(component.numberOfSlides ?? 1) + slidesTextField.text = String(component.numberOfSlides ?? 1) + + //setup test page to show scrubber id was changed + component.onScrubberDidChange = { [weak self] scrubberId in + guard let self else { return } + positionTextField.text = String(scrubberId) + } } func setupPicker(){ From d1da77f2e5c30d705c5bc9545dfe9e5c81924114 Mon Sep 17 00:00:00 2001 From: vasavk Date: Thu, 21 Mar 2024 12:14:58 +0530 Subject: [PATCH 4/6] Digital ACT-191 ONEAPP-6830 story: removed unused code --- .../CarouselScrollbarViewConttroller.swift | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift b/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift index 5810683..12acf12 100644 --- a/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift +++ b/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift @@ -20,10 +20,8 @@ class CarouselScrollbarViewConttroller: BaseViewController { }() var slidesTextField = NumericField() - var disabledSwitch = Toggle() var positionTextField = NumericField() - - + override func viewDidLoad() { super.viewDidLoad() addContentTopView(view: component) @@ -33,16 +31,11 @@ class CarouselScrollbarViewConttroller: BaseViewController { override func setupForm(){ super.setupForm() - addFormRow(label: "Disabled", view: disabledSwitch) addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Layout", view: layoutPickerSelectorView) addFormRow(label: "Number Of Slides", view: slidesTextField) addFormRow(label: "Position", view: positionTextField) - disabledSwitch.onChange = { [weak self] sender in - self?.component.isEnabled = !sender.isOn - } - slidesTextField .numberPublisher .sink { [weak self] number in @@ -63,25 +56,23 @@ class CarouselScrollbarViewConttroller: BaseViewController { } self?.component.position = number.intValue }.store(in: &subscribers) - + } func setupModel() { //setup UI component.numberOfSlides = 8 surfacePickerSelectorView.text = component.surface.rawValue - disabledSwitch.isOn = !component.isEnabled slidesTextField.text = String(component.numberOfSlides ?? 1) - + //setup test page to show scrubber id was changed component.onScrubberDidChange = { [weak self] scrubberId in guard let self else { return } positionTextField.text = String(scrubberId) } } - + func setupPicker(){ - surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.surface = item self?.contentTopView.backgroundColor = item.color From abbaa6ffb935f39e59c97a9f035262b7076102bf Mon Sep 17 00:00:00 2001 From: vasavk Date: Thu, 21 Mar 2024 21:35:14 +0530 Subject: [PATCH 5/6] Digital ACT-191 ONEAPP-6830 story: refactored code --- .../CarouselScrollbarViewConttroller.swift | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift b/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift index 12acf12..45a9ac2 100644 --- a/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift +++ b/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift @@ -29,7 +29,7 @@ class CarouselScrollbarViewConttroller: BaseViewController { setupModel() } - override func setupForm(){ + override func setupForm() { super.setupForm() addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Layout", view: layoutPickerSelectorView) @@ -40,30 +40,28 @@ class CarouselScrollbarViewConttroller: BaseViewController { .numberPublisher .sink { [weak self] number in guard let number else { - self?.component.numberOfSlides = nil return } self?.component.numberOfSlides = number.intValue - self?.component.position = Int(self?.positionTextField.text ?? "1") + self?.component.position = Int(self?.positionTextField.text ?? "1") ?? 1 }.store(in: &subscribers) positionTextField .numberPublisher .sink { [weak self] number in guard let number else { - self?.component.position = nil return } self?.component.position = number.intValue }.store(in: &subscribers) - } func setupModel() { //setup UI component.numberOfSlides = 8 surfacePickerSelectorView.text = component.surface.rawValue - slidesTextField.text = String(component.numberOfSlides ?? 1) + slidesTextField.text = String(component.numberOfSlides) + positionTextField.text = String(component.position) //setup test page to show scrubber id was changed component.onScrubberDidChange = { [weak self] scrubberId in @@ -72,7 +70,7 @@ class CarouselScrollbarViewConttroller: BaseViewController { } } - func setupPicker(){ + func setupPicker() { surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.surface = item self?.contentTopView.backgroundColor = item.color @@ -80,7 +78,7 @@ class CarouselScrollbarViewConttroller: BaseViewController { layoutPickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.selectedLayout = item - self?.component.position = Int(self?.positionTextField.text ?? "1") + self?.component.position = Int(self?.positionTextField.text ?? "1") ?? 1 } } } From f02d57ceaec71f87393369299dd65799f7f4b335 Mon Sep 17 00:00:00 2001 From: vasavk Date: Wed, 27 Mar 2024 16:04:16 +0530 Subject: [PATCH 6/6] Digital ACT-191 ONEAPP-6830 story: updating position label with callback text --- .../CarouselScrollbarViewConttroller.swift | 49 ++++++++++++++++--- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift b/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift index 45a9ac2..941172f 100644 --- a/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift +++ b/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift @@ -21,10 +21,15 @@ class CarouselScrollbarViewConttroller: BaseViewController { var slidesTextField = NumericField() var positionTextField = NumericField() - + var currentPositionLabel = Label().with { $0.textStyle = .boldBodyMedium } + override func viewDidLoad() { super.viewDidLoad() - addContentTopView(view: component) + let stack = UIStackView(arrangedSubviews: [component, currentPositionLabel]).with { + $0.axis = .vertical + $0.spacing = 25 + } + addContentTopView(view: stack) setupPicker() setupModel() } @@ -58,22 +63,54 @@ class CarouselScrollbarViewConttroller: BaseViewController { func setupModel() { //setup UI - component.numberOfSlides = 8 + component.numberOfSlides = 4 surfacePickerSelectorView.text = component.surface.rawValue slidesTextField.text = String(component.numberOfSlides) positionTextField.text = String(component.position) - + updatedPositionLabel(position: component.position, callbackText:"") + //setup test page to show scrubber id was changed - component.onScrubberDidChange = { [weak self] scrubberId in + component.onScrubberDrag = { [weak self] scrubberId in guard let self else { return } positionTextField.text = String(scrubberId) + updatedPositionLabel(position: component.position, callbackText:"onScrubberDrag") } + + /// will be called when the thumb move forward. + component.onMoveForward = { [weak self] scrubberId in + guard let self else { return } + updatedPositionLabel(position: component.position, callbackText:"onMoveForward") + } + + /// will be called when the thumb move backward. + component.onMoveBackward = { [weak self] scrubberId in + guard let self else { return } + updatedPositionLabel(position: component.position, callbackText:"onMoveBackward") + } + + /// will be called when the thumb touch start. + component.onThumbTouchStart = { [weak self] scrubberId in + guard let self else { return } + updatedPositionLabel(position: component.position, callbackText:"onThumbTouchStart") + } + + /// will be called when the thumb touch end. + component.onThumbTouchEnd = { [weak self] scrubberId in + guard let self else { return } + updatedPositionLabel(position: component.position, callbackText:"onThumbTouchEnd") + } + } - + + func updatedPositionLabel(position: Int?, callbackText: String) { + currentPositionLabel.text = "\(callbackText) Thumb position : \(position ?? 1)" + } + func setupPicker() { surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in self?.component.surface = item self?.contentTopView.backgroundColor = item.color + self?.currentPositionLabel.surface = item } layoutPickerSelectorView.onPickerDidSelect = { [weak self] item in