forked from mirrors/linphone-iphone
Upgrade MeetingListsItemModel to have a preformatted month and week string to be displayed in the meetings list view
This commit is contained in:
parent
b5d98cc45a
commit
2b441f3557
3 changed files with 64 additions and 4 deletions
|
|
@ -20,7 +20,6 @@ class MeetingModel: ObservableObject {
|
|||
var time: String // "$startTime - $endTime"
|
||||
var day: String
|
||||
var dayNumber: String
|
||||
var month: String
|
||||
|
||||
@Published var isBroadcast: Bool
|
||||
@Published var subject: String
|
||||
|
|
@ -41,7 +40,6 @@ class MeetingModel: ObservableObject {
|
|||
|
||||
day = meetingDate.formatted(Date.FormatStyle().weekday(.abbreviated))
|
||||
dayNumber = meetingDate.formatted(Date.FormatStyle().day(.twoDigits))
|
||||
month = meetingDate.formatted(Date.FormatStyle().month(.wide)) // February
|
||||
|
||||
isToday = Calendar.current.isDateInToday(meetingDate)
|
||||
if isToday {
|
||||
|
|
|
|||
|
|
@ -6,16 +6,55 @@
|
|||
//
|
||||
import Foundation
|
||||
|
||||
extension String {
|
||||
func capitalizingFirstLetter() -> String {
|
||||
return prefix(1).capitalized + dropFirst()
|
||||
}
|
||||
|
||||
mutating func capitalizeFirstLetter() {
|
||||
self = self.capitalizingFirstLetter()
|
||||
}
|
||||
}
|
||||
|
||||
class MeetingsListItemModel {
|
||||
let model: MeetingModel? // if NIL, consider that we are using the fake TodayModel
|
||||
var month: String = Date.now.formatted(Date.FormatStyle().month(.wide))
|
||||
var monthStr: String = ""
|
||||
var weekStr: String = ""
|
||||
var isToday = true
|
||||
|
||||
init(meetingModel: MeetingModel?) {
|
||||
model = meetingModel
|
||||
if let mod = meetingModel {
|
||||
month = mod.month
|
||||
monthStr = createMonthString(date: mod.meetingDate)
|
||||
weekStr = createWeekString(date: mod.meetingDate)
|
||||
isToday = false
|
||||
} else {
|
||||
monthStr = createMonthString(date: Date.now)
|
||||
weekStr = createWeekString(date: Date.now)
|
||||
}
|
||||
}
|
||||
|
||||
func createMonthString(date: Date) -> String {
|
||||
return "\(date.formatted(Date.FormatStyle().month(.wide))) \(date.formatted(Date.FormatStyle().year()))"
|
||||
}
|
||||
|
||||
func createWeekString(date: Date) -> String {
|
||||
let calendar = Calendar.current
|
||||
let firstDayOfWeekIdx = calendar.firstWeekday
|
||||
let dateIndex = calendar.component(.weekday, from: date)
|
||||
let weekStartDate = calendar.date(byAdding: .day, value: -(dateIndex - firstDayOfWeekIdx % 7), to: date)!
|
||||
let weekFirstDay = weekStartDate.formatted(Date.FormatStyle().day(.twoDigits))
|
||||
let firstMonth = weekStartDate.formatted(Date.FormatStyle().month(.wide)).capitalizingFirstLetter()
|
||||
|
||||
let weekEndDate = calendar.date(byAdding: .day, value: 6, to: weekStartDate)!
|
||||
let weekEndDay = weekEndDate.formatted(Date.FormatStyle().day(.twoDigits))
|
||||
|
||||
let isDifferentMonth = calendar.component(.month, from: weekStartDate) != calendar.component(.month, from: weekEndDate)
|
||||
if isDifferentMonth {
|
||||
let lastMonth = weekEndDate.formatted(Date.FormatStyle().month(.wide)).capitalizingFirstLetter()
|
||||
return "\(weekFirstDay) \(firstMonth) - \(weekEndDay) \(lastMonth)"
|
||||
} else {
|
||||
return "\(weekFirstDay) - \(weekEndDay) \(firstMonth)"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ class MeetingsListViewModel: ObservableObject {
|
|||
private var mCoreSuscriptions = Set<AnyCancellable?>()
|
||||
var selectedMeeting: ConversationModel?
|
||||
|
||||
@Published var sortedMeetingsList: [String: [String: [MeetingsListItemModel]]] = [:]
|
||||
@Published var meetingsList: [MeetingsListItemModel] = []
|
||||
@Published var currentFilter = ""
|
||||
|
||||
|
|
@ -105,7 +106,29 @@ class MeetingsListViewModel: ObservableObject {
|
|||
|
||||
DispatchQueue.main.sync {
|
||||
self.meetingsList = meetingsListTmp
|
||||
self.sortMeetingsListByWeek()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func sortMeetingsListByWeek() {
|
||||
var sortedList: [String: [String: [MeetingsListItemModel]]] = [:]
|
||||
|
||||
var currentMonthString = ""
|
||||
var currentWeekString = ""
|
||||
for meeting in self.meetingsList {
|
||||
|
||||
if currentMonthString != meeting.monthStr {
|
||||
sortedList[currentMonthString] = [:]
|
||||
currentMonthString = meeting.monthStr
|
||||
}
|
||||
|
||||
if currentWeekString != meeting.weekStr {
|
||||
sortedList[currentMonthString]?[currentWeekString] = []
|
||||
currentWeekString = meeting.weekStr
|
||||
}
|
||||
sortedList[currentMonthString]?[currentWeekString]?.append(meeting)
|
||||
}
|
||||
self.sortedMeetingsList = sortedList
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue