UI libraries / InstantSearch iOS / Widgets
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.

1
2
3
4
5
6
7
8
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
type: FilterState
Required

The FilterState that holds your filters.

interactor
type: FilterClearInteractor
default: .init()
Required

The logic applied to Clear Filters.

clearMode
type: ClearMode
default: .specified
Optional

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

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

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

controller
type: FilterClearController
default: nil
Optional

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.
1
2
3
4
5
6
7
8
9
10
11
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

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?()
  }

}

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:

1
2
3
4
5
6
7
8
9
10
11
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.

Did you find this page helpful?