From dc6695672f85a137c7b98d5b091ec410750e06b2 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Wed, 2 Jul 2025 04:04:53 -0700 Subject: feat: Development commit --- Sora/Views/Post/Grid/PostGridView.swift | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'Sora/Views/Post/Grid') diff --git a/Sora/Views/Post/Grid/PostGridView.swift b/Sora/Views/Post/Grid/PostGridView.swift index 9c7e5b6..97604e5 100644 --- a/Sora/Views/Post/Grid/PostGridView.swift +++ b/Sora/Views/Post/Grid/PostGridView.swift @@ -11,6 +11,8 @@ struct PostGridView: View { // swiftlint:disable:this type_body_length @State private var isSearchablePresented = false @State private var cachedSuggestions: [Either] = [] @State private var suppressNextSearchSubmit = false + @State private var searchTask: Task? + @State private var suggestions: [BooruTag] = [] @Environment(\.isSearching) private var isSearching @@ -131,10 +133,22 @@ struct PostGridView: View { // swiftlint:disable:this type_body_length ) } } - .onAppear { + .onChange(of: manager.searchText) { _, newValue in if settings.searchSuggestionsMode == .tags { - cachedSuggestions = manager.allTags.map { tag in - Either.left(tag) + searchTask?.cancel() + + searchTask = Task { + try? await Task.sleep(nanoseconds: 300_000_000) + + guard !Task.isCancelled else { return } + + let searchTag = newValue.split(separator: " ").last.map(String.init) ?? "" + + if !searchTag.isEmpty { + suggestions = await manager.searchTags(name: searchTag) + } else { + suggestions = [] + } } } } @@ -343,7 +357,7 @@ struct PostGridView: View { // swiftlint:disable:this type_body_length private func searchSuggestionsItems() -> [Either] { switch settings.searchSuggestionsMode { case .tags: - return cachedSuggestions + return suggestions.map { .left($0) } case .history: return settings.searchHistory.map { .right($0) } -- cgit v1.2.3