Skip to content

PinnedRowsPlugin

Pinned Rows (Status Bar) Plugin for tbw-grid

Creates fixed status bars at the top or bottom of the grid for displaying aggregations, row counts, or custom content. Think of it as the “totals row” you’d see in a spreadsheet— always visible regardless of scroll position.

import { PinnedRowsPlugin } from '@toolbox-web/grid/plugins/pinned-rows';
FunctionDescription
sumSum of values
avgAverage of values
countCount of rows
minMinimum value
maxMaximum value
PropertyDefaultDescription
--tbw-pinned-rows-bgvar(--tbw-color-panel-bg)Status bar background
--tbw-pinned-rows-bordervar(--tbw-color-border)Status bar border
OptionTypeDescription
slots?PinnedRowSlot[]Unified ordered list of pinned-row slots. When provided, aggregationRows, customPanels, position, showRowCount, showSelectedCount and showFilteredCount are ignored — slots are rendered in declared order within their position (‘top’ or ‘bottom’, default ‘bottom’).
position?PinnedRowsPositionPosition of the info bar (default: ‘bottom’).
showRowCount?booleanShow total row count in info bar (default: true).
showSelectedCount?booleanShow selected row count in info bar (default: true).
showFilteredCount?booleanShow filtered row count when filter is active (default: true).
customPanels?PinnedRowsPanel[]Custom panels to display in the info bar.
aggregationRows?AggregationRowConfig[]Aggregation rows (footer/header rows with computed values).
fullWidth?booleanDefault fullWidth mode for all aggregation rows. When true, each aggregation row renders as a single spanning cell with label and aggregated values inline. When false (default), rows render per-column cells aligned to the grid template. Individual AggregationRowConfig.fullWidth (or AggregationSlot.fullWidth) overrides this.
import '@toolbox-web/grid';
import {
PinnedRowsPlugin,
rowCountPanel,
} from '@toolbox-web/grid/plugins/pinned-rows';
grid.gridConfig = {
columns: [
{ field: 'product', header: 'Product' },
{ field: 'quantity', header: 'Qty', type: 'number' },
{ field: 'price', header: 'Price', type: 'currency' },
],
plugins: [
new PinnedRowsPlugin({
slots: [
{
id: 'totals',
position: 'bottom',
aggregators: { quantity: 'sum', price: 'sum' },
cells: { product: 'Totals:' },
},
{ id: 'count', position: 'bottom', render: rowCountPanel() },
],
}),
],
};

Extends BaseGridPlugin

Inherited methods like attach(), detach(), afterRender(), etc. are documented in the base class.

Refresh the status bar to reflect current grid state.

refresh(): void

Get the current status bar context.

getContext(): PinnedRowsContext

PinnedRowsContext - The context with row counts and other info


Add a custom panel to the info bar.

addPanel(panel: PinnedRowsPanel): void
NameTypeDescription
panelPinnedRowsPanelThe panel configuration to add

Remove a custom panel by ID.

removePanel(id: string): void
NameTypeDescription
idstringThe panel ID to remove

Add an aggregation row.

addAggregationRow(row: AggregationRowConfig): void
NameTypeDescription
rowAggregationRowConfigThe aggregation row configuration

Remove an aggregation row by ID.

removeAggregationRow(id: string): void
NameTypeDescription
idstringThe aggregation row ID to remove

AI assistants: For complete API documentation, implementation guides, and code examples for this library, see https://raw.githubusercontent.com/OysteinAmundsen/toolbox/main/llms-full.txt