Skip to content
Backlit
Esc
navigateopen⌘Jpreview
On this page

Select filter

Filter data with one or more declared choices.

A select filter accepts values from a fixed list. Each option has a protocol value and a display label. Backlit ignores a value that is not in the declared options.

API

filters.select(name: string, options: FilterOption[]): SelectFilterBuilder
Method Input Result
setLabel string Sets the filter-control label.
setCardinality "one" | "many" Selects one value or several values.

The default cardinality is one. The SDK does not include it in protocol output unless you set it.

Single value

Declare each allowed value and its display label.

import {
  defineFilters,
  defineResource,
  filters,
  section,
} from '@backlit/sdk'

const orders = defineResource('orders', [])
const orderFilters = defineFilters([
  filters.select('status', [
    { value: 'open', label: 'Open' },
    { value: 'shipped', label: 'Shipped' },
  ]),
])

orders.view(
  'list',
  { filters: orderFilters },
  (_ctx, view) =>
    section('Orders').setFilters(view.state.filters)
)

export default orders
{
  "kind": "success",
  "status": 200,
  "node": {
    "kind": "view",
    "resource": "orders",
    "name": "list",
    "slots": {
      "content": [
        {
          "kind": "section",
          "title": "Orders",
          "slots": {
            "content": [],
            "filters": {
              "kind": "filters",
              "resource": "orders",
              "view": "list",
              "keyword": "f",
              "definesResult": true,
              "dependsOnResult": false,
              "filters": [
                {
                  "kind": "select",
                  "name": "status",
                  "label": "",
                  "options": [
                    {
                      "value": "open",
                      "label": "Open"
                    },
                    {
                      "value": "shipped",
                      "label": "Shipped"
                    }
                  ]
                }
              ]
            }
          }
        }
      ]
    }
  }
}

Multiple values

Use the many cardinality to accept several declared values. Backlit keeps valid members and removes invalid members from the parsed array.

import {
  defineFilters,
  defineResource,
  filters,
  section,
} from '@backlit/sdk'

const orders = defineResource('orders', [])
const orderFilters = defineFilters([
  filters
    .select('status', [
      { value: 'open', label: 'Open' },
      { value: 'shipped', label: 'Shipped' },
    ])
    .setCardinality('many'),
])

orders.view(
  'list',
  { filters: orderFilters },
  (_ctx, view) =>
    section('Orders').setFilters(view.state.filters)
)

export default orders
{
  "kind": "success",
  "status": 200,
  "node": {
    "kind": "view",
    "resource": "orders",
    "name": "list",
    "slots": {
      "content": [
        {
          "kind": "section",
          "title": "Orders",
          "slots": {
            "content": [],
            "filters": {
              "kind": "filters",
              "resource": "orders",
              "view": "list",
              "keyword": "f",
              "definesResult": true,
              "dependsOnResult": false,
              "filters": [
                {
                  "kind": "select",
                  "name": "status",
                  "label": "",
                  "options": [
                    {
                      "value": "open",
                      "label": "Open"
                    },
                    {
                      "value": "shipped",
                      "label": "Shipped"
                    }
                  ],
                  "cardinality": "many"
                }
              ]
            }
          }
        }
      ]
    }
  }
}

Was this page helpful?