diff options
| author | Christian Cleberg <[email protected]> | 2026-04-01 12:15:23 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-01 12:15:23 -0500 |
| commit | 109b0ea7e859de2d8b5a4dc22bf0472fd3b08eaa (patch) | |
| tree | ceb604cbf07102b3b386a60fd48a9dc2576e3684 /Hutch/Views/Inbox/InboxView.swift | |
| parent | 367a9d8e9592d0c604356e74edea97e0791b32cd (diff) | |
| download | hutch-109b0ea7e859de2d8b5a4dc22bf0472fd3b08eaa.tar.gz hutch-109b0ea7e859de2d8b5a4dc22bf0472fd3b08eaa.tar.bz2 hutch-109b0ea7e859de2d8b5a4dc22bf0472fd3b08eaa.zip | |
fix: fixed inbox's inconsistent UX and adds a Mark All Read button
Fixes: https://todo.sr.ht/~ccleberg/Hutch/10
Diffstat (limited to 'Hutch/Views/Inbox/InboxView.swift')
| -rw-r--r-- | Hutch/Views/Inbox/InboxView.swift | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/Hutch/Views/Inbox/InboxView.swift b/Hutch/Views/Inbox/InboxView.swift index 5724964..6ca66ac 100644 --- a/Hutch/Views/Inbox/InboxView.swift +++ b/Hutch/Views/Inbox/InboxView.swift @@ -2,6 +2,7 @@ import SwiftUI struct InboxView: View { @Environment(AppState.self) private var appState + @Environment(\.scenePhase) private var scenePhase @State private var viewModel: InboxViewModel? @State private var selectedThreadID: InboxThreadSummary.ID? @State private var selectedThreadSnapshot: InboxThreadSummary? @@ -17,10 +18,21 @@ struct InboxView: View { } .navigationTitle("Inbox") .task { - if viewModel == nil { - let vm = InboxViewModel(client: appState.client) - viewModel = vm - await vm.loadThreads() + let vm: InboxViewModel + if let viewModel { + vm = viewModel + } else { + let newViewModel = InboxViewModel(client: appState.client) + viewModel = newViewModel + vm = newViewModel + } + + await vm.loadThreads() + } + .onChange(of: scenePhase) { _, newPhase in + guard newPhase == .active, let viewModel, !isShowingThreadDetail else { return } + Task { + await viewModel.loadThreads() } } } @@ -51,6 +63,20 @@ struct InboxView: View { prompt: "Search inbox" ) .listStyle(.plain) + .toolbar { + ToolbarItem(placement: .topBarTrailing) { + if viewModel.hasUnreadThreads { + Button("Mark All Read") { + withAnimation(.easeInOut(duration: 0.2)) { + viewModel.markAllThreadsRead() + } + Task { + await viewModel.loadThreads() + } + } + } + } + } .overlay { if viewModel.isLoading, viewModel.threads.isEmpty { SRHTLoadingStateView(message: "Loading inbox…") @@ -66,7 +92,7 @@ struct InboxView: View { ContentUnavailableView( "Inbox Zero", systemImage: "tray", - description: Text("Unread threads will appear here.") + description: Text("You're up to date.") ) } } |
