Skip to content

Commit 502776c

Browse files
authored
fix(sorting): Respect sorting direction set to none when set through sortingExpressions (#16332)
1 parent 33640f6 commit 502776c

File tree

6 files changed

+121
-93
lines changed

6 files changed

+121
-93
lines changed

projects/igniteui-angular/src/lib/data-operations/sorting-strategy.spec.ts

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,34 +24,46 @@ describe('Unit testing SortingStrategy', () => {
2424
strategy: DefaultSortingStrategy.instance()
2525
}]);
2626
expect(dataGenerator.getValuesForColumn(res, 'number'))
27-
.toEqual([4, 2, 0, 3, 1]);
27+
.toEqual([4, 2, 0, 3, 1]);
2828
});
2929
it('tests `compareObjects`', () => {
3030
const strategy = DefaultSortingStrategy.instance();
3131
expect(strategy.compareValues(1, 0) === 1 &&
32-
strategy.compareValues(true, false) === 1 &&
33-
strategy.compareValues('bc', 'adfc') === 1)
32+
strategy.compareValues(true, false) === 1 &&
33+
strategy.compareValues('bc', 'adfc') === 1)
3434
.toBeTruthy('compare first argument greater than second');
3535
expect(strategy.compareValues(1, 2) === -1 &&
36-
strategy.compareValues('a', 'b') === -1 &&
37-
strategy.compareValues(false, true) === -1)
36+
strategy.compareValues('a', 'b') === -1 &&
37+
strategy.compareValues(false, true) === -1)
3838
.toBeTruthy('compare 0, 1');
3939
expect(strategy.compareValues(0, 0) === 0 &&
40-
strategy.compareValues(true, true) === 0 &&
41-
strategy.compareValues('test', 'test') === 0
42-
)
40+
strategy.compareValues(true, true) === 0 &&
41+
strategy.compareValues('test', 'test') === 0
42+
)
4343
.toBeTruthy('Comare equal variables');
4444
});
4545
it('tests default settings', () => {
4646
(data[4] as { string: string }).string = 'ROW';
4747
const res = sorting.sort(data, [{
48-
dir: SortingDirection.Asc,
49-
fieldName: 'string',
50-
ignoreCase: true,
51-
strategy: DefaultSortingStrategy.instance()
52-
}]);
48+
dir: SortingDirection.Asc,
49+
fieldName: 'string',
50+
ignoreCase: true,
51+
strategy: DefaultSortingStrategy.instance()
52+
}]);
5353
expect(dataGenerator.getValuesForColumn(res, 'number'))
54-
.toEqual([4, 0, 1, 2, 3]);
54+
.toEqual([4, 0, 1, 2, 3]);
55+
});
56+
57+
it('should not sort when sorting direction is None', () => {
58+
const unsortedData = [{ number: 3 }, { number: 1 }, { number: 4 }, { number: 0 }, { number: 2 }];
59+
const res = sorting.sort(unsortedData, [{
60+
dir: SortingDirection.None,
61+
fieldName: 'number',
62+
ignoreCase: false,
63+
strategy: DefaultSortingStrategy.instance()
64+
}]);
65+
expect(res.map(d => d.number))
66+
.toEqual([3, 1, 4, 0, 2]);
5567
});
5668

5769
});

projects/igniteui-angular/src/lib/grids/common/strategy.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { IGroupingState } from '../../data-operations/groupby-state.interface';
55
import { IGroupingExpression } from '../../data-operations/grouping-expression.interface';
66
import { IGroupByResult } from '../../data-operations/grouping-result.interface';
77
import { getHierarchy, isHierarchyMatch } from '../../data-operations/operations';
8-
import { DefaultSortingStrategy, ISortingExpression } from '../../data-operations/sorting-strategy';
8+
import { DefaultSortingStrategy, ISortingExpression, SortingDirection } from '../../data-operations/sorting-strategy';
99
import { GridType } from './grid.interface';
1010

1111
const DATE_TYPE = 'date';
@@ -229,7 +229,11 @@ export class IgxSorting implements IGridSortingStrategy {
229229
const isDate = column?.dataType === DATE_TYPE || column?.dataType === DATE_TIME_TYPE;
230230
const isTime = column?.dataType === TIME_TYPE || column?.dataType === DATE_TIME_TYPE;
231231
const isString = column?.dataType === STRING_TYPE;
232-
data = expr.strategy.sort(data, expr.fieldName, expr.dir, expr.ignoreCase, this.getFieldValue, isDate, isTime, grid);
232+
if (expr.dir === SortingDirection.None) {
233+
data = this.sortDataRecursive(data, expressions, expressionIndex + 1, grid);
234+
} else {
235+
data = expr.strategy.sort(data, expr.fieldName, expr.dir, expr.ignoreCase, this.getFieldValue, isDate, isTime, grid);
236+
}
233237
if (expressionIndex === exprsLen - 1) {
234238
return data;
235239
}

0 commit comments

Comments
 (0)