Light rework of timezone management: we only use it and store it during Meeting creation/edition. After, we reset and display everything based on current device timezone

This commit is contained in:
QuentinArguillere 2024-08-13 11:26:51 +02:00
parent bd3b8d8731
commit a851537428
3 changed files with 16 additions and 19 deletions

View file

@ -215,7 +215,7 @@ struct MeetingFragment: View {
.foregroundStyle(Color.grayMain2c800)
.frame(width: 24, height: 24)
.padding(.leading, 15)
Text(meetingViewModel.currentTimeZone.formattedString())
Text(meetingViewModel.selectedTimezone.formattedString())
.default_text_style(styleSize: 14)
Spacer()
}

View file

@ -128,7 +128,7 @@ struct ScheduleMeetingFragment: View {
showDatePicker.toggle()
}
Spacer()
}
}.padding(.bottom, -5)
if !meetingViewModel.allDayMeeting {
HStack(spacing: 10) {

View file

@ -40,7 +40,7 @@ class MeetingViewModel: ObservableObject {
@Published var conferenceUri: String = ""
@Published var selectedTimezoneIdx = 0
var currentTimeZone = TimeZone.current
var selectedTimezone = TimeZone.current
var knownTimezones : [String] = []
var conferenceScheduler: ConferenceScheduler?
@ -67,7 +67,7 @@ class MeetingViewModel: ObservableObject {
}
})
knownTimezones = tzIds
selectedTimezoneIdx = knownTimezones.firstIndex(where: {$0 == currentTimeZone.identifier}) ?? 0
selectedTimezoneIdx = knownTimezones.firstIndex(where: {$0 == selectedTimezone.identifier}) ?? 0
computeDateLabels()
computeTimeLabels()
}
@ -85,44 +85,41 @@ class MeetingViewModel: ObservableObject {
conferenceUri = ""
fromDate = Calendar.current.date(byAdding: .hour, value: 1, to: Date.now)!
toDate = Calendar.current.date(byAdding: .hour, value: 2, to: Date.now)!
selectedTimezone = TimeZone.current
selectedTimezoneIdx = knownTimezones.firstIndex(where: {$0 == selectedTimezone.identifier}) ?? 0
computeDateLabels()
computeTimeLabels()
}
func updateTimezone(timeZone: TimeZone) {
currentTimeZone = timeZone
selectedTimezone = timeZone
computeDateLabels()
computeTimeLabels()
}
func computeDateLabels() {
var weekDayFormat = Date.FormatStyle().weekday(.wide)
weekDayFormat.timeZone = currentTimeZone
var dayNumberFormat = Date.FormatStyle().day(.twoDigits)
dayNumberFormat.timeZone = currentTimeZone
var monthFormat = Date.FormatStyle().month(.wide)
monthFormat.timeZone = currentTimeZone
let formatter = DateFormatter()
formatter.timeZone = selectedTimezone
formatter.dateFormat = "EEEE d MMM"
fromDateStr = "\(fromDate.formatted(weekDayFormat)) \(fromDate.formatted(dayNumberFormat)), \(fromDate.formatted(monthFormat))"
fromDateStr = formatter.string(from: fromDate)
Log.info("\(MeetingViewModel.TAG) computed start date is \(fromDateStr)")
toDateStr = "\(toDate.formatted(weekDayFormat)) \(toDate.formatted(dayNumberFormat)), \(toDate.formatted(monthFormat))"
fromDateStr = formatter.string(from: toDate)
Log.info("\(MeetingViewModel.TAG)) computed end date is \(toDateStr)")
}
func computeTimeLabels() {
let formatter = DateFormatter()
formatter.dateFormat = Locale.current.identifier == "fr_FR" ? "HH:mm" : "h:mm a"
formatter.timeZone = currentTimeZone
formatter.timeZone = selectedTimezone
fromTime = formatter.string(from: fromDate)
toTime = formatter.string(from: toDate)
}
func getFullDateString() -> String {
var day = fromDate.formatted(Date.FormatStyle().weekday(.abbreviated))
var dayNumber = fromDate.formatted(Date.FormatStyle().day(.twoDigits))
var month = fromDate.formatted(Date.FormatStyle().month(.wide))
var year = fromDate.formatted(Date.FormatStyle().year(.defaultDigits))
return "\(day). \(dayNumber) \(month) \(year) | \(allDayMeeting ? "All day" : "\(fromTime) - \(toTime)")"
let formatter = DateFormatter()
formatter.dateFormat = "EEE d MMM yyyy"
return "\(formatter.string(from: fromDate)) | \(allDayMeeting ? "All day" : "\(fromTime) - \(toTime)")"
}
func addParticipants(participantsToAdd: [SelectedAddressModel]) {