vds_ios_sample/VDSSample/ViewControllers/CarouselScrollbarViewConttroller.swift
Matt Bruce 26b15ddb1b using new VDSCoreTokens naming
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
2024-05-07 14:16:15 -05:00

131 lines
4.6 KiB
Swift

//
// CarouselScrollbarViewConttroller.swift
// VDSSample
//
// Created by Kanamarlapudi, Vasavi on 15/03/24.
//
import Foundation
import UIKit
import VDS
import Combine
import VDSCoreTokens
class CarouselScrollbarViewConttroller: BaseViewController<CarouselScrollbar> {
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.selectedLayout = 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)
}
}