Filter Numeric Comparison
FilterComparisonConnector<T>(
    filterState: FilterState,
    attribute: Attribute,
    operator: NumericOperator,
    number: T?,
    groupID: FilterGroupID
) where T : Number, T : Comparable<T>
        About this widget
Filter Numeric Comparison is a view to filter on a numeric value using a comparison operator.
Examples
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class MyActivity : AppCompatActivity() {
    val searcher = HitsSearcher(
        applicationID = ApplicationID("YourApplicationID"),
        apiKey = APIKey("YourSearchOnlyAPIKey"),
        indexName = IndexName("YourIndexName")
    )
    val filterState = FilterState()
    val price = Attribute("price")
    val operator = NumericOperator.GreaterOrEquals
    val filterComparison = FilterComparisonConnector<Long>(
        filterState = filterState,
        attribute = price,
        operator = operator
    )
    val connection = ConnectionHandler(filterComparison, searcher.connectFilterState(filterState))
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val priceView: NumberView<Long> = MyFilterPriceView() // your `NumberView<T>` implementation
        connection += filterComparison.connectView(priceView)
        searcher.searchAsync()
    }
    override fun onDestroy() {
        super.onDestroy()
        connection.disconnect()
        searcher.cancel()
    }
}
Low-level API
If you want to fully control the Filter Numeric Comparison components and connect them manually, use the following components:
Searcher: theSearcherthat handles your searches.FilterState: the current state of the filters.NumberViewModel<T>: the logic applied to the numeric value.NumberView<T>: the view that renders the numeric value.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class MyActivity : AppCompatActivity() {
    val searcher = HitsSearcher(
        applicationID = ApplicationID("YourApplicationID"),
        apiKey = APIKey("YourSearchOnlyAPIKey"),
        indexName = IndexName("YourIndexName")
    )
    val filterState = FilterState()
    val price = Attribute("price")
    val operator = NumericOperator.Greater
    val viewModel = NumberViewModel(range = 0..10)
    val connection = ConnectionHandler()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val view: NumberView<Int> = MyFilterPriceView() // your `NumberView<T>` implementation
        searcher.query.addFacet(price)
        connection += searcher.connectFilterState(filterState)
        connection += viewModel.connectView(view)
        connection += viewModel.connectFilterState(filterState, price, operator)
        searcher.searchAsync()
    }
    override fun onDestroy() {
        super.onDestroy()
        connection.disconnect()
        searcher.cancel()
    }
}
Compose UI
InstantSearch provides the NumberState as a state model, which is an implementation of the NumberView interface.
You need to connect NumberState to the FilterComparisonConnector or NumberViewModel like any other NumberView implementation.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class MyActivity : AppCompatActivity() {
    val searcher = HitsSearcher(
        applicationID = ApplicationID("YourApplicationID"),
        apiKey = APIKey("YourSearchOnlyAPIKey"),
        indexName = IndexName("YourIndexName")
    )
    val filterState = FilterState()
    val price = Attribute("price")
    val priceState = NumberState<Long>()
    val filterComparison = FilterComparisonConnector<Long>(
        filterState = filterState,
        attribute = price,
        operator = NumericOperator.GreaterOrEquals
    )
    val connections = ConnectionHandler(filterComparison)
    init {
        connections += searcher.connectFilterState(filterState)
        connections += filterComparison.connectView(priceState)
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyFilterPrice(priceState) // your own UI composable to display `text` and `computation`
        }
        searcher.searchAsync()
    }
    override fun onDestroy() {
        super.onDestroy()
        connections.disconnect()
        searcher.cancel()
    }
}
Parameters
| Parameter | Description | 
|---|---|
          
            filterState
          
         | 
        
           
                
                type: FilterState
                
               
              
                
                        Required
                
               
          The   | 
      
          
            attribute
          
         | 
        
           
                
                type: Attribute
                
               
              
                
                        Required
                
               
          The attribute to filter on.  | 
      
          
            operator
          
         | 
        
           
                
                type: NumericOperator
                
               
              
                
                        Required
                
               
          The   | 
      
          
            number
          
         | 
        
           
                
                type: T : Number, T : Comparable<T>
                
               
              
                
                  default: null
                
               
              
                
                    Optional
                
               
          Initial numeric value to filter on.  | 
      
          
            groupID
          
         | 
        
           
                
                type: FilterGroupID
                
               
              
                
                  default: FilterGroupID(attribute, FilterOperator.And)
                
               
              
                
                    Optional
                
               
          Groups all created filters under an ID and composes them with this operator.
Defaults to the used attribute, with   | 
      
View
| Parameter | Description | ||
|---|---|---|---|
          
            view
          
         | 
        
           
                
                type: NumberView<T>
                
               
              
                
                        Required
                
               
          The view that renders the numeric value.  | 
      ||
          
            presenter
          
         | 
        
           
                
                type: NumberPresenter<T>
                
               
              
                
                  default: NumberPresenterImpl
                
               
              
                
                    Optional
                
               
          How to display the numeric value.  | 
      ||
| 
           
Copy
 
       | 
      |||