64 lines
1.7 KiB
Swift
64 lines
1.7 KiB
Swift
import Foundation
|
|
import SwiftUI
|
|
|
|
@MainActor
|
|
class SettingsViewModel: ObservableObject {
|
|
@Published var sessions: [SessionResponse] = []
|
|
@Published var isLoading = false
|
|
@Published var error: String?
|
|
@Published var successMessage: String?
|
|
|
|
private let service = NotificationsAPIService.shared
|
|
|
|
func loadSessions() async {
|
|
#if DEBUG
|
|
if PreviewData.isPreviewMode {
|
|
sessions = PreviewData.mockSessions
|
|
return
|
|
}
|
|
#endif
|
|
isLoading = true
|
|
defer { isLoading = false }
|
|
do {
|
|
sessions = try await service.getSessions()
|
|
} catch {
|
|
self.error = error.localizedDescription
|
|
}
|
|
}
|
|
|
|
func deleteSession(_ session: SessionResponse) async {
|
|
#if DEBUG
|
|
if PreviewData.isPreviewMode {
|
|
sessions.removeAll { $0.id == session.id }
|
|
return
|
|
}
|
|
#endif
|
|
do {
|
|
try await service.deleteSession(id: session.id)
|
|
sessions.removeAll { $0.id == session.id }
|
|
} catch {
|
|
self.error = error.localizedDescription
|
|
}
|
|
}
|
|
|
|
func changePassword(current: String, new: String) async -> Bool {
|
|
#if DEBUG
|
|
if PreviewData.isPreviewMode {
|
|
successMessage = String(localized: "password_changed_success")
|
|
return true
|
|
}
|
|
#endif
|
|
isLoading = true
|
|
error = nil
|
|
defer { isLoading = false }
|
|
do {
|
|
_ = try await service.changePassword(current: current, new: new)
|
|
successMessage = String(localized: "password_changed_success")
|
|
return true
|
|
} catch {
|
|
self.error = error.localizedDescription
|
|
return false
|
|
}
|
|
}
|
|
}
|