import { ColumnSorting } from '../columnSorting'; import type { SortConfig } from '../columnSorting/columnSorting'; import type { ColumnStatesManager } from '../columnSorting/columnStatesManager'; export declare const PLUGIN_KEY = "multiColumnSorting"; export declare const PLUGIN_PRIORITY = 170; /** * @plugin MultiColumnSorting * @class MultiColumnSorting * * @description * This plugin sorts the view by columns (but does not sort the data source!). To enable the plugin, set the * {@link Options#multiColumnSorting} property to the correct value (see the examples below). * * @example * ```js * // as boolean * multiColumnSorting: true * * // as an object with initial sort config (sort ascending for column at index 1 and then sort descending for column at index 0) * multiColumnSorting: { * initialConfig: [{ * column: 1, * sortOrder: 'asc' * }, { * column: 0, * sortOrder: 'desc' * }] * } * * // as an object which define specific sorting options for all columns * multiColumnSorting: { * 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: {@link Options#columns} * columns: [{ * multiColumnSorting: { * 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) * } * } * } * }] * ``` */ export declare class MultiColumnSorting extends ColumnSorting { /** * Returns the plugin key used to identify this plugin in Handsontable settings. */ static get PLUGIN_KEY(): string; /** * Returns the priority order used to determine the order in which plugins are initialized. */ static get PLUGIN_PRIORITY(): number; /** * Returns the list of settings keys observed by the plugin for configuration changes. */ static get SETTING_KEYS(): string[]; /** * Main settings key designed for the plugin. * * @private * @type {string} */ pluginKey: string; /** * Checks if the plugin is enabled in the Handsontable settings. This method is executed in {@link Hooks#beforeInit} * hook and if it returns `true` then the {@link MultiColumnSorting#enablePlugin} method is called. * When [[Options#dataProvider]] is a complete server-backed configuration, the DataProvider plugin blocks this plugin from enabling. * * @returns {boolean} */ isEnabled(): boolean; /** * Enables the plugin functionality for this Handsontable instance. */ enablePlugin(): void; /** * Disables the plugin functionality for this Handsontable instance. */ disablePlugin(): void; /** * Register shortcuts responsible for toggling column sorting functionality. * * @private */ registerShortcuts(): void; /** * Unregister shortcuts responsible for toggling column sorting functionality. * * @private */ unregisterShortcuts(): void; /** * Sorts the table by chosen columns and orders. * * @param {undefined|object|Array} sortConfig 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). * * **Note**: Please keep in mind that every call of `sort` function set an entirely new sort order. Previous sort configs aren't preserved. * * @example * ```js * // sort ascending first visual column * hot.getPlugin('multiColumnSorting').sort({ column: 0, sortOrder: 'asc' }); * * // sort first two visual column in the defined sequence * hot.getPlugin('multiColumnSorting').sort([{ * column: 1, sortOrder: 'asc' * }, { * column: 0, sortOrder: 'desc' * }]); * ``` * * @fires Hooks#beforeColumnSort * @fires Hooks#afterColumnSort */ sort(sortConfig?: SortConfig | SortConfig[]): void; /** * Clear the sort performed on the table. */ clearSort(): void; /** * Checks if the table is sorted (any column have to be sorted). * * @returns {boolean} */ isSorted(): boolean; /** * 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 {number} [column] Visual column index. * @returns {undefined|object|Array} */ getSortConfig(column?: number): SortConfig | SortConfig[] | undefined; /** * @description * 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 * ```js * beforeColumnSort: function(currentSortConfig, destinationSortConfigs) { * const columnSortPlugin = this.getPlugin('multiColumnSorting'); * * columnSortPlugin.setSortConfig(destinationSortConfigs); * * // const newData = ... // Calculated data set, ie. from an AJAX call. * * this.updateData(newData); // Update data set and re-render the table. * * return false; // The blockade for the default sort action. * } * ``` * * @param {undefined|object|Array} sortConfig 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). */ setSortConfig(sortConfig?: SortConfig | SortConfig[]): void; /** * Get normalized sort configs. * * @private * @param {object|Array} [sortConfig=[]] 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). * @returns {Array} */ getNormalizedSortConfigs(sortConfig?: SortConfig | SortConfig[]): SortConfig[]; /** * Update header classes. * * @private * @param {HTMLElement} headerSpanElement Header span element. * @param {...*} args Extra arguments for helpers. */ updateHeaderClasses(headerSpanElement: HTMLElement, columnStatesManager?: ColumnStatesManager, column?: number, showSortIndicator?: boolean, headerActionEnabled?: boolean): void; /** * Callback for the `onAfterOnCellMouseDown` hook. * * @private * @param {Event} event Event which are provided by hook. * @param {CellCoords} coords Visual coords of the selected cell. */ onAfterOnCellMouseDown(event: MouseEvent, coords: { row: number; col: number; }): void; }