import SwiftUI struct SearchSuggestionsView: View { var items: [Either] @Binding var searchText: String private var lastSearchTag: String { String(searchText.split(separator: " ").last ?? "").lowercased() } private var filteredItems: [Either] { guard !lastSearchTag.isEmpty else { return [] } var seen = Set() return items.filter { item in switch item { case .left(let tag): return tag.name.lowercased().contains(lastSearchTag) && seen.insert(tag.name.lowercased()).inserted case .right(let query): let newTags = query.tags.filter { tag in tag.lowercased().contains(lastSearchTag) && seen.insert(tag.lowercased()).inserted } return !newTags.isEmpty } } } var body: some View { ForEach(filteredItems, id: \.self) { item in switch item { case .left(let tag): Button { if let range = searchText.range(of: lastSearchTag, options: .backwards) { searchText.replaceSubrange(range, with: tag.name) } } label: { Text(tag.name) } case .right(let query): Button { if let range = searchText.range(of: lastSearchTag, options: .backwards), let matchingTag = query.tags.first(where: { $0.lowercased().contains(lastSearchTag) }) { searchText.replaceSubrange(range, with: matchingTag) } } label: { if let matchingTag = query.tags.first(where: { $0.lowercased().contains(lastSearchTag) }) { Text(matchingTag) } else { Text(query.tags.first ?? "") } } } } } }