// // CarouselScrollbarViewConttroller.swift // VDSSample // // Created by Kanamarlapudi, Vasavi on 15/03/24. // import Foundation import UIKit import VDS import Combine import VDSTokens class CarouselScrollbarViewConttroller: BaseViewController { lazy var layoutPickerSelectorView = { PickerSelectorView(title: "1UP", picker: self.picker, items: CarouselScrollbar.Layout.allCases) }() var slidesTextField = NumericField() var positionTextField = NumericField() var currentPositionLabel = Label().with { $0.textStyle = .boldBodyMedium } override func viewDidLoad() { super.viewDidLoad() let stack = UIStackView(arrangedSubviews: [component, currentPositionLabel]).with { $0.axis = .vertical $0.spacing = 25 } addContentTopView(view: stack) setupPicker() setupModel() } override func setupForm() { super.setupForm() addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Layout", view: layoutPickerSelectorView) addFormRow(label: "Number Of Slides", view: slidesTextField) addFormRow(label: "Position", view: positionTextField) slidesTextField .numberPublisher .sink { [weak self] number in guard let number else { return } self?.component.numberOfSlides = number.intValue self?.component.position = Int(self?.positionTextField.text ?? "1") ?? 1 }.store(in: &subscribers) positionTextField .numberPublisher .sink { [weak self] number in guard let number else { return } self?.component.position = number.intValue }.store(in: &subscribers) } func setupModel() { //setup UI 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.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 self?.component.layout = item self?.component.position = Int(self?.positionTextField.text ?? "1") ?? 1 } } } extension CarouselScrollbarViewConttroller: ComponentSampleable { static func makeSample() -> ComponentSample { let component = Self.makeComponent() component.numberOfSlides = 4 return ComponentSample(component: component) } }