FilterMapConnector(
searcher: HitsSearcher,
filterState: FilterState,
items: [Int: Filter],
selected: Int,
attribute: Attribute,
operator: RefinementOperator,
groupName: String?
)
Components holding a map of filters, and that can apply a single filter at a time.
Examples
class SearchController {
let searcher: HitsSearcher
let filterState: FilterState
let filterMapConnector: FilterMapConnector<Filter.Facet>
let controller = SegmentedController<Filter.Facet>(segmentedControl: .init())
init() {
let gender: Attribute = "gender"
let male = Filter.Facet(attribute: "gender", stringValue: "male")
let female = Filter.Facet(attribute: "gender", stringValue: "female")
let notSpecified = Filter.Facet(attribute: "gender", stringValue: "not specified")
let items: [Int: Filter.Facet] = [
0: male,
1: female,
2: notSpecified,
]
self.searcher = HitsSearcher(appID: "YourApplicationID",
apiKey: "YourAPIKey",
indexName: "YourIndexName")
self.filterState = FilterState()
self.filterMapConnector = .init(searcher: searcher,
filterState: filterState,
items: items,
selected: 0,
attribute: gender,
operator: .or,
controller: controller,
presenter: DefaultPresenter.Filter.present)
searcher.connectFilterState(filterState)
searcher.search()
}
}
Low-level API
If you want to fully control the Filter Map components and connect them manually, use the following components:
Searcher. The Searcher that handles searches.
FilterState. The current state of the filters.
FilterMapInteractor. The logic applied to the filter map.
FilterMapController. The view that renders the filter map.
class SearchController {
let searcher: HitsSearcher
let filterState: FilterState
let filterMapInteractor: FilterMapInteractor<Filter.Facet>
let controller = SegmentedController<Filter.Facet>(segmentedControl: .init())
init() {
let gender: Attribute = "gender"
let male = Filter.Facet(attribute: "gender", stringValue: "male")
let female = Filter.Facet(attribute: "gender", stringValue: "female")
let notSpecified = Filter.Facet(attribute: "gender", stringValue: "not specified")
self.searcher = HitsSearcher(appID: "YourApplicationID",
apiKey: "YourAPIKey",
indexName: "YourIndexName")
let items: [Int: Filter.Facet] = [
0: male,
1: female,
2: notSpecified,
]
self.filterState = FilterState()
self.filterMapInteractor = .init(items: items,
selected: 0)
searcher.connectFilterState(filterState)
filterMapInteractor.connectSearcher(searcher, attribute: gender)
filterMapInteractor.connectFilterState(filterState,
attribute: gender,
operator: .or)
filterMapInteractor.connectController(controller,
presenter: DefaultPresenter.Filter.present)
searcher.search()
}
}
Parameters
The Searcher that handles your searches.
The map of filters to be held.
The key is an unique identifier for the filter value.let gender = Attribute("gender")
let filters = [
0: Filter.Facet(attribute: gender, value: "male"),
1: Filter.Facet(attribute: gender, value: "female")
2: Filter.Facet(attribute: gender, value: "not specified")
]
The key of the filter selected by default.
operator
RefinementOperator
required
Whether facets are combined with and or or behavior in filterState.
For example if you select color as the attribute and an or behavior,
the filter sent to Algolia is color:red OR color:green.
Controller
controller
SelectableSegmentController
required
The view that renders the filter map.
presenter
default:"DefaultPresenter.Filter.present"
How to display filters.let controller = SegmentedController<Filter.Facet>(segmentedControl: .init())
let presenter = DefaultPresenter.Filter.present
filterMap.connectController(controller, presenter: presenter)