API Reference / InstantSearch iOS Widgets / Clear Refinements

Clear Refinements

About this widget

Clear Refinements lets the user clear all refinements that are currently active within the given FilterState.

To add clear refinements to your search experience, use these components:

  • FilterClearInteractor: The logic for clearing refinements in the FilterState.
  • FilterState: The current state of the filters.
  • FilterClearController: The controller that interfaces with a concrete clear refinement view.

Examples

1
2
3
4
5
6
7
8
9
10
let filterState: FilterState = .init()
let filterClearInteractor: FilterClearInteractor = .init()
let clearRefinementsController: FilterClearButtonController = .init(button: UIButton())

override func viewDidLoad() {
  super.viewDidLoad()

  filterClearInteractor.connectFilterState(filterState)
  filterClearInteractor.connectController(clearRefinementsController)
}

Parameters

filterGroupIDs
type: [FilterGroup.ID]?
default: nil
Optional

The groupIDs of filters to clear. All filters will be cleared if unspecified.

1
2
3
4
5
let colorGroup = FilterGroup.ID.and(name: "color")
let categoryGroup = FilterGroup.ID.or(name: "category", filterType: .facet)

filterClearInteractor.connectFilterState(
  filterState, filterGroupIDs: [colorGroup, categoryGroup])
clearMode
type: ClearMode
default: .specified
Optional

Whether we should clear the specified filters or all filters except them.

1
2
3
4
5
filterClearInteractor.connectFilterState(
  filterState, filterGroupIDs: filterGroupIDs, clearMode: .specified)

filterClearInteractor.connectFilterState(
  filterState, filterGroupIDs: filterGroupIDs, clearMode: .except)

Customize 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 refinements button is clicked.

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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?()
  }

}

Did you find this page helpful?