For AI agents: the complete documentation index is available at https://wallarm.github.io/design-system/llms.txt, the full documentation bundle is available at https://wallarm.github.io/design-system/llms-full.txt, and this page is available as Markdown at https://wallarm.github.io/design-system/components/filter-cascade.md.

FilterCascade

A filter over a hierarchy — organization › deployment › application, region › zone. The same 36px pill as FilterDropdown; each level opens as its own panel beside the option that opened it, and an item at any depth can be picked. The trigger reads the path: «Scope ● a › ● b», the tooltip carries it whole. Items are the consumer’s own objects, read through accessors; a level can load when it is first opened (loadChildren), and parentLabel adds the option that picks the level’s parent — «Deployment level». The search finds items at every depth. Compose the panels with FilterCascadeLevels to add group labels and options set apart; with no children, FilterCascadeContent renders the levels by itself. Reach for FilterDropdown when the values are flat.

Source · Storybook

Usage

import { FilterCascade, FilterCascadeContent, FilterCascadeTrigger } from '@wallarm-org/design-system/FilterCascade';

Examples

Scope filter

The Scope filter of Flow management: lazy applications, «Deployment level», search, toggle.

Picked

A picked application: the trigger reads the path; only the deployment segment truncates.

Parent picked

The deployment itself, picked through «Deployment level».

Load error

A level that fails to load offers a retry.

Disabled

Props

PropTypeDefaultDescription
label *stringAttribute name: the trigger text, its aria-label, «Clear {label}», «Search {label}».
collection *FilterCascadeCollection<T>From createFilterCascadeCollection.
valuestring[] | undefinedControlled path, top level first; [] = unset.
defaultValuestring[] | undefined
onValueChange((details: FilterCascadeValueChangeDetails<T>) => void) | undefined
openboolean | undefined
defaultOpenboolean | undefined
onOpenChange((open: boolean) => void) | undefined
loadChildren((item: T, path: string[]) => Promise<T[]>) | undefinedLoads the next level of an item the collection marks with hasChildren — when the item is first highlighted, or when it is on the picked path.
parentLabelstring | ((item: T) => string) | undefinedPuts an option at the top of every next level that picks the item which opened it — «Deployment level». With it, a row that opens a level only opens it; without it, the row itself is picked.
searchIn"all" | "top" | undefinedallWhat the search matches: every loaded level, as one list with each match's path ('all'), or the top level only, its levels still opening beside it ('top').
searchThresholdnumber | undefinedDEFAULT_SEARCH_THRESHOLDTop-level option count from which FilterCascadeSearch renders.
disabledboolean | undefinedfalse
titlestring | undefined
defaultCheckedboolean | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
relstring | undefined
data-testidstring | undefined

FilterCascadeClear

PropTypeDefaultDescription
disabledboolean | undefined
namestring | undefined
type"button" | "submit" | "reset" | undefined
valuestring | number | readonly string[] | undefined
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
titlestring | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined
data-testidstring | undefined

FilterCascadeContent

PropTypeDefaultDescription
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
titlestring | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined
data-testidstring | undefined

FilterCascadeItem

PropTypeDefaultDescription
item *FilterCascadeEntry<unknown>An entry of a level's items (or its parentItem) from useFilterCascade.
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
titlestring | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined
data-testidstring | undefined

FilterCascadeEmpty

PropTypeDefaultDescription
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
titlestring | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined
data-testidstring | undefined

FilterCascadeGroupLabel

PropTypeDefaultDescription
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
titlestring | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined
data-testidstring | undefined

FilterCascadeItems

PropTypeDefaultDescription
filter((item: FilterCascadeEntry<unknown>) => boolean) | undefinedWhich of the level's options to render; all of them by default.

FilterCascadeLevel

PropTypeDefaultDescription
level *FilterCascadeLevelData<unknown>An entry of levels from useFilterCascade.
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
titlestring | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined
data-testidstring | undefined

FilterCascadeParentItem

PropTypeDefaultDescription
titlestring | undefined
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined
data-testidstring | undefined

FilterCascadeSearch

PropTypeDefaultDescription
onChange((query: string) => void) | undefinedCalled after the query changes; the root owns the query itself.
titlestring | undefined
patternstring | undefined
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
relstring | undefined
disabledboolean | undefined
namestring | undefined
altstring | undefined
heightstring | number | undefined
srcstring | undefined
widthstring | number | undefined
autoCompleteHTMLInputAutoCompleteAttribute | undefined
maxLengthnumber | undefined
minLengthnumber | undefined
placeholderstring | undefined
readOnlyboolean | undefined
requiredboolean | undefined
checkedboolean | undefined
stepstring | number | undefined
acceptstring | undefined
maxstring | number | undefined
minstring | number | undefined
multipleboolean | undefined
onClear(() => void) | undefinedCalled when the built-in clear button empties the field, before onChange('').
data-testidstring | undefined

FilterCascadeCheckboxItem

PropTypeDefaultDescription
checked *boolean
onCheckedChange((checked: boolean) => void) | undefined
iconReactNodeBefore the label, in the options' 16px icon slot — a status dot.
titlestring | undefined
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
relstring | undefined
type"button" | "submit" | "reset" | undefined
disabledboolean | undefined
namestring | undefined
valuestring | number | readonly string[] | undefined
data-testidstring | undefined

FilterCascadeSection

PropTypeDefaultDescription
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
titlestring | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined
data-testidstring | undefined

FilterCascadeTrigger

PropTypeDefaultDescription
titlestring | undefined
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined
type"button" | "submit" | "reset" | undefined
disabledboolean | undefined
namestring | undefined
valuestring | number | readonly string[] | undefined
data-testidstring | undefined