summaryrefslogtreecommitdiff
path: root/Sora/Views/Post/Grid/PostGridSearchHistoryView.swift
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-02-28 03:33:21 -0800
committerFuwn <[email protected]>2025-02-28 03:33:21 -0800
commite084ee2714c76f9081d4c57d07dec7ddd21783c2 (patch)
treec0798a5d409bd320d89905952475298ee8bec79f /Sora/Views/Post/Grid/PostGridSearchHistoryView.swift
parentfeat: Development commit (diff)
downloadsora-testing-e084ee2714c76f9081d4c57d07dec7ddd21783c2.tar.xz
sora-testing-e084ee2714c76f9081d4c57d07dec7ddd21783c2.zip
feat: Development commit
Diffstat (limited to 'Sora/Views/Post/Grid/PostGridSearchHistoryView.swift')
-rw-r--r--Sora/Views/Post/Grid/PostGridSearchHistoryView.swift76
1 files changed, 76 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..2f95118
--- /dev/null
+++ b/Sora/Views/Post/Grid/PostGridSearchHistoryView.swift
@@ -0,0 +1,76 @@
+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()
+ }
+ }) {
+ GenericItemView(
+ item: query,
+ removeAction: settings.removeSearchHistoryEntry
+ )
+ }
+ #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))
+}