Revision control

Copy as Markdown

Other Tools

# Quick Filter Bar
The UI for the Quick Filter Bar is split into quickFilterBar.js which operates
on the DOM and QuickFilterManager.sys.mjs, which is responsible for the state
management of the UI.
The actual filtering is done in the folder view.
The filters are made up of boolean toggles, a text filter with its own boolean
toggles, and the tags filters.
## Filter State Propagation
All UI elements that update with the state of the quick filter actions are
registered as filters to the `QuickFilterManager`. This includes for example the
result count.
The `quickFilterBar.js` plumbs the connections to the actual DOM based on the
registered filters and based on events from the DBView. That means it will call
`domBindExtra` on the filter implementation. To propagate changes in the filter
state, it uses a `QuickFilterState` instance where it calls `setFilterValue` and
then uses its `createSearchTerms` to create `QuickFilterSerchListener` instances.
If the filter definition has an `onCommand`method it is also called whenever the
UI element is interacted with and is used to provide the value that is set for
the filter.
Creating the `QuickFilterState` calls `propagateState` on the filter definition.
The state is recreated whenever the folder is switched, allowing `propagateState`
to manage the stick feature.
`createSearchTerms` on `QuickFilterState` uses `QuickFilterManager` to connect
back to the registered filter definitions and calls `appendTerms` on them.
Once the `onMessagesChanged` event is called because the filters were applied,
the special "results" filter is updated and any filter with `postFilterProcess`
has a chance to update its filter value and potentially have `reflectInDOM`
called.