Skip to content

Filtering, History, And Application State

Core RevoGrid filters are evaluated against canonical cards and the host’s captured table columns. Kanban then composes its lightweight search and predicate:

grid.kanban = {
...config,
filter: {
query: searchInput.value,
fields: ['title', 'owner', 'labels'],
predicate: (card) => !card.archived,
},
};

A card must pass all three layers: RevoGrid filters, query matching, and the predicate. Search defaults to the configured card title field.

Header counts expose visible and total cards when filters differ. WIP limits always count all canonical cards.

Kanban coordinates with EventManagerPlugin and HistoryPlugin. Each successful move or editor CRUD action creates one ID-based operation record containing only inserted, updated, or deleted cards. Undo/redo is replayed through Kanban rather than against projected lane rows, including source-length changes.

History is not cleared merely because filtering, sorting, or board projection refreshes. Replacing grid.source with an externally authored dataset clears Kanban history so an old move cannot overwrite newer host data.

Listen to kanbancardmove and persist event.detail.changedCards in one transaction. This atomic list includes the moved cards and any destination-bucket cards whose ranks changed during a rebalance. event.detail.cards contains only the cards explicitly moved, while rebalancedCardIds identifies the subset re-ranked as part of the commit.

Use beforekanbancardmove for asynchronous-policy caches or synchronous authorization checks. Call preventDefault() to cancel before local state changes.

// Table to Kanban
grid.kanban = kanbanConfig;
// Kanban to table
grid.kanban = false;

Disabling Kanban restores the latest canonical source, latest host column definitions, and relevant table state. Sorting is not used for card order while the board is active; orderField remains authoritative. Re-enabling projects the current source again.