ngx-mat-multi-sort-fork
Version:
An extension for the angular material table to support multi-sorting.
52 lines • 6.87 kB
JavaScript
import { Directive } from '@angular/core';
import { MatSort } from '@angular/material/sort';
import * as i0 from "@angular/core";
export class MatMultiSort extends MatSort {
constructor() {
super(...arguments);
this.start = 'asc';
this.actives = [];
this.directions = [];
}
ngOnInit() {
super.ngOnInit();
}
sort(sortable) {
this.updateMultipleSorts(sortable);
super.sort(sortable);
}
updateMultipleSorts(sortable) {
const i = this.actives.findIndex(activeId => activeId === sortable.id);
if (this.isActive(sortable)) {
if (this.activeDirection(sortable) === (sortable.start ? sortable.start : this.start)) {
this.directions.splice(i, 1, this.getNextSortDirection(sortable));
}
else {
this.actives.splice(i, 1);
this.directions.splice(i, 1);
}
}
else {
this.actives.push(sortable.id);
this.directions.push(sortable.start ? sortable.start : this.start);
}
}
isActive(sortable) {
const i = this.actives.findIndex(activeId => activeId === sortable.id);
return i > -1;
}
activeDirection(sortable) {
const i = this.actives.findIndex(activeId => activeId === sortable.id);
return this.directions[i] || (sortable.start ? sortable.start : this.start);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: MatMultiSort, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: MatMultiSort, selector: "[matMultiSort]", exportAs: ["matMultiSort"], usesInheritance: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: MatMultiSort, decorators: [{
type: Directive,
args: [{
selector: '[matMultiSort]',
exportAs: 'matMultiSort'
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LW11bHRpLXNvcnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0LW11bHRpLXNvcnQvc3JjL2xpYi9tYXQtbXVsdGktc29ydC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBOEIsTUFBTSx3QkFBd0IsQ0FBQzs7QUFNN0UsTUFBTSxPQUFPLFlBQWEsU0FBUSxPQUFPO0lBSnpDOztRQU1FLFVBQUssR0FBRyxLQUF1QixDQUFDO1FBRWhDLFlBQU8sR0FBYSxFQUFFLENBQUM7UUFDdkIsZUFBVSxHQUFvQixFQUFFLENBQUM7S0FxQ2xDO0lBbkNDLFFBQVE7UUFDTixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksQ0FBQyxRQUFxQjtRQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBcUI7UUFDdkMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3JGLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDbkU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDOUI7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwRTtJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsUUFBcUI7UUFDNUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBcUI7UUFDbkMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RSxDQUFDOzhHQXhDVSxZQUFZO2tHQUFaLFlBQVk7OzJGQUFaLFlBQVk7a0JBSnhCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsUUFBUSxFQUFFLGNBQWM7aUJBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkNoYW5nZXMsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTb3J0LCBNYXRTb3J0YWJsZSwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbbWF0TXVsdGlTb3J0XScsXHJcbiAgZXhwb3J0QXM6ICdtYXRNdWx0aVNvcnQnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRNdWx0aVNvcnQgZXh0ZW5kcyBNYXRTb3J0IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cclxuICBzdGFydCA9ICdhc2MnIGFzICdhc2MnIHwgJ2Rlc2MnO1xyXG5cclxuICBhY3RpdmVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGRpcmVjdGlvbnM6IFNvcnREaXJlY3Rpb25bXSA9IFtdO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgfVxyXG5cclxuICBzb3J0KHNvcnRhYmxlOiBNYXRTb3J0YWJsZSk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVNdWx0aXBsZVNvcnRzKHNvcnRhYmxlKTtcclxuICAgIHN1cGVyLnNvcnQoc29ydGFibGUpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTXVsdGlwbGVTb3J0cyhzb3J0YWJsZTogTWF0U29ydGFibGUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGkgPSB0aGlzLmFjdGl2ZXMuZmluZEluZGV4KGFjdGl2ZUlkID0+IGFjdGl2ZUlkID09PSBzb3J0YWJsZS5pZCk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNBY3RpdmUoc29ydGFibGUpKSB7XHJcbiAgICAgIGlmICh0aGlzLmFjdGl2ZURpcmVjdGlvbihzb3J0YWJsZSkgPT09IChzb3J0YWJsZS5zdGFydCA/IHNvcnRhYmxlLnN0YXJ0IDogdGhpcy5zdGFydCkpIHtcclxuICAgICAgICB0aGlzLmRpcmVjdGlvbnMuc3BsaWNlKGksIDEsIHRoaXMuZ2V0TmV4dFNvcnREaXJlY3Rpb24oc29ydGFibGUpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9ucy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlcy5wdXNoKHNvcnRhYmxlLmlkKTtcclxuICAgICAgdGhpcy5kaXJlY3Rpb25zLnB1c2goc29ydGFibGUuc3RhcnQgPyBzb3J0YWJsZS5zdGFydCA6IHRoaXMuc3RhcnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNBY3RpdmUoc29ydGFibGU6IE1hdFNvcnRhYmxlKSB7XHJcbiAgICBjb25zdCBpID0gdGhpcy5hY3RpdmVzLmZpbmRJbmRleChhY3RpdmVJZCA9PiBhY3RpdmVJZCA9PT0gc29ydGFibGUuaWQpO1xyXG4gICAgcmV0dXJuIGkgPiAtMTtcclxuICB9XHJcblxyXG4gIGFjdGl2ZURpcmVjdGlvbihzb3J0YWJsZTogTWF0U29ydGFibGUpOiAnYXNjJyB8ICdkZXNjJyB7XHJcbiAgICBjb25zdCBpID0gdGhpcy5hY3RpdmVzLmZpbmRJbmRleChhY3RpdmVJZCA9PiBhY3RpdmVJZCA9PT0gc29ydGFibGUuaWQpO1xyXG4gICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uc1tpXSB8fCAoc29ydGFibGUuc3RhcnQgPyBzb3J0YWJsZS5zdGFydCA6IHRoaXMuc3RhcnQpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19