From 70b2671f1903db61158acea8368b32339383b526 Mon Sep 17 00:00:00 2001 From: Christophe Deschamps Date: Wed, 2 Nov 2022 21:51:46 +0100 Subject: [PATCH] No default date/time when scheduling a conference --- .../ConferenceSchedulingViewModel.swift | 24 ++++++++++++------- .../ConferenceSchedulingSummaryView.swift | 8 +++---- .../Views/ConferenceSchedulingView.swift | 9 +++---- .../Views/ScheduledConferencesCell.swift | 5 ++-- .../Swift/Voip/Widgets/StyledDatePicker.swift | 8 +++++-- 5 files changed, 33 insertions(+), 21 deletions(-) diff --git a/Classes/Swift/Conference/ViewModels/ConferenceSchedulingViewModel.swift b/Classes/Swift/Conference/ViewModels/ConferenceSchedulingViewModel.swift index bb4689e72..17b53524f 100644 --- a/Classes/Swift/Conference/ViewModels/ConferenceSchedulingViewModel.swift +++ b/Classes/Swift/Conference/ViewModels/ConferenceSchedulingViewModel.swift @@ -31,8 +31,9 @@ class ConferenceSchedulingViewModel { let description = MutableLiveData() let scheduleForLater = MutableLiveData() - let scheduledDateTime = MutableLiveData() - + let scheduledDate = MutableLiveData() + let scheduledTime = MutableLiveData() + var scheduledTimeZone = MutableLiveData() static let timeZones: [TimeZoneData] = computeTimeZonesList() @@ -129,7 +130,10 @@ class ConferenceSchedulingViewModel { scheduleForLater.observe { _ in self.continueEnabled.value = self.allMandatoryFieldsFilled() } - scheduledDateTime.observe { _ in + scheduledDate.observe { _ in + self.continueEnabled.value = self.allMandatoryFieldsFilled() + } + scheduledTime.observe { _ in self.continueEnabled.value = self.allMandatoryFieldsFilled() } @@ -150,8 +154,9 @@ class ConferenceSchedulingViewModel { isEncrypted.value = false sendInviteViaChat.value = true sendInviteViaEmail.value = false - scheduledDateTime.value = Date() - + scheduledDate.value = nil + scheduledTime.value = nil + scheduledTimeZone.value = ConferenceSchedulingViewModel.timeZones.indices.filter { ConferenceSchedulingViewModel.timeZones[$0].timeZone.identifier == NSTimeZone.default.identifier }.first @@ -219,14 +224,15 @@ class ConferenceSchedulingViewModel { private func allMandatoryFieldsFilled() -> Bool { - return subject.value != nil && subject.value!.count > 0 && (scheduleForLater.value != true || scheduledDateTime.value != nil); + return subject.value != nil && subject.value!.count > 0 && (scheduleForLater.value != true || (scheduledDate.value != nil && scheduledTime.value != nil) ); } private func getConferenceStartTimestamp() -> Double { - return scheduleForLater.value == true ? - scheduledDateTime.value!.timeIntervalSince1970 + - Double(ConferenceSchedulingViewModel.timeZones[scheduledTimeZone.value!].timeZone.secondsFromGMT()-TimeZone.current.secondsFromGMT()) + let days = Int32(scheduledDate.value!.timeIntervalSince1970)/86400 + let time = Int32(scheduledTime.value!.timeIntervalSince1970)%86400 + + return scheduleForLater.value == true ? TimeInterval(days * 86400 + time) + Double(ConferenceSchedulingViewModel.timeZones[scheduledTimeZone.value!].timeZone.secondsFromGMT()-TimeZone.current.secondsFromGMT()) : Date().timeIntervalSince1970 } diff --git a/Classes/Swift/Conference/Views/ConferenceSchedulingSummaryView.swift b/Classes/Swift/Conference/Views/ConferenceSchedulingSummaryView.swift index f8fbe6674..2f01f96ce 100644 --- a/Classes/Swift/Conference/Views/ConferenceSchedulingSummaryView.swift +++ b/Classes/Swift/Conference/Views/ConferenceSchedulingSummaryView.swift @@ -29,10 +29,10 @@ import SVProgressHUD let participantsListTableView = UITableView() - let datePicker = StyledDatePicker(liveValue: ConferenceSchedulingViewModel.shared.scheduledDateTime,pickerMode: .date, readOnly:true) + let datePicker = StyledDatePicker(liveValue: ConferenceSchedulingViewModel.shared.scheduledDate,pickerMode: .date, readOnly:true) let timeZoneValue = StyledValuePicker(liveIndex: ConferenceSchedulingViewModel.shared.scheduledTimeZone,options: ConferenceSchedulingViewModel.timeZones.map({ (tzd: TimeZoneData) -> String in tzd.descWithOffset()}), readOnly:true) let durationValue = StyledValuePicker(liveIndex: ConferenceSchedulingViewModel.shared.scheduledDuration,options: ConferenceSchedulingViewModel.durationList.map({ (duration: Duration) -> String in duration.display}), readOnly:true) - let timePicker = StyledDatePicker(liveValue: ConferenceSchedulingViewModel.shared.scheduledDateTime,pickerMode: .time, readOnly:true) + let timePicker = StyledDatePicker(liveValue: ConferenceSchedulingViewModel.shared.scheduledTime,pickerMode: .time, readOnly:true) let descriptionInput = StyledTextView(VoipTheme.conference_scheduling_font, placeHolder:VoipTexts.conference_schedule_description_hint,liveValue: ConferenceSchedulingViewModel.shared.description, readOnly:true) let createButton = FormButton(backgroundStateColors: VoipTheme.primary_colors_background) @@ -225,10 +225,10 @@ import SVProgressHUD } override func viewWillAppear(_ animated: Bool) { - datePicker.liveValue = ConferenceSchedulingViewModel.shared.scheduledDateTime + datePicker.liveValue = ConferenceSchedulingViewModel.shared.scheduledDate timeZoneValue.setIndex(index: ConferenceSchedulingViewModel.shared.scheduledTimeZone.value!) durationValue.setIndex(index: ConferenceSchedulingViewModel.shared.scheduledDuration.value!) - timePicker.liveValue = ConferenceSchedulingViewModel.shared.scheduledDateTime + timePicker.liveValue = ConferenceSchedulingViewModel.shared.scheduledTime descriptionInput.text = ConferenceSchedulingViewModel.shared.description.value createButton.addSidePadding() super.viewWillAppear(animated) diff --git a/Classes/Swift/Conference/Views/ConferenceSchedulingView.swift b/Classes/Swift/Conference/Views/ConferenceSchedulingView.swift index 52768af0b..cf693f47c 100644 --- a/Classes/Swift/Conference/Views/ConferenceSchedulingView.swift +++ b/Classes/Swift/Conference/Views/ConferenceSchedulingView.swift @@ -30,10 +30,10 @@ import IQKeyboardManager static func compositeViewDescription() -> UICompositeViewDescription! { return compositeDescription } func compositeViewDescription() -> UICompositeViewDescription! { return type(of: self).compositeDescription } - let datePicker = StyledDatePicker(liveValue: ConferenceSchedulingViewModel.shared.scheduledDateTime,pickerMode: .date) + let datePicker = StyledDatePicker(liveValue: ConferenceSchedulingViewModel.shared.scheduledDate,pickerMode: .date) let timeZoneValue = StyledValuePicker(liveIndex: ConferenceSchedulingViewModel.shared.scheduledTimeZone,options: ConferenceSchedulingViewModel.timeZones.map({ (tzd: TimeZoneData) -> String in tzd.descWithOffset()})) let durationValue = StyledValuePicker(liveIndex: ConferenceSchedulingViewModel.shared.scheduledDuration,options: ConferenceSchedulingViewModel.durationList.map({ (duration: Duration) -> String in duration.display})) - let timePicker = StyledDatePicker(liveValue: ConferenceSchedulingViewModel.shared.scheduledDateTime,pickerMode: .time) + let timePicker = StyledDatePicker(liveValue: ConferenceSchedulingViewModel.shared.scheduledTime,pickerMode: .time) let descriptionInput = StyledTextView(VoipTheme.conference_scheduling_font, placeHolder:VoipTexts.conference_schedule_description_hint,liveValue: ConferenceSchedulingViewModel.shared.description) let subjectInput = StyledTextView(VoipTheme.conference_scheduling_font, placeHolder:VoipTexts.conference_schedule_subject_hint, liveValue: ConferenceSchedulingViewModel.shared.subject,maxLines:1) @@ -42,6 +42,7 @@ import IQKeyboardManager super.viewDidLoad( backAction: { + ConferenceSchedulingViewModel.shared.reset() PhoneMainView.instance().popView(self.compositeViewDescription()) },nextAction: { self.gotoParticipantsListSelection() @@ -211,10 +212,10 @@ import IQKeyboardManager override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) - datePicker.liveValue = ConferenceSchedulingViewModel.shared.scheduledDateTime + datePicker.liveValue = ConferenceSchedulingViewModel.shared.scheduledDate timeZoneValue.setIndex(index: ConferenceSchedulingViewModel.shared.scheduledTimeZone.value!) durationValue.setIndex(index: ConferenceSchedulingViewModel.shared.scheduledDuration.value!) - timePicker.liveValue = ConferenceSchedulingViewModel.shared.scheduledDateTime + timePicker.liveValue = ConferenceSchedulingViewModel.shared.scheduledTime descriptionInput.text = ConferenceSchedulingViewModel.shared.description.value IQKeyboardManager.shared().isEnabled = true } diff --git a/Classes/Swift/Conference/Views/ScheduledConferencesCell.swift b/Classes/Swift/Conference/Views/ScheduledConferencesCell.swift index a1ffe5e6d..41a318ced 100644 --- a/Classes/Swift/Conference/Views/ScheduledConferencesCell.swift +++ b/Classes/Swift/Conference/Views/ScheduledConferencesCell.swift @@ -188,9 +188,10 @@ class ScheduledConferencesCell: UITableViewCell { VoipDialog.toast(message: VoipTexts.conference_edit_error) return } - let infoDate = Date(timeIntervalSince1970: Double(confData.conferenceInfo.dateTime)) ConferenceSchedulingViewModel.shared.reset() - ConferenceSchedulingViewModel.shared.scheduledDateTime.value = infoDate + let seconds = confData.conferenceInfo.dateTime % 86400 + ConferenceSchedulingViewModel.shared.scheduledDate.value = Date(timeIntervalSince1970:TimeInterval(confData.conferenceInfo.dateTime - seconds)) + ConferenceSchedulingViewModel.shared.scheduledTime.value = Date(timeIntervalSince1970:TimeInterval(seconds)) ConferenceSchedulingViewModel.shared.description.value = confData.description.value ConferenceSchedulingViewModel.shared.subject.value = confData.subject.value ConferenceSchedulingViewModel.shared.scheduledDuration.value = ConferenceSchedulingViewModel.durationList.firstIndex(where: {$0.value == confData.conferenceInfo.duration}) diff --git a/Classes/Swift/Voip/Widgets/StyledDatePicker.swift b/Classes/Swift/Voip/Widgets/StyledDatePicker.swift index cd2aedb8d..2bcb22615 100644 --- a/Classes/Swift/Voip/Widgets/StyledDatePicker.swift +++ b/Classes/Swift/Voip/Widgets/StyledDatePicker.swift @@ -30,9 +30,13 @@ class StyledDatePicker: UIView { var liveValue:MutableLiveData? { didSet { - if let liveValue = liveValue { - datePicker.date = liveValue.value! + if let liveValue = liveValue?.value { + datePicker.date = liveValue self.valueChanged(datePicker: datePicker) + } else { + formattedLabel.text = nil + var cal = Calendar.current + datePicker.date = pickerMode == .date ? Date() : cal.startOfDay(for: Date()) } }