diff --git a/swift/Sources/App/AppViewModel.swift b/swift/Sources/App/AppViewModel.swift index 3fd70e9..a67dc89 100644 --- a/swift/Sources/App/AppViewModel.swift +++ b/swift/Sources/App/AppViewModel.swift @@ -5,6 +5,7 @@ import Observation @Observable final class AppViewModel { var selectedMailbox: Mailbox = .inbox + var selectedLane: Lane? var selectedThreadID: MailThread.ID? var focusedMessageRouteID: String? var searchText = "" @@ -50,6 +51,10 @@ final class AppViewModel { .filter { thread in laneFilter == nil || thread.lane == laneFilter } + .filter { thread in + guard let lane = selectedLane else { return true } + return thread.lane == lane + } .filter { thread in !showUnreadOnly || thread.isUnread } @@ -57,6 +62,27 @@ final class AppViewModel { .sorted { $0.lastUpdated > $1.lastUpdated } } + func laneUnreadCount(_ lane: Lane) -> Int { + threads.filter { thread in + let inCurrentMailbox = selectedMailbox == .starred + ? thread.isStarred + : thread.mailbox == selectedMailbox + return inCurrentMailbox && thread.lane == lane && thread.isUnread + }.count + } + + func laneThreadCount(_ lane: Lane) -> Int { + threads.filter { thread in + thread.mailbox == .inbox && thread.lane == lane + }.count + } + + func selectLane(_ lane: Lane?) { + selectedLane = lane + clearThreadSelection() + mailboxNavigationToken = UUID() + } + var totalUnreadCount: Int { threads.filter(\.isUnread).count }