Skip to content

Commit

Permalink
feat(grid): add sortingStrategy to pipe #4356
Browse files Browse the repository at this point in the history
  • Loading branch information
tachojelev committed Oct 29, 2019
1 parent 96e4012 commit 82f08b1
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 11 deletions.
17 changes: 12 additions & 5 deletions projects/igniteui-angular/src/lib/data-operations/data-util.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { IFilteringState } from './filtering-state.interface';

import { IgxSorting, IgxDataRecordSorting } from './sorting-strategy';
import { IgxSorting, IgxDataRecordSorting, IGridSortingStrategy } from './sorting-strategy';
import { IgxGrouping } from './grouping-strategy';
import { IGroupByResult } from './grouping-result.interface';

Expand Down Expand Up @@ -30,24 +30,31 @@ export enum DataType {
* @hidden
*/
export class DataUtil {
public static sort<T>(data: T[], expressions: ISortingExpression[], sorting: IgxSorting = new IgxSorting()): T[] {
public static sort<T>(data: T[], expressions: ISortingExpression[], sorting?: IGridSortingStrategy): T[] {
if (!sorting) {
sorting = new IgxSorting();
}
return sorting.sort(data, expressions);
}

public static treeGridSort(hierarchicalData: ITreeGridRecord[],
expressions: ISortingExpression[],
parent?: ITreeGridRecord): ITreeGridRecord[] {
parent?: ITreeGridRecord,
sorting?: IGridSortingStrategy): ITreeGridRecord[] {
let res: ITreeGridRecord[] = [];
hierarchicalData.forEach((hr: ITreeGridRecord) => {
const rec: ITreeGridRecord = DataUtil.cloneTreeGridRecord(hr);
rec.parent = parent;
if (rec.children) {
rec.children = DataUtil.treeGridSort(rec.children, expressions, rec);
rec.children = DataUtil.treeGridSort(rec.children, expressions, rec, sorting);
}
res.push(rec);
});

res = DataUtil.sort(res, expressions, new IgxDataRecordSorting());
if (!sorting) {
sorting = new IgxDataRecordSorting();
}
res = DataUtil.sort(res, expressions, sorting);

return res;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@
| gridTransaction:id:pipeTrigger
| visibleColumns:hasVisibleColumns
| gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger
| gridSort:sortingExpressions:id:pipeTrigger
| gridSort:sortingExpressions:sortStrategy:id:pipeTrigger
| gridGroupBy:groupingExpressions:groupingExpansionState:groupsExpanded:id:groupsRecords:pipeTrigger
| gridPaging:page:perPage:id:pipeTrigger
| gridSummary:hasSummarizedColumns:summaryCalculationMode:summaryPosition:id:pipeTrigger:summaryPipeTrigger"
Expand Down
6 changes: 4 additions & 2 deletions projects/igniteui-angular/src/lib/grids/grid/grid.pipes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { GridBaseAPIService } from '../api.service';
import { IgxGridBaseDirective } from '../grid-base.directive';
import { GridType } from '../common/grid.interface';
import { IFilteringStrategy } from '../../data-operations/filtering-strategy';
import { IGridSortingStrategy } from '../../data-operations/sorting-strategy';

/**
*@hidden
Expand All @@ -27,14 +28,15 @@ export class IgxGridSortingPipe implements PipeTransform {
this.gridAPI = <IgxGridAPIService>gridAPI;
}

public transform(collection: any[], expressions: ISortingExpression[], id: string, pipeTrigger: number): any[] {
public transform(collection: any[], expressions: ISortingExpression[], sorting: IGridSortingStrategy,
id: string, pipeTrigger: number): any[] {
const grid = this.gridAPI.grid;
let result: any[];

if (!expressions.length) {
result = collection;
} else {
result = DataUtil.sort(cloneArray(collection), expressions);
result = DataUtil.sort(cloneArray(collection), expressions, sorting);
}
grid.filteredSortedData = result;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@
| gridTransaction:id:pipeTrigger
| visibleColumns:hasVisibleColumns
| gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger
| gridSort:sortingExpressions:id:pipeTrigger
| gridSort:sortingExpressions:sortStrategy:id:pipeTrigger
| gridHierarchicalPaging:page:perPage:id:pipeTrigger
| gridHierarchical:hierarchicalState:id:primaryKey:childLayoutKeys:pipeTrigger" let-rowIndex="index"
[igxForScrollOrientation]="'vertical'" [igxForScrollContainer]='verticalScroll'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@
| visibleColumns:hasVisibleColumns
| treeGridHierarchizing:primaryKey:foreignKey:childDataKey:id:pipeTrigger
| treeGridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger
| treeGridSorting:sortingExpressions:id:pipeTrigger
| treeGridSorting:sortingExpressions:sortStrategy:id:pipeTrigger
| treeGridFlattening:id:expansionDepth:expansionStates:pipeTrigger
| treeGridPaging:page:perPage:id:pipeTrigger
| treeGridSummary:hasSummarizedColumns:summaryCalculationMode:summaryPosition:id:pipeTrigger:summaryPipeTrigger" let-rowIndex="index"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { ITreeGridRecord } from './tree-grid.interfaces';
import { IgxGridBaseDirective } from '../grid';
import { ISortingExpression } from '../../data-operations/sorting-expression.interface';
import { GridType } from '../common/grid.interface';
import { IGridSortingStrategy } from '../../data-operations/sorting-strategy';

/**
*@hidden
Expand Down Expand Up @@ -199,6 +200,7 @@ export class IgxTreeGridSortingPipe implements PipeTransform {
public transform(
hierarchicalData: ITreeGridRecord[],
expressions: ISortingExpression[],
sorting: IGridSortingStrategy,
id: string,
pipeTrigger: number): ITreeGridRecord[] {
const grid = this.gridAPI.grid;
Expand All @@ -207,7 +209,7 @@ export class IgxTreeGridSortingPipe implements PipeTransform {
if (!expressions.length) {
result = hierarchicalData;
} else {
result = DataUtil.treeGridSort(hierarchicalData, expressions);
result = DataUtil.treeGridSort(hierarchicalData, expressions, null, sorting);
}
const filteredSortedData = [];
this.flattenTreeGridRecords(result, filteredSortedData);
Expand Down

0 comments on commit 82f08b1

Please sign in to comment.