Merge claude/strange-mirzakhani-179c4e (design-alignment rewrite)

# Conflicts:
#	swift/Assets.xcassets/LaneFeed.colorset/Contents.json
#	swift/Assets.xcassets/LanePaper.colorset/Contents.json
#	swift/Assets.xcassets/LanePeople.colorset/Contents.json
#	swift/Assets.xcassets/SIOTint.colorset/Contents.json
#	swift/SocialIO.xcodeproj/project.pbxproj
#	swift/Sources/App/SocialIOApp.swift
#	swift/Sources/Core/Models/MailModels.swift
#	swift/Sources/Core/Services/MockMailService.swift
#	swift/Sources/Features/Mail/MailRootView.swift
This commit is contained in:
2026-04-19 16:28:57 +02:00

View File

@@ -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
}