import type { HotInstance } from '../../../core/types'; import type { ColumnSortingConfig } from '../../columnSorting/columnSorting'; type SortOrder = 'asc' | 'desc'; /** Query-format sort descriptor `{ prop, order }`. */ type QuerySort = { prop: string; order: SortOrder; } | null; /** * Duck-typed interface for the subset of ColumnSorting plugin API used in this module. * Using a structural interface avoids a circular dependency on the concrete plugin class. */ interface ColumnSortingPluginLike { enabled?: boolean; getSortConfig(): ColumnSortingConfig | ColumnSortingConfig[]; setSortConfig(sortConfig?: ColumnSortingConfig | ColumnSortingConfig[]): void; } /** * Normalizes a sort descriptor to query format `{ prop, order }`. * Accepts either plugin format `{ column, sortOrder }` (column index) or already query format `{ prop, order }`. * * @param {{ column?: number, prop?: string, sortOrder?: string, order?: string }|null} sort Sort from plugin or overrides. * @param {function(number): string} colToProp Maps visual column index to column data key. * @returns {{ prop: string, order: 'asc'|'desc' }|null} Query-format sort or null. */ export declare function normalizeSortToQueryFormat(sort: unknown, colToProp: (col: number) => string): QuerySort; /** * Converts query-format sort `{ prop, order }` to ColumnSorting plugin format `{ column, sortOrder }`. * * @param {{ prop: string, order: 'asc'|'desc' }|null} sort Query-format sort. * @param {function(string): number} propToCol Maps column data key to visual column index. * @returns {{ column: number, sortOrder: 'asc'|'desc' }|null} Plugin-format sort or null. */ export declare function querySortToPluginSort(sort: unknown, propToCol: (prop: string) => number): { column: number; sortOrder: SortOrder; } | null; /** * Copies ColumnSorting state into query `sort` as `{ prop, order }` when sorting is enabled. * * @param {{ enabled?: boolean, getSortConfig: function(): * }|null|undefined} columnSortingPlugin ColumnSorting plugin instance. * @param {{ sort: ({ prop: string, order: 'asc'|'desc' }|null) }} queryParameters Target object (mutated). * @param {function(number): string} colToProp Maps visual column index to column data key. * @returns {void} */ export declare function applyColumnSortingToQueryParameters(columnSortingPlugin: ColumnSortingPluginLike | null | undefined, queryParameters: { sort: QuerySort; }, colToProp: (col: number) => string): void; /** * Aligns ColumnSorting UI with a single-column sort descriptor from the data layer. * * @param {{ enabled?: boolean, setSortConfig: function(*): void }|null|undefined} columnSortingPlugin ColumnSorting plugin instance. * @param {{ column: number, sortOrder: 'asc'|'desc' }|Array|undefined|null} sort ColumnSorting config entry, `[]` to clear, or null/undefined. * @returns {void} */ export declare function syncColumnSortingFromQuerySort(columnSortingPlugin: ColumnSortingPluginLike | null | undefined, sort: ColumnSortingConfig | ColumnSortingConfig[] | null | undefined): void; /** * Copies ColumnSorting state into query `sort` when sorting is enabled. * * @param {Core} hot Handsontable instance. * @param {{ sort: ({ prop: string, order: 'asc'|'desc' }|null) }} queryParameters Target object (mutated). * @returns {void} */ export declare function applyColumnSortToQueryFromPlugin(hot: HotInstance, queryParameters: { sort: QuerySort; }): void; /** * Normalizes `params.sort` to query format using column props. * * @param {object} params Fetch params object (mutated). May hold plugin or query `sort`; written back as query `sort`. * @param {Core} hot Handsontable instance. * @returns {void} */ export declare function normalizeSortInFetchParams(params: { sort: unknown; }, hot: HotInstance): void; /** * Converts DataProvider query `sort` payload (`prop` and `order`) to a value accepted by [[ColumnSorting#setSortConfig]]. * Inverse of [[applyColumnSortingToQueryParameters]] for restoring header state after a successful fetch. * * @param {Core} hot Handsontable instance. * @param {{ prop: string, order: 'asc'|'desc' }|null|undefined} sortingPayload Sort from [[DataProviderQueryParameters]], or null when unsorted. * @returns {{ column: number, sortOrder: 'asc'|'desc' }|Array} Empty array when there is no valid sort; otherwise a single-column config object. */ export declare function sortingPayloadToSort(hot: HotInstance, sortingPayload: QuerySort | undefined): { column: number; sortOrder: SortOrder; } | ColumnSortingConfig[]; /** * Server-backed sort: apply plugin sort config, refresh query from plugins, refetch; return false to cancel default. * * @param {object} ctx Hook context. * @param {Core} ctx.hot Handsontable instance. * @param {function(): boolean} ctx.isEnabled Whether DataProvider is enabled. * @param {function(): boolean} ctx.hasFetchFn Whether fetchRows is configured. * @param {function(): void} ctx.applyQueryParametersFromPlugins Refreshes query from Pagination, ColumnSorting, and Filters. * @param {function(object=): Promise<*>} ctx.fetchData Triggers refetch (optional overrides, e.g. `{ skipLoading: true }`). * @param {Array} _currentSortConfig Current sort config (hook arity). * @param {Array} destinationSortConfigs Destination sort config from the hook. * @param {boolean} sortPossible Whether sort is allowed. * @returns {boolean|void} False when server path handled the sort. */ export declare function handleBeforeColumnSortForServer(ctx: { hot: HotInstance; hasFetchFn: () => boolean; applyQueryParametersFromPlugins: () => void; fetchData: (overrides?: object) => Promise; }, _currentSortConfig: unknown[], destinationSortConfigs: unknown[], sortPossible: boolean): boolean | void; export {};