vds_ios_sample/VDSSample/ViewControllers/CalendarViewController.swift

147 lines
5.1 KiB
Swift

//
// CalendarViewController.swift
// VDSSample
//
// Created by Kanamarlapudi, Vasavi on 19/04/24.
//
import Foundation
import UIKit
import VDS
import Combine
import VDSTokens
class CalendarViewController: BaseViewController<CalendarBase> {
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)")
}
}