diff --git a/VDSSample/ViewControllers/CalendarViewController.swift b/VDSSample/ViewControllers/CalendarViewController.swift index 4506ffd..6b7b107 100644 --- a/VDSSample/ViewControllers/CalendarViewController.swift +++ b/VDSSample/ViewControllers/CalendarViewController.swift @@ -19,15 +19,30 @@ class CalendarViewController: BaseViewController { var indicatorOneSwitch = Toggle() var indicatorTwoSwitch = Toggle() var indicatorThreeSwitch = Toggle() + var clearActiveDatesSwitch = Toggle() + var clearInactiveDatesSwitch = Toggle() + var activeDatesField = TextField() + var inactiveDatesField = TextField() 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() + + private var minDatePicker: UIDatePicker = UIDatePicker() + private var maxDatePicker: UIDatePicker = UIDatePicker() + private var indicatorOnePicker: UIDatePicker = UIDatePicker() + private var indicatorTwoPicker: UIDatePicker = UIDatePicker() + private var indicatorThreePicker: UIDatePicker = UIDatePicker() + private var activeDatePicker: UIDatePicker = UIDatePicker() + private var inactiveDatePicker: UIDatePicker = UIDatePicker() + var indicators: [CalendarBase.CalendarIndicatorModel] = [] + let indicatorOnePickerTag = 1 + let indicatorTwoPickerTag = 2 + let indicatorThreePickerTag = 3 + let minDatePickerTag = 4 + let maxDatePickerTag = 5 + let activeDatePickerTag = 6 + let inactiveDatePickerTag = 7 override func viewDidLoad() { super.viewDidLoad() @@ -38,38 +53,52 @@ class CalendarViewController: BaseViewController { 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 + configurePicker(indicatorOnePicker) + indicatorOnePicker.tag = indicatorOnePickerTag + configurePicker(indicatorTwoPicker) + indicatorTwoPicker.tag = indicatorTwoPickerTag + configurePicker(indicatorThreePicker) + indicatorThreePicker.tag = indicatorThreePickerTag + configurePicker(minDatePicker) + minDatePicker.tag = minDatePickerTag + configurePicker(maxDatePicker) + maxDatePicker.tag = maxDatePickerTag + configurePicker(activeDatePicker) + activeDatePicker.tag = activeDatePickerTag + configurePicker(inactiveDatePicker) + inactiveDatePicker.tag = inactiveDatePickerTag indicators = [ - .init(label: "Due Date", date: datePickerOne.date), - .init(label: "Auto Pay", date: datePickerTwo.date), - .init(label: "Scheduled", date: datePickerTwo.date) + .init(label: "Due Date", date: indicatorOnePicker.date), + .init(label: "Auto Pay", date: indicatorTwoPicker.date), + .init(label: "Scheduled", date: indicatorThreePicker.date) ] //add form rows addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Hide Container Border", view: containerBorderSwitch) addFormRow(label: "Hide Current Date Indicator", view: hideCurrentDateIndicatorSwitch) - addFormRow(label: "Min Date", view: minDateField) - addFormRow(label: "Max Date", view: maxDateField) + addFormRow(label: "Min Date", view: minDatePicker) + addFormRow(label: "Max Date", view: maxDatePicker) addFormRow(label: "Transparent Background", view: transparentBgSwitch) + addFormRow(label: "Active Dates", view: activeDatesField) + addFormRow(label: "Select ActiveDate", view: activeDatePicker) + addFormRow(label: "Clear Active Dates", view: clearActiveDatesSwitch) + addFormRow(label: "Inactive Dates", view: inactiveDatesField) + addFormRow(label: "Select InActiveDate", view: inactiveDatePicker) + addFormRow(label: "Clear Inactive Dates", view: clearInactiveDatesSwitch) 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) + addFormRow(label: "Indicator One Date", view: indicatorOnePicker) + addFormRow(label: "Indicator Two Date", view: indicatorTwoPicker) + addFormRow(label: "Indicator Three Date", view: indicatorThreePicker) + activeDatesField.isUserInteractionEnabled = false + inactiveDatesField.isUserInteractionEnabled = false + activeDatesField.isEnabled = false + inactiveDatesField.isEnabled = false containerBorderSwitch.onChange = { [weak self] sender in guard let self else { return } @@ -86,25 +115,41 @@ class CalendarViewController: BaseViewController { component.transparentBackground = sender.isOn } + clearActiveDatesSwitch.onChange = { [weak self] sender in + guard let self else { return } + if sender.isOn { + activeDatesField.text = "" + component.activeDates = [] + } + } + + clearInactiveDatesSwitch.onChange = { [weak self] sender in + guard let self else { return } + if sender.isOn { + inactiveDatesField.text = "" + component.inactiveDates = [] + } + } + legendOneField .textPublisher .sink { [weak self] text in - self?.updateIndicatorData(label: text, date: self?.datePickerOne.date, index: 0) + self?.updateIndicatorData(label: text, date: self?.indicatorOnePicker.date, index: 0) }.store(in: &subscribers) legendTwoField .textPublisher .sink { [weak self] text in - self?.updateIndicatorData(label: text, date: self?.datePickerTwo.date, index: 1) + self?.updateIndicatorData(label: text, date: self?.indicatorTwoPicker.date, index: 1) }.store(in: &subscribers) legendThreeField .textPublisher .sink { [weak self] text in - self?.updateIndicatorData(label: text, date: self?.datePickerThree.date, index: 2) + self?.updateIndicatorData(label: text, date: self?.indicatorThreePicker.date, index: 2) }.store(in: &subscribers) indicatorOneSwitch.onChange = { [weak self] sender in @@ -159,6 +204,12 @@ class CalendarViewController: BaseViewController { indicatorTwoSwitch.isOn = true indicatorThreeSwitch.isOn = true hideCurrentDateIndicatorSwitch.isOn = false + indicatorOnePicker.date = Calendar.current.date(byAdding: .day, value: 1, to: Date())! + indicatorTwoPicker.date = Calendar.current.date(byAdding: .day, value: 1, to: Date())! + indicatorThreePicker.date = Calendar.current.date(byAdding: .day, value: 1, to: Date())! + updateIndicatorData(label: legendOneField.text ?? "", date: indicatorOnePicker.date, index: 0) + updateIndicatorData(label: legendTwoField.text ?? "", date: indicatorTwoPicker.date, index: 1) + updateIndicatorData(label: legendThreeField.text ?? "", date: indicatorThreePicker.date, index: 2) } func updateIndicatorData(label: String = "", date: Date?, index:Int) { @@ -170,19 +221,19 @@ class CalendarViewController: BaseViewController { 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) + .init(label: self.legendOneField.text ?? "", date: indicatorOnePicker.date), + .init(label: self.legendTwoField.text ?? "", date: indicatorTwoPicker.date), + .init(label: self.legendThreeField.text ?? "", date: indicatorThreePicker.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), + .init(label: self.legendOneField.text ?? "", date: indicatorOnePicker.date), + .init(label: self.legendTwoField.text ?? "", date: indicatorTwoPicker.date), ] } else if indicatorOneSwitch.isOn && !indicatorTwoSwitch.isOn { component.indicators = [ - .init(label: self.legendOneField.text ?? "", date: datePickerOne.date), + .init(label: self.legendOneField.text ?? "", date: indicatorOnePicker.date), ] } } @@ -206,13 +257,49 @@ class CalendarViewController: BaseViewController { // Apply date format // let selectedDate: String = dateFormatter.string(from: sender.date) + // print("Selected value \(selectedDate)") 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) + case indicatorOnePickerTag: + updateIndicatorData(label: legendOneField.text ?? "", date: sender.date, index: 0) + case indicatorTwoPickerTag: + updateIndicatorData(label: legendTwoField.text ?? "", date: sender.date, index: 1) + case indicatorThreePickerTag: + updateIndicatorData(label: legendThreeField.text ?? "", date: sender.date, index: 2) + case minDatePickerTag: + component.minDate = sender.date + case maxDatePickerTag: + component.maxDate = sender.date + case activeDatePickerTag: + component.activeDates.append(sender.date) + var text = activeDatesField.text + if let textEmpty = text?.isEmpty, textEmpty == true { + text?.append("") + } else { + text?.append(", ") + } + text?.append("\(self.getSelectedDate(with: sender.date))") + clearActiveDatesSwitch.isOn = false + activeDatesField.text = text + case inactiveDatePickerTag: + component.inactiveDates.append(sender.date) + var text = inactiveDatesField.text + if let textEmpty = text?.isEmpty, textEmpty == true { + text?.append("") + } else { + text?.append(", ") + } + text?.append("\(self.getSelectedDate(with: sender.date))") + clearInactiveDatesSwitch.isOn = false + inactiveDatesField.text = text default: break } - // print("Selected value \(selectedDate)") + } + + func getSelectedDate(with date:Date) -> String { + let dateFormatter: DateFormatter = DateFormatter() + dateFormatter.dateFormat = "MM/dd/yyyy" + let day: String = dateFormatter.string(from: date) + return day } }