Plugins
addSortBy
addSortBy
sorts table rows by column values.
Options
Options passed into addSortBy
.
const table = createTable(data, {
sort: addSortBy({ ... }),
});
initialSortKeys?: SortKey[]
Sets the initial sort keys.
Defaults to []
.
disableMultiSort?: boolean
Disables multi-sorting for the table.
Defaults to false
.
isMultiSortEvent?: (event: Event) => boolean
Allows overriding the default multi-sort behavior.
Takes an Event and returns whether the action triggers a multi-sort.
Defaults to multi-sort on shift-click.
toggleOrder?: ()[]
Allows customization of the toggling order. This cannot contain duplicate values. Set this to ['asc', 'desc']
to disable toggling to an unsorted column.
Defaults to ['asc', 'desc', undefined]
.
Column Options
Options passed into column definitions.
const columns = table.createColumns([
table.column({
header: 'Name',
accessor: 'name',
plugins: {
sort: { ... },
},
}),
]);
disable?: boolean
Disables sorting on the column.
Defaults to false
.
compareFn?: (leftValue, rightValue) => number
Receives a left and right value to compare for sorting.
If leftValue
should come before rightValue
, return a negative number.
If rightValue
should come before leftValue
, return a positive number.
Otherwise if both values are equal in sorting priority, return 0.
getSortValue?: (value) => string | number | (string | number)[]
Receives the value of the column cell and returns the value to sort the column on.
Useful for sorting a column that contains complex data.
If a number
is returned, sort numerically. If a string
is returned, sort alphabetically.
If an array is returned, sort on the first non-matching element.
Defaults to (value) => value.
invert?: boolean
Reverses the underlying sorting direction.
Useful for sorting negative numbers i.e. ascending order becomes -1, -2, -3...
Defaults to false
.
Prop Set
Extensions to the view model.
Subscribe to .props()
on the respective table components.
{#each $headerRows as headerRow (headerRow.id)}
<Subscribe rowProps={headerRow.props()} let:rowProps>
{rowProps.sort} <!-- HeaderRow props -->
{#each headerRow.cells as cell (cell.id)}
<Subscribe props={cell.props()} let:props>
{props.sort} <!-- HeaderCell props -->
</Subscribe>
{/each}
</Subscribe>
{/each}
HeaderCell
order: 'asc' | 'desc' | undefined
The order of the data column represented by the header cell. If undefined
, the data column is not sorted.
disabled: boolean
Whether the data column represented by the header cell has sorting disabled.
toggle: (event: Event) => void
Toggles sorting on the data column represented by the header cell (from 'asc'
to 'desc'
to undefined
).
clear: () => void
Clears sorting on the data column represented by the header cell.
BodyCell
order: 'asc' | 'desc' | undefined
The order of the data column on which the body cell is. If undefined
, the data column is not sorted.
Plugin State
State provided by addSortBy
.
const { headerRows, rows, pluginStates } = table.createViewModel(columns);
const { ... } = pluginStates.sort;
preSortedRows: Readable<BodyRow<Item>[]>
The view model rows before sorting.
sortKeys: WritableSortKeys
The active sorting keys.
WritableSortKeys
is equivalent to Writable<SortKey[]>
with an additional toggleId
method.
WritableSortKeys#toggleId: (id: string, options: { multiSort: boolean }) => void
Toggles sorting on the column with id
(from 'asc'
to 'desc'
to undefined
).
WritableSortKeys#clearId: (id: string) => void
Clears sorting on the column with id
.
SortKey
export interface SortKey {
id: string;
order: 'asc' | 'desc';
}