diff options
| author | Fuwn <[email protected]> | 2025-02-28 03:27:07 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-02-28 03:27:07 -0800 |
| commit | d4fd7e8d5f75f1ac7718aac6c1299c3ff740de75 (patch) | |
| tree | dfd4776c3a1bbe3b448310f9572d5949c80695a5 /Sora/Views/Post/Grid/PostGridSearchHistoryView.swift | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-d4fd7e8d5f75f1ac7718aac6c1299c3ff740de75.tar.xz sora-testing-d4fd7e8d5f75f1ac7718aac6c1299c3ff740de75.zip | |
feat: Development commit
Diffstat (limited to 'Sora/Views/Post/Grid/PostGridSearchHistoryView.swift')
| -rw-r--r-- | Sora/Views/Post/Grid/PostGridSearchHistoryView.swift | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/Sora/Views/Post/Grid/PostGridSearchHistoryView.swift b/Sora/Views/Post/Grid/PostGridSearchHistoryView.swift new file mode 100644 index 0000000..be2d2ea --- /dev/null +++ b/Sora/Views/Post/Grid/PostGridSearchHistoryView.swift @@ -0,0 +1,73 @@ +import SwiftUI + +struct PostGridSearchHistoryView: View { + @EnvironmentObject private var manager: BooruManager + @EnvironmentObject private var settings: SettingsManager + @State private var searchText: String = "" + @Binding var selectedTab: Int + + var filteredHistory: [BooruSearchQuery] { + guard !searchText.isEmpty else { + return settings.searchHistory + } + + return settings.searchHistory + .filter { query in + query.tags + .joined(separator: " ") + .lowercased() + .contains(searchText.lowercased()) + } + } + + var body: some View { + NavigationStack { + VStack { + if settings.searchHistory.isEmpty { + ContentUnavailableView( + "No History", + systemImage: "magnifyingglass", + description: Text("Recent searches will appear here.") + ) + } else { + List { + if filteredHistory.isEmpty, !searchText.isEmpty { + Text("No matching history found") + } + + ForEach(filteredHistory, id: \.id) { query in + Button(action: { + let previousProvider = settings.preferredBooru + + settings.preferredBooru = query.provider + manager.searchText = query.tags.joined(separator: " ") + selectedTab = 0 + + if previousProvider == settings.preferredBooru { + manager.performSearch() + } + }) { + PostGridSearchHistoryItemView(query: query) + } + #if os(macOS) + .buttonStyle(.plain) + #endif + } + .onDelete(perform: settings.removeSearchHistoryEntry) + } + #if os(macOS) + .listStyle(.plain) + #endif + } + } + } + .navigationTitle("Search History") + .searchable(text: $searchText) + } +} + +#Preview { + PostGridSearchHistoryView(selectedTab: .constant(0)) + .environmentObject(SettingsManager()) + .environmentObject(BooruManager(.safebooru)) +} |