203 lines
7.6 KiB
Swift
203 lines
7.6 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, date: self?.datePickerOne.date, index: 0)
|
|
}.store(in: &subscribers)
|
|
|
|
legendTwoField
|
|
.textPublisher
|
|
.sink {
|
|
[weak self] text in
|
|
self?.updateIndicatorData(label: text, date: self?.datePickerTwo.date, index: 1)
|
|
}.store(in: &subscribers)
|
|
|
|
legendThreeField
|
|
.textPublisher
|
|
.sink {
|
|
[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(){
|
|
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
|
|
self?.component.surface = item
|
|
self?.contentTopView.backgroundColor = item.color
|
|
}
|
|
}
|
|
|
|
func setupModel() {
|
|
component.indicators = indicators
|
|
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) {
|
|
indicators[index].label = label
|
|
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
|
|
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)
|
|
|
|
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)
|
|
default: break
|
|
}
|
|
// print("Selected value \(selectedDate)")
|
|
}
|
|
}
|