Add instrument family filtering

This commit is contained in:
diyaa
2026-09-14 01:04:44 +02:00
parent ecbf07d1ea
commit 9ddac746e5
4 changed files with 63 additions and 17 deletions
@@ -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 }
}