UNPKG

ngx-mat-multi-sort-fork

Version:

An extension for the angular material table to support multi-sorting.

52 lines 6.87 kB
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