mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-05-07 05:53:06 +00:00
No default date/time when scheduling a conference
This commit is contained in:
parent
3c8af14495
commit
70b2671f19
5 changed files with 33 additions and 21 deletions
|
|
@ -31,8 +31,9 @@ class ConferenceSchedulingViewModel {
|
|||
let description = MutableLiveData<String>()
|
||||
|
||||
let scheduleForLater = MutableLiveData<Bool>()
|
||||
let scheduledDateTime = MutableLiveData<Date>()
|
||||
|
||||
let scheduledDate = MutableLiveData<Date>()
|
||||
let scheduledTime = MutableLiveData<Date>()
|
||||
|
||||
var scheduledTimeZone = MutableLiveData<Int>()
|
||||
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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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})
|
||||
|
|
|
|||
|
|
@ -30,9 +30,13 @@ class StyledDatePicker: UIView {
|
|||
|
||||
var liveValue:MutableLiveData<Date>? {
|
||||
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())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue