summaryrefslogtreecommitdiff
path: root/Hutch/Views/More/MoreViewModel.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Hutch/Views/More/MoreViewModel.swift')
-rw-r--r--Hutch/Views/More/MoreViewModel.swift39
1 files changed, 39 insertions, 0 deletions
diff --git a/Hutch/Views/More/MoreViewModel.swift b/Hutch/Views/More/MoreViewModel.swift
new file mode 100644
index 0000000..8f23975
--- /dev/null
+++ b/Hutch/Views/More/MoreViewModel.swift
@@ -0,0 +1,39 @@
+import Foundation
+
+@Observable
+@MainActor
+final class MoreViewModel {
+ private let repository: SystemStatusRepository
+
+ private(set) var systemStatusSnapshot: SystemStatusSnapshot?
+ private(set) var isLoadingSystemStatus = false
+ private(set) var isShowingStaleSystemStatus = false
+ private(set) var systemStatusErrorMessage: String?
+
+ init(repository: SystemStatusRepository) {
+ self.repository = repository
+ }
+
+ func loadIfNeeded() async {
+ guard systemStatusSnapshot == nil, !isLoadingSystemStatus else { return }
+ await loadSystemStatus()
+ }
+
+ func loadSystemStatus(forceRefresh: Bool = false) async {
+ isLoadingSystemStatus = true
+ defer { isLoadingSystemStatus = false }
+ isShowingStaleSystemStatus = false
+ systemStatusErrorMessage = nil
+
+ do {
+ let result = try await repository.snapshotResult(forceRefresh: forceRefresh)
+ systemStatusSnapshot = result.value
+ isShowingStaleSystemStatus = result.isStale
+ systemStatusErrorMessage = result.isStale ? result.refreshErrorMessage : nil
+ } catch {
+ if systemStatusSnapshot == nil {
+ systemStatusErrorMessage = error.userFacingMessage
+ }
+ }
+ }
+}