// // 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 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 } public static func createGroups(notifications: [Notification], only allowedTypes: [Notification.Kind]) -> [NotificationGroup] { return notifications.reduce(into: [[Notification]]()) { (groups, notification) in if allowedTypes.contains(notification.kind), let lastGroup = groups.last, let firstStatus = lastGroup.first, firstStatus.kind == notification.kind, firstStatus.status?.id == notification.status?.id { groups[groups.count - 1].append(notification) } else { groups.append([notification]) } }.map { NotificationGroup(notifications: $0)! } } } extension NotificationGroup: Identifiable {}