Add instrument family filtering
This commit is contained in:
@@ -7,14 +7,25 @@ public struct LocalInstrumentCatalog: Sendable {
|
||||
self.items = items
|
||||
}
|
||||
|
||||
public func instruments(matching query: String) -> [InstrumentCatalogItem] {
|
||||
public var familyCategories: [String] {
|
||||
Array(Set(items.map(\.familyCategory)))
|
||||
.sorted { $0.localizedCaseInsensitiveCompare($1) == .orderedAscending }
|
||||
}
|
||||
|
||||
public func instruments(
|
||||
matching query: String,
|
||||
familyCategory: String? = nil
|
||||
) -> [InstrumentCatalogItem] {
|
||||
let searchTokens = Self.searchTokens(for: query)
|
||||
let selectedFamilyCategory = familyCategory?.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
|
||||
return items
|
||||
.filter { item in
|
||||
searchTokens.isEmpty || searchTokens.allSatisfy { token in
|
||||
let matchesSearch = searchTokens.isEmpty || searchTokens.allSatisfy { token in
|
||||
Self.searchableTerms(for: item).contains { $0.contains(token) }
|
||||
}
|
||||
let matchesFamily = selectedFamilyCategory?.isEmpty != false || item.familyCategory == selectedFamilyCategory
|
||||
return matchesSearch && matchesFamily
|
||||
}
|
||||
.sorted { $0.name.localizedCaseInsensitiveCompare($1.name) == .orderedAscending }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user