ReadKeep/readeck/UI/Search/SearchBookmarksViewModel.swift
Ilyas Hallak e88693363b Refactor authentication, settings, and UI; add search and improve bookmark image handling
- Refactor authentication flow to require endpoint for login and decouple token saving
- Add and integrate search functionality for bookmarks
- Simplify and improve server settings setup (remove connection test, direct save & login)
- Update sidebar/tab navigation to include search and improve structure
- Show placeholder image in BookmarkCardView if no image is available, ensuring consistent layout
- Improve BookmarkDetailView header and meta info display
- Add utility for domain extraction from URLs
- General code cleanup and minor UI/UX improvements
2025-07-03 21:45:53 +02:00

49 lines
1.3 KiB
Swift

import Foundation
import Combine
import SwiftUI
@Observable
class SearchBookmarksViewModel {
private let searchBookmarksUseCase = DefaultUseCaseFactory.shared.makeSearchBookmarksUseCase()
var searchQuery: String = "" {
didSet {
throttleSearch()
}
}
var bookmarks: BookmarksPage? = nil
var isLoading = false
var errorMessage: String? = nil
private var searchWorkItem: DispatchWorkItem?
private func throttleSearch() {
searchWorkItem?.cancel()
let workItem = DispatchWorkItem { [weak self] in
guard let self = self else { return }
Task {
await self.search()
}
}
searchWorkItem = workItem
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3, execute: workItem)
}
@MainActor
func search() async {
guard !searchQuery.isEmpty else {
bookmarks = nil
return
}
isLoading = true
errorMessage = nil
do {
let result = try await searchBookmarksUseCase.execute(search: searchQuery)
bookmarks = result
} catch {
errorMessage = "Fehler bei der Suche"
bookmarks = nil
}
isLoading = false
}
}