summaryrefslogtreecommitdiff
path: root/Hutch/Views/Pastes/PasteListViewModel.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Hutch/Views/Pastes/PasteListViewModel.swift')
-rw-r--r--Hutch/Views/Pastes/PasteListViewModel.swift28
1 files changed, 20 insertions, 8 deletions
diff --git a/Hutch/Views/Pastes/PasteListViewModel.swift b/Hutch/Views/Pastes/PasteListViewModel.swift
index b521e18..75f2f4b 100644
--- a/Hutch/Views/Pastes/PasteListViewModel.swift
+++ b/Hutch/Views/Pastes/PasteListViewModel.swift
@@ -3,13 +3,18 @@ import Foundation
@Observable
@MainActor
final class PasteListViewModel {
- private(set) var pastes: [Paste] = []
+ private(set) var pastes: [Paste] = [] {
+ didSet { updateFilteredPastes() }
+ }
private(set) var isLoading = false
private(set) var isLoadingMore = false
private(set) var isRefreshing = false
private(set) var isCreatingPaste = false
var error: String?
- var searchText = ""
+ var searchText = "" {
+ didSet { updateFilteredPastes() }
+ }
+ private(set) var filteredPastes: [Paste] = []
private var cursor: String?
private var hasMore = true
@@ -19,15 +24,22 @@ final class PasteListViewModel {
self.service = service
}
- var filteredPastes: [Paste] {
+ private func updateFilteredPastes() {
let q = searchText.trimmingCharacters(in: .whitespacesAndNewlines).lowercased()
- guard !q.isEmpty else { return pastes }
- return pastes.filter {
- $0.files.contains {
- ($0.filename?.lowercased().contains(q) == true) ||
- $0.hash.lowercased().hasPrefix(q)
+ let updated: [Paste]
+ if q.isEmpty {
+ updated = pastes
+ } else {
+ updated = pastes.filter {
+ $0.files.contains {
+ ($0.filename?.lowercased().contains(q) == true) ||
+ $0.hash.lowercased().hasPrefix(q)
+ }
}
}
+ if updated != filteredPastes {
+ filteredPastes = updated
+ }
}
func loadPastes() async {