JavaScript Data Grid ColumnSorting
Description
This plugin sorts the view by columns (but does not sort the data source!). To enable the plugin, set the Options#columnSorting property to the correct value (see the examples below).
Example
// as boolean
columnSorting: true
// as an object with initial sort config (sort ascending for column at index 1)
columnSorting: {
initialConfig: {
column: 1,
sortOrder: 'asc'
}
}
// as an object which define specific sorting options for all columns
columnSorting: {
sortEmptyCells: true, // true = the table sorts empty cells, false = the table moves all empty cells to the end of the table (by default)
indicator: true, // true = shows indicator for all columns (by default), false = don't show indicator for columns
headerAction: true, // true = allow to click on the headers to sort (by default), false = turn off possibility to click on the headers to sort
compareFunctionFactory: function(sortOrder, columnMeta) {
return function(value, nextValue) {
// Some value comparisons which will return -1, 0 or 1...
}
}
}
// as an object passed to the `column` property, allows specifying a custom options for the desired column.
// please take a look at documentation of `column` property: https://handsontable.com/docs/Options.html#columns
columns: [{
columnSorting: {
indicator: false, // disable indicator for the first column,
sortEmptyCells: true,
headerAction: false, // clicks on the first column won't sort
compareFunctionFactory: function(sortOrder, columnMeta) {
return function(value, nextValue) {
return 0; // Custom compare function for the first column (don't sort)
}
}
}
}]
Options
columnSorting
Source code (opens new window)columnSorting.columnSorting : boolean | object
The columnSorting
option configures the ColumnSorting
plugin.
You can set the columnSorting
option to one of the following:
Setting | Description |
---|---|
true | Enable the ColumnSorting plugin with the default configuration |
false | Disable the ColumnSorting plugin |
An object | - Enable the ColumnSorting plugin- Modify the ColumnSorting plugin options |
If you set the columnSorting
option to an object,
you can set the following ColumnSorting
plugin options:
Option | Possible settings |
---|---|
indicator | true : Display an arrow icon in the column header, to indicate a sortable columnfalse : Don't display the arrow icon in the column header |
headerAction | true : Enable clicking on the column header to sort the columnfalse : Disable clicking on the column header to sort the column |
sortEmptyCells | true : Sort empty cells as wellfalse : Place empty cells at the end |
compareFunctionFactory | A custom compare function |
If you set the columnSorting
option to an object,
you can also sort individual columns at Handsontable's initialization.
In the columnSorting
object, add an object named initialConfig
,
with the following properties:
Option | Possible settings | Description |
---|---|---|
column | A number | The index of the column that you want to sort at initialization |
sortOrder | 'asc' | 'desc' | The sorting order:'asc' : ascending'desc' : descending |
Read more:
Default: undefined
Example
// enable the `ColumnSorting` plugin
columnSorting: true
// enable the `ColumnSorting` plugin with custom configuration
columnSorting: {
// sort empty cells as well
sortEmptyCells: true,
// display an arrow icon in the column header
indicator: true,
// disable clicking on the column header to sort the column
headerAction: false,
// add a custom compare function
compareFunctionFactory(sortOrder, columnMeta) {
return function(value, nextValue) {
// some value comparisons which will return -1, 0 or 1...
}
}
}
// enable the `ColumnSorting` plugin
columnSorting: {
// at initialization, sort column 1 in ascending order
initialConfig: {
column: 1,
sortOrder: 'asc'
},
// at initialization, sort column 2 in descending order
initialConfig: {
column: 2,
sortOrder: 'desc'
}
}
Methods
clearSort
Source code (opens new window)columnSorting.clearSort()
Clear the sort performed on the table.
destroy
Source code (opens new window)columnSorting.destroy()
Destroys the plugin instance.
disablePlugin
Source code (opens new window)columnSorting.disablePlugin()
Disables the plugin functionality for this Handsontable instance.
enablePlugin
Source code (opens new window)columnSorting.enablePlugin()
Enables the plugin functionality for this Handsontable instance.
getSortConfig
Source code (opens new window)columnSorting.getSortConfig([column]) ⇒ undefined | object | Array
Get sort configuration for particular column or for all sorted columns. Objects contain column
and sortOrder
properties.
Note: Please keep in mind that returned objects expose visual column index under the column
key. They are handled by the sort
function.
Param | Type | Description |
---|---|---|
[column] | number | optional Visual column index. |
isEnabled
Source code (opens new window)columnSorting.isEnabled() ⇒ boolean
Checks if the plugin is enabled in the Handsontable settings. This method is executed in Hooks#beforeInit
hook and if it returns true
then the ColumnSorting#enablePlugin method is called.
isSorted
Source code (opens new window)columnSorting.isSorted() ⇒ boolean
Checks if the table is sorted (any column have to be sorted).
setSortConfig
Source code (opens new window)columnSorting.setSortConfig(sortConfig)
Warn: Useful mainly for providing server side sort implementation (see in the example below). It doesn't sort the data set. It just sets sort configuration for all sorted columns. Note: Please keep in mind that this method doesn't re-render the table.
Example
beforeColumnSort: function(currentSortConfig, destinationSortConfigs) {
const columnSortPlugin = this.getPlugin('columnSorting');
columnSortPlugin.setSortConfig(destinationSortConfigs);
// const newData = ... // Calculated data set, ie. from an AJAX call.
this.loadData(newData); // Load new data set and re-render the table.
return false; // The blockade for the default sort action.
}
Param | Type | Description |
---|---|---|
sortConfig | undefined object Array | Single column sort configuration or full sort configuration (for all sorted columns). The configuration object contains column and sortOrder properties. First of them contains visual column index, the second one contains sort order (asc for ascending, desc for descending). |
sort
Source code (opens new window)columnSorting.sort(sortConfig)
Sorts the table by chosen columns and orders.
Emits: Hooks#event:beforeColumnSort
, Hooks#event:afterColumnSort
Example
// sort ascending first visual column
hot.getPlugin('columnSorting').sort({ column: 0, sortOrder: 'asc' });
Param | Type | Description |
---|---|---|
sortConfig | undefined object | Single column sort configuration. The configuration object contains column and sortOrder properties. First of them contains visual column index, the second one contains sort order (asc for ascending, desc for descending). Note: Please keep in mind that every call of sort function set an entirely new sort order. Previous sort configs aren't preserved. |