UNPKG

devexpress-reporting

Version:

DevExpress Reporting provides the capability to develop a reporting application to create and customize reports.

88 lines (87 loc) 3.41 kB
/** * DevExpress HTML/JS Reporting (viewer\internal\_sortingProcessor.js) * Version: 24.2.7 * Build date: Apr 29, 2025 * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * License: https://www.devexpress.com/Support/EULAs/universal.xml */ import { ColumnSortOrder } from './_previewRequestWrapper'; export class SortingProcessor { constructor(_getSortingStage) { this._getSortingStage = _getSortingStage; } doSorting(sortData, shiftKey, ctrlKey) { if (!sortData) return; if (ctrlKey) { if (this._detachSorting(sortData)) return; } else if (shiftKey) this._appendSorting(sortData); else this._applySorting(sortData); return true; } _applySorting(sortData) { const sortingStage = this._getSortingStage(); for (let i = 0; i < sortingStage.length; i++) { if (sortingStage[i] && sortingStage[i].Key === sortData.target) { const value = sortingStage[i].Value || []; for (let index = 0; index < value.length; index++) { if (value[index] && (value[index].fieldName === sortData.field)) { if (index != 0) { const x = value.splice(index, 1)[0]; this._changeSortOrder(x); value.unshift(x); } else this._changeSortOrder(value[index]); } else value[index].sortOrder = ColumnSortOrder.None; } return; } } } _appendSorting(sortData) { const sortingStage = this._getSortingStage(); for (let i = 0; i < sortingStage.length; i++) { if (sortingStage[i] && sortingStage[i].Key === sortData.target) { const value = sortingStage[i].Value || []; for (let index = 0; index < value.length; index++) { if (value[index] && (value[index].fieldName === sortData.field)) { if (index != value.length - 1) { const x = value.splice(index, 1)[0]; this._changeSortOrder(x); value.push(x); return; } this._changeSortOrder(value[index]); return; } } } } } _detachSorting(sortData) { let skipProcessing = false; const sortingStage = this._getSortingStage(); for (let i = 0; i < sortingStage.length; i++) { if (sortingStage[i] && sortingStage[i].Key === sortData.target) { (sortingStage[i].Value || []).forEach(f => { if (f.sortOrder === ColumnSortOrder.None) skipProcessing = true; else f.sortOrder = ColumnSortOrder.None; }); return; } } return skipProcessing; } _changeSortOrder(fieldInfo) { fieldInfo.sortOrder = fieldInfo.sortOrder === ColumnSortOrder.Ascending ? ColumnSortOrder.Descending : ColumnSortOrder.Ascending; } }