Digital ACT-191 ONEAPP-7016 story: added active dates, inactive dates options to form.

This commit is contained in:
vasavk 2024-05-07 11:21:26 +05:30
parent 68f7450255
commit d85003e66b

View File

@ -19,15 +19,30 @@ class CalendarViewController: BaseViewController<CalendarBase> {
var indicatorOneSwitch = Toggle() var indicatorOneSwitch = Toggle()
var indicatorTwoSwitch = Toggle() var indicatorTwoSwitch = Toggle()
var indicatorThreeSwitch = Toggle() var indicatorThreeSwitch = Toggle()
var clearActiveDatesSwitch = Toggle()
var clearInactiveDatesSwitch = Toggle()
var activeDatesField = TextField()
var inactiveDatesField = TextField()
var legendOneField = TextField() var legendOneField = TextField()
var legendTwoField = TextField() var legendTwoField = TextField()
var legendThreeField = TextField() var legendThreeField = TextField()
private var minDateField: UIDatePicker = UIDatePicker()
private var maxDateField: UIDatePicker = UIDatePicker() private var minDatePicker: UIDatePicker = UIDatePicker()
private var datePickerOne: UIDatePicker = UIDatePicker() private var maxDatePicker: UIDatePicker = UIDatePicker()
private var datePickerTwo: UIDatePicker = UIDatePicker() private var indicatorOnePicker: UIDatePicker = UIDatePicker()
private var datePickerThree: 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] = [] 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() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
@ -38,38 +53,52 @@ class CalendarViewController: BaseViewController<CalendarBase> {
override func setupForm() { override func setupForm() {
super.setupForm() super.setupForm()
configurePicker(datePickerOne) configurePicker(indicatorOnePicker)
datePickerOne.tag = 1 indicatorOnePicker.tag = indicatorOnePickerTag
configurePicker(datePickerTwo) configurePicker(indicatorTwoPicker)
datePickerTwo.tag = 2 indicatorTwoPicker.tag = indicatorTwoPickerTag
configurePicker(datePickerThree) configurePicker(indicatorThreePicker)
datePickerThree.tag = 3 indicatorThreePicker.tag = indicatorThreePickerTag
configurePicker(minDateField) configurePicker(minDatePicker)
minDateField.tag = 4 minDatePicker.tag = minDatePickerTag
configurePicker(maxDateField) configurePicker(maxDatePicker)
maxDateField.tag = 5 maxDatePicker.tag = maxDatePickerTag
configurePicker(activeDatePicker)
activeDatePicker.tag = activeDatePickerTag
configurePicker(inactiveDatePicker)
inactiveDatePicker.tag = inactiveDatePickerTag
indicators = [ indicators = [
.init(label: "Due Date", date: datePickerOne.date), .init(label: "Due Date", date: indicatorOnePicker.date),
.init(label: "Auto Pay", date: datePickerTwo.date), .init(label: "Auto Pay", date: indicatorTwoPicker.date),
.init(label: "Scheduled", date: datePickerTwo.date) .init(label: "Scheduled", date: indicatorThreePicker.date)
] ]
//add form rows //add form rows
addFormRow(label: "Surface", view: surfacePickerSelectorView) addFormRow(label: "Surface", view: surfacePickerSelectorView)
addFormRow(label: "Hide Container Border", view: containerBorderSwitch) addFormRow(label: "Hide Container Border", view: containerBorderSwitch)
addFormRow(label: "Hide Current Date Indicator", view: hideCurrentDateIndicatorSwitch) addFormRow(label: "Hide Current Date Indicator", view: hideCurrentDateIndicatorSwitch)
addFormRow(label: "Min Date", view: minDateField) addFormRow(label: "Min Date", view: minDatePicker)
addFormRow(label: "Max Date", view: maxDateField) addFormRow(label: "Max Date", view: maxDatePicker)
addFormRow(label: "Transparent Background", view: transparentBgSwitch) 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 One", view: indicatorOneSwitch)
addFormRow(label: "Indicator Two", view: indicatorTwoSwitch) addFormRow(label: "Indicator Two", view: indicatorTwoSwitch)
addFormRow(label: "Indicator Three", view: indicatorThreeSwitch) addFormRow(label: "Indicator Three", view: indicatorThreeSwitch)
addFormRow(label: "Legend One", view: legendOneField) addFormRow(label: "Legend One", view: legendOneField)
addFormRow(label: "Legend Two", view: legendTwoField) addFormRow(label: "Legend Two", view: legendTwoField)
addFormRow(label: "Legend Three", view: legendThreeField) addFormRow(label: "Legend Three", view: legendThreeField)
addFormRow(label: "Indicator One Date", view: datePickerOne) addFormRow(label: "Indicator One Date", view: indicatorOnePicker)
addFormRow(label: "Indicator Two Date", view: datePickerTwo) addFormRow(label: "Indicator Two Date", view: indicatorTwoPicker)
addFormRow(label: "Indicator Three Date", view: datePickerThree) 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 containerBorderSwitch.onChange = { [weak self] sender in
guard let self else { return } guard let self else { return }
@ -86,25 +115,41 @@ class CalendarViewController: BaseViewController<CalendarBase> {
component.transparentBackground = sender.isOn 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 legendOneField
.textPublisher .textPublisher
.sink { .sink {
[weak self] text in [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) }.store(in: &subscribers)
legendTwoField legendTwoField
.textPublisher .textPublisher
.sink { .sink {
[weak self] text in [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) }.store(in: &subscribers)
legendThreeField legendThreeField
.textPublisher .textPublisher
.sink { .sink {
[weak self] text in [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) }.store(in: &subscribers)
indicatorOneSwitch.onChange = { [weak self] sender in indicatorOneSwitch.onChange = { [weak self] sender in
@ -159,6 +204,12 @@ class CalendarViewController: BaseViewController<CalendarBase> {
indicatorTwoSwitch.isOn = true indicatorTwoSwitch.isOn = true
indicatorThreeSwitch.isOn = true indicatorThreeSwitch.isOn = true
hideCurrentDateIndicatorSwitch.isOn = false 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) { func updateIndicatorData(label: String = "", date: Date?, index:Int) {
@ -170,19 +221,19 @@ class CalendarViewController: BaseViewController<CalendarBase> {
func setIndicatorsData() { func setIndicatorsData() {
if indicatorOneSwitch.isOn && indicatorTwoSwitch.isOn && indicatorThreeSwitch.isOn { if indicatorOneSwitch.isOn && indicatorTwoSwitch.isOn && indicatorThreeSwitch.isOn {
component.indicators = [ component.indicators = [
.init(label: self.legendOneField.text ?? "", date: datePickerOne.date), .init(label: self.legendOneField.text ?? "", date: indicatorOnePicker.date),
.init(label: self.legendTwoField.text ?? "", date: datePickerTwo.date), .init(label: self.legendTwoField.text ?? "", date: indicatorTwoPicker.date),
.init(label: self.legendThreeField.text ?? "", date: datePickerTwo.date) .init(label: self.legendThreeField.text ?? "", date: indicatorThreePicker.date)
] ]
} else if indicatorOneSwitch.isOn && indicatorTwoSwitch.isOn && !indicatorThreeSwitch.isOn { } else if indicatorOneSwitch.isOn && indicatorTwoSwitch.isOn && !indicatorThreeSwitch.isOn {
component.indicators = [ component.indicators = [
.init(label: self.legendOneField.text ?? "", date: datePickerOne.date), .init(label: self.legendOneField.text ?? "", date: indicatorOnePicker.date),
.init(label: self.legendTwoField.text ?? "", date: datePickerTwo.date), .init(label: self.legendTwoField.text ?? "", date: indicatorTwoPicker.date),
] ]
} else if indicatorOneSwitch.isOn && !indicatorTwoSwitch.isOn { } else if indicatorOneSwitch.isOn && !indicatorTwoSwitch.isOn {
component.indicators = [ 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<CalendarBase> {
// Apply date format // Apply date format
// let selectedDate: String = dateFormatter.string(from: sender.date) // let selectedDate: String = dateFormatter.string(from: sender.date)
// print("Selected value \(selectedDate)")
switch sender.tag { switch sender.tag {
case 1: updateIndicatorData(label: legendOneField.text ?? "", date: sender.date, index: 0) case indicatorOnePickerTag:
case 2: updateIndicatorData(label: legendTwoField.text ?? "", date: sender.date, index: 1) updateIndicatorData(label: legendOneField.text ?? "", date: sender.date, index: 0)
case 3: updateIndicatorData(label: legendThreeField.text ?? "", date: sender.date, index: 2) 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 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
} }
} }