41 lines
1.2 KiB
Swift
41 lines
1.2 KiB
Swift
import Foundation
|
|
import RxDataSources
|
|
import SwiftDate
|
|
|
|
protocol Dated {
|
|
var date: Date { get }
|
|
}
|
|
|
|
extension Vehicle: Dated {
|
|
var date: Date {
|
|
Date(timeIntervalSince1970: self.addedDate/1000)
|
|
}
|
|
}
|
|
|
|
extension RandomAccessCollection where Element: Dated & IdentifiableType & Equatable {
|
|
func groupedByDate() -> [DateSection<Element>] {
|
|
let now = Date()
|
|
let monthStart = now.dateAtStartOf(.month)
|
|
var sections: [TimeInterval: [Element]] = [:]
|
|
for vehicle in self {
|
|
var key = vehicle.date.dateAtStartOf(.day).timeIntervalSince1970
|
|
if vehicle.date.isBeforeDate(monthStart, orEqual: false, granularity: .day) {
|
|
key = vehicle.date.dateAtStartOf(.month).timeIntervalSince1970
|
|
}
|
|
|
|
if sections[key] == nil {
|
|
sections[key] = [vehicle]
|
|
} else {
|
|
sections[key]?.append(vehicle)
|
|
}
|
|
}
|
|
|
|
var sectionsArray: [DateSection<Element>] = []
|
|
for (timestamp, vehicles) in sections {
|
|
sectionsArray.append(DateSection<Element>(timestamp: timestamp, items: vehicles))
|
|
}
|
|
|
|
return sectionsArray.sorted { $0.timestamp > $1.timestamp }
|
|
}
|
|
}
|