Skip to main content
Signature
FilterClearConnector(
  filterState: FilterState,
  interactor: FilterClearInteractor,
  clearMode: ClearMode,
  filterGroupIDs: [FilterGroup.ID]?,
  controller: FilterClearController
)

About this widget

Clear Filters lets users clear all filters that are currently active within the given FilterState.

Examples

Instantiate a FilterClearConnector.
Swift
let filterState: FilterState = .init()
let clearFiltersController: FilterClearButtonController = .init(button: UIButton())

let filterClearConnector: FilterClearConnector = .init(filterState: filterState,
                                                       clearMode: .specified,
                                                       filterGroupIDs: [.and(name: "color"), .or(name: "category",
                                                                                                 filterType: .facet)],
                                                       controller: clearFiltersController)

Parameters

filterState
FilterState
required
The FilterState that holds your filters.
interactor
FilterClearInteractor
required
default: .init()
The logic applied to Clear Filters.
clearMode
ClearMode
default: .specified
Whether we should clear the specified filters or all filters except them.
filterGroupIDs
[FilterGroup.ID]?
default: nil
The group IDs of filters to clear. All filters will be cleared if unspecified.
controller
FilterClearController
default: nil
The Controller interfacing with a concrete clear filters view.

Low-level API

If you want to fully control the Clear Filters components and connect them manually, use the following components:
  • FilterClearInteractor. The logic for clearing filters in the FilterState.
  • FilterState. The current state of the filters.
  • FilterClearController. The controller that interfaces with a concrete clear filters view.
Swift
let filterState: FilterState = .init()
let filterClearInteractor: FilterClearInteractor = .init()
let clearFiltersController: FilterClearButtonController = .init(button: UIButton())

filterClearInteractor.connectFilterState(filterState,
                                         filterGroupIDs: [
                                          .and(name: "color"),
                                          .or(name: "category", filterType: .facet)
                                         ],
                                         clearMode: .specified)
filterClearInteractor.connectController(clearFiltersController)

Customizing your view

The controllers provided by default, like the FilterClearButtonController work well when you want to use native UIKit with their default behavior. If you want to use another component (other than a UIButton) such as a UIView, a third-party input view, or you want to introduce some custom behavior to the already provided UIKit component, you can create your own controller conforming to the FilterClearController protocol.

Protocol

var onClick: ((Facet) -> Void)?: Closure to call when the clear filters button is clicked.

Example

Swift
public class FilterClearButtonController: FilterClearController {

  public let button: UIButton

  public var onClick: (() -> Void)?

  public init(button: UIButton) {
    self.button = button
    button.addTarget(self, action: #selector(didTapButton), for: .touchUpInside)
  }

  @objc private func didTapButton() {
    onClick?()
  }

}

SwiftUI

InstantSearch provides the FilterClearObservableController data model, which is an implementation of the FilterClearController protocol adapted for usage with SwiftUI. FilterClearObservableController must be connected to the FilterClearConnector or FilterClearInteractor like any other FilterClearController implementation. The example of the clear filter view using the Button component provided by SwiftUI:
Swift
struct ContentView: View {

  @ObservedObject var filterClearController: FilterClearObservableController

  var body: some View {
    Button("Clear filters") {
      filterClearController.clear()
    }
  }

}
If you prefer to create a custom clear filters SwiftUI view, you can directly use the FilterClearObservableController as a data model. It provides the clear function to streamline the design process of your custom SwiftUI view.
I