// // NotificationGroup.swift // Pachyderm // // Created by Shadowfacts on 9/5/19. // Copyright © 2019 Shadowfacts. All rights reserved. // import Foundation public class NotificationGroup { public let notificationIDs: [String] public let id: String public let kind: Notification.Kind public let statusState: StatusState? init?(notifications: [Notification]) { guard !notifications.isEmpty else { return nil } self.notificationIDs = notifications.map { $0.id } self.id = notifications.first!.id self.kind = notifications.first!.kind if kind == .mention { self.statusState = .unknown } else { self.statusState = nil } } public static func createGroups(notifications: [Notification], only allowedTypes: [Notification.Kind]) -> [NotificationGroup] { var groups = [[Notification]]() for notification in notifications { if allowedTypes.contains(notification.kind) { if let lastGroup = groups.last, let firstNotification = lastGroup.first, firstNotification.kind == notification.kind, firstNotification.status?.id == notification.status?.id { groups[groups.count - 1].append(notification) continue } else if groups.count >= 2 { let secondToLastGroup = groups[groups.count - 2] if allowedTypes.contains(groups[groups.count - 1][0].kind), let firstNotification = secondToLastGroup.first, firstNotification.kind == notification.kind, firstNotification.status?.id == notification.status?.id { groups[groups.count - 2].append(notification) continue } } } groups.append([notification]) } return groups.map { NotificationGroup(notifications: $0)! } } } extension NotificationGroup: Identifiable {}