ngx-mat-multi-sort
Version:
An extension for the angular material table to support multi-sorting.
1 lines • 49.9 kB
Source Map (JSON)
{"version":3,"file":"ngx-mat-multi-sort.mjs","sources":["../../../src/lib/mat-multi-sort.directive.ts","../../../src/lib/mat-multi-sort-header/mat-multi-sort-header.component.ts","../../../src/lib/mat-multi-sort-header/mat-multi-sort-header.component.html","../../../src/lib/mat-multi-sort-table-settings/mat-multi-sort-table-settings.component.ts","../../../src/lib/mat-multi-sort-table-settings/mat-multi-sort-table-settings.component.html","../../../src/lib/mat-multi-sort.module.ts","../../../src/lib/utils.ts","../../../src/lib/table-data.ts","../../../src/lib/mat-multi-sort-data-source.ts","../../../src/public_api.ts","../../../src/ngx-mat-multi-sort.ts"],"sourcesContent":["import { Directive, OnChanges, OnInit } from '@angular/core';\nimport { MatSort, MatSortable, SortDirection } from '@angular/material/sort';\n\n@Directive({\n selector: '[matMultiSort]',\n exportAs: 'matMultiSort'\n})\nexport class MatMultiSort extends MatSort implements OnInit, OnChanges {\n\n start = 'asc' as 'asc' | 'desc';\n\n actives: string[] = [];\n directions: SortDirection[] = [];\n\n ngOnInit(): void {\n super.ngOnInit();\n }\n\n sort(sortable: MatSortable): void {\n this.updateMultipleSorts(sortable);\n super.sort(sortable);\n }\n\n updateMultipleSorts(sortable: MatSortable): void {\n const i = this.actives.findIndex(activeId => activeId === sortable.id);\n\n if (this.isActive(sortable)) {\n if (this.activeDirection(sortable) === (sortable.start ? sortable.start : this.start)) {\n this.directions.splice(i, 1, this.getNextSortDirection(sortable));\n } else {\n this.actives.splice(i, 1);\n this.directions.splice(i, 1);\n }\n } else {\n this.actives.push(sortable.id);\n this.directions.push(sortable.start ? sortable.start : this.start);\n }\n }\n\n isActive(sortable: MatSortable) {\n const i = this.actives.findIndex(activeId => activeId === sortable.id);\n return i > -1;\n }\n\n activeDirection(sortable: MatSortable): 'asc' | 'desc' {\n const i = this.actives.findIndex(activeId => activeId === sortable.id);\n return this.directions[i] || (sortable.start ? sortable.start : this.start);\n }\n\n}\n","import {\n Component,\n Input,\n ChangeDetectorRef,\n Optional,\n Inject,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ElementRef\n} from '@angular/core';\nimport {MatSort, matSortAnimations, MatSortHeader, MatSortHeaderIntl} from '@angular/material/sort';\nimport { MatMultiSort } from '../mat-multi-sort.directive';\nimport { FocusMonitor } from '@angular/cdk/a11y';\n\n\n/** Column definition associated with a `MatSortHeader`. */\ninterface C2MatSortHeaderColumnDef {\n name: string;\n}\n\n@Component({\n selector: '[mat-multi-sort-header]',\n exportAs: 'matMultiSortHeader',\n templateUrl: './mat-multi-sort-header.component.html',\n styleUrls: ['./mat-multi-sort-header.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n animations: [\n matSortAnimations.indicator,\n matSortAnimations.leftPointer,\n matSortAnimations.rightPointer,\n matSortAnimations.arrowOpacity,\n matSortAnimations.arrowPosition,\n matSortAnimations.allowChildren\n ],\n providers: [{provide: MatSort, useExisting: MatMultiSort}],\n})\nexport class MatMultiSortHeaderComponent extends MatSortHeader {\n start = 'asc' as 'asc' | 'desc';\n @Input('mat-multi-sort-header') id!: string;\n\n constructor(public _intl: MatSortHeaderIntl,\n changeDetectorRef: ChangeDetectorRef,\n @Optional() public _sort: MatMultiSort,\n @Inject('C2_SORT_HEADER_COLUMN_DEF') @Optional() public _columnDef: C2MatSortHeaderColumnDef,\n _focusMonitor: FocusMonitor,\n _elementRef: ElementRef<HTMLElement>) {\n super(_intl, changeDetectorRef, _sort, _columnDef, _focusMonitor, _elementRef);\n }\n\n _disableViewStateAnimation = false;\n\n _isSorted() {\n return this._sort.actives.findIndex(activeId => activeId === this.id) > -1;\n }\n\n _sortId() {\n return this._sort.actives.findIndex(activeId => activeId === this.id) + 1;\n }\n\n _renderArrow() {\n return !this._isDisabled() || this._isSorted();\n }\n\n getSortDirection(): 'asc' | 'desc' | '' {\n const i = this._sort.actives.findIndex(activeIds => activeIds === this.id);\n const direction = this._sort.directions[i];\n return this._isSorted() ? direction : (this.start || this._sort.start);\n }\n\n _getArrowViewState() {\n return undefined;\n }\n\n _getArrowDirectionState() {\n return undefined;\n }\n}\n","<div class=\"mat-sort-header-container\"\n [class.mat-sort-header-sorted]=\"_isSorted()\"\n [class.mat-sort-header-position-before]=\"arrowPosition === 'before'\"\n [class.mat-sort-header-ascending]=\"getSortDirection() === 'asc'\"\n [class.mat-sort-header-deascending]=\"getSortDirection() === 'desc'\">\n\n <div class=\"mat-sort-header-content\">\n <ng-content></ng-content>\n </div>\n <!-- Disable animations while a current animation is running -->\n @if (_renderArrow() && _isSorted()) {\n <div class=\"mat-sort-header-arrow\"\n [@arrowOpacity]=\"_getArrowViewState()\"\n [@arrowPosition]=\"_getArrowViewState()\"\n [@allowChildren]=\"_getArrowDirectionState()\"\n (@arrowPosition.start)=\"_disableViewStateAnimation = true\"\n (@arrowPosition.done)=\"_disableViewStateAnimation = false\">\n <svg [class.asc]=\"getSortDirection() === 'asc'\"\n [class.desc]=\"getSortDirection() === 'desc'\"\n viewBox=\"0 -960 960 960\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M440-240v-368L296-464l-56-56 240-240 240 240-56 56-144-144v368h-80Z\"></path>\n </svg>\n </div>\n }\n @if (_isSorted()) {\n <div>{{_sortId()}}</div>\n }\n</div>\n","import {Component, ContentChild, ElementRef, Input, OnInit, TemplateRef, ViewChild, ViewContainerRef} from '@angular/core';\nimport {CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray} from '@angular/cdk/drag-drop';\nimport { TableData } from '../table-data';\nimport {BlockScrollStrategy, Overlay, OverlayRef, ScrollStrategy, ViewportRuler} from '@angular/cdk/overlay';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatChipRow, MatChipSet} from '@angular/material/chips';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {MatTooltip} from '@angular/material/tooltip';\nimport {MatIcon} from '@angular/material/icon';\nimport {FormsModule} from '@angular/forms';\n\n\n@Component({\n selector: 'mat-multi-sort-table-settings',\n templateUrl: './mat-multi-sort-table-settings.component.html',\n styleUrls: ['./mat-multi-sort-table-settings.component.scss'],\n imports: [MatCheckboxModule, CdkDropList, NgTemplateOutlet, MatTooltip, MatIcon, CdkDrag, CdkDragHandle, FormsModule, MatChipSet, MatChipRow]\n})\nexport class MatMultiSortTableSettingsComponent<T> implements OnInit {\n _tableData!: TableData<T>;\n sort: { id: string, name: string, direction: string }[] = [];\n overlayRef!: OverlayRef;\n\n @ViewChild('templateRef', { static: true }) private templateRef!: TemplateRef<HTMLElement>;\n\n @ViewChild('settingsMenu') buttonRef!: ElementRef;\n\n @ContentChild('sortIndicator', { static: false }) sortIndicatorRef!: TemplateRef<{direction:string, columnName: string}>;\n\n @Input()\n sortToolTip: string = '';\n\n @Input()\n closeDialogOnChoice = true;\n\n @Input()\n scrollStrategy: ScrollStrategy = new BlockScrollStrategy(this.viewportRuler, document);\n\n @Input()\n set tableData(tableData: TableData<T>) {\n this._tableData = tableData;\n }\n\n @Input()\n disableSortIndicators = false;\n\n constructor(private overlay: Overlay, private viewContainerRef: ViewContainerRef, private viewportRuler: ViewportRuler) { }\n\n ngOnInit(): void {\n this.sort = this.getSort();\n this._tableData.sortObservable.subscribe(() => this.sort = this.getSort());\n this._tableData.onColumnsChange().subscribe(() => this.sort = this.getSort());\n }\n\n openDialog() {\n const button = this.buttonRef.nativeElement;\n const positionStrategyBuilder = this.overlay.position();\n const positionStrategy = positionStrategyBuilder\n .flexibleConnectedTo(button)\n .withFlexibleDimensions(true)\n .withViewportMargin(10)\n .withGrowAfterOpen(true)\n .withPush(true)\n .withPositions([{\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top'\n }]);\n this.overlayRef = this.overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n panelClass: 'column-overlay',\n positionStrategy,\n scrollStrategy: this.scrollStrategy\n });\n const templatePortal = new TemplatePortal(this.templateRef, this.viewContainerRef);\n this.overlayRef.attach(templatePortal);\n\n this.overlayRef.backdropClick().subscribe(() => {\n\n this.overlayRef.dispose();\n });\n }\n\n drop(event: CdkDragDrop<string[]>) {\n moveItemInArray(this._tableData.columns, event.previousIndex, event.currentIndex);\n this._tableData.displayedColumns = this._tableData.columns.filter(c => c.isActive).map(c => c.id);\n this._tableData.storeTableSettings();\n }\n\n toggle() {\n this._tableData.displayedColumns = this._tableData.columns.filter(c => {\n if (!c.isActive) {\n this.sort = this.sort.filter(s => s.id !== c.id);\n }\n\n return c.isActive;\n }).map(c => c.id);\n this.updateSort();\n if (this.closeDialogOnChoice) {\n this.overlayRef.dispose();\n }\n }\n\n dropSort(event: CdkDragDrop<string[]>) {\n moveItemInArray(this.sort, event.previousIndex, event.currentIndex);\n this.updateSort();\n }\n\n getSort(): { id: string, name: string, direction: string }[] {\n const sorting: { id: string, name: string, direction: string }[] = [];\n for (let i = 0; i < this._tableData.sortParams.length; i++) {\n sorting.push({\n id: this._tableData.sortParams[i],\n name: this._tableData.columns.find(c => c.id === this._tableData.sortParams[i])?.name ?? '',\n direction: this._tableData.sortDirs[i]\n });\n }\n return sorting;\n }\n\n remove(id: string) {\n this.sort = this.sort.filter(v => v.id !== id);\n this.updateSort();\n }\n\n updateDirection(id: string) {\n const i = this.sort.findIndex(v => v.id === id);\n if (this.sort[i].direction === 'asc') {\n this.sort[i].direction = 'desc';\n } else {\n this.sort[i].direction = 'asc';\n }\n this.updateSort();\n }\n\n private updateSort() {\n this._tableData.sortParams = this.sort.map(v => v.id);\n this._tableData.sortDirs = this.sort.map(v => v.direction);\n this._tableData.updateSortHeaders();\n }\n}\n\n\n","<div class=\"table-settings\">\n <div class=\"table-settings-sort\">\n <mat-chip-set class=\"drag-chip-list\" cdkDropList cdkDropListOrientation='horizontal'\n (cdkDropListDropped)=\"dropSort($event)\" [disabled]=\"disableSortIndicators\">\n @for (item of sort; track item) {\n <mat-chip-row class=\"drag-chip\" cdkDrag (removed)=\"remove(item.id)\"\n (click)=\"updateDirection(item.id)\">\n <div class=\"chip-content\">\n @if (sortIndicatorRef) {\n <ng-container\n [ngTemplateOutlet]=\"sortIndicatorRef\"\n [ngTemplateOutletContext]=\"{direction:item.direction, columnName: item.name }\">\n </ng-container>\n } @else {\n <div>\n {{item.name}}:\n <div class=\"sorting\" [matTooltip]=\"sortToolTip\">\n {{item.direction}}\n </div>\n </div>\n }\n <mat-icon class=\"mat-mdc-chip-trailing-icon\" (click)=\"remove(item.id)\">cancel</mat-icon>\n </div>\n </mat-chip-row>\n }\n </mat-chip-set>\n </div>\n <div style=\"flex: 1 1 auto;\"></div>\n <div #settingsMenu (click)=\"openDialog()\" class=\"table-settings-menu\">\n <ng-content #menuRef></ng-content>\n </div>\n</div>\n\n<ng-template #templateRef>\n <div cdkDropList class=\"column-list\" (cdkDropListDropped)=\"drop($event)\">\n @for (column of _tableData.columns; track column) {\n <div class=\"column-item\" cdkDrag>\n <mat-icon cdkDragHandle>drag_indicator</mat-icon>\n <mat-checkbox [(ngModel)]=\"column.isActive\" (change)=\"toggle()\">{{column.name}}</mat-checkbox>\n </div>\n }\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { MatMultiSort } from './mat-multi-sort.directive';\nimport { MatMultiSortHeaderComponent } from './mat-multi-sort-header/mat-multi-sort-header.component';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatCommonModule } from '@angular/material/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { FormsModule } from '@angular/forms';\nimport { MatMultiSortTableSettingsComponent } from './mat-multi-sort-table-settings/mat-multi-sort-table-settings.component';\nimport { MatDialogModule } from '@angular/material/dialog';\n\n\n@NgModule({\n declarations: [],\n exports: [],\n imports: [\n CommonModule,\n MatCommonModule,\n MatDividerModule,\n DragDropModule,\n MatIconModule,\n MatCheckboxModule,\n MatMenuModule,\n MatButtonModule,\n FormsModule,\n MatChipsModule,\n MatTooltipModule,\n MatDialogModule,\n MatMultiSort,\n MatMultiSortHeaderComponent,\n MatMultiSortTableSettingsComponent\n ]\n})\nexport class MatMultiSortModule {\n}\n","export class Settings {\n private _columns: Array<{ id: string, name: string, isActive?: boolean }>;\n private _sortParams: string[];\n private _sortDirs: string[];\n private _key: string;\n\n constructor(key: string) {\n this._key = key;\n this._columns = [];\n this._sortParams = [];\n this._sortDirs = [];\n }\n\n public load() {\n const storedValue = localStorage.getItem(this._key);\n const value = storedValue ? JSON.parse(storedValue) : undefined;\n if (value) {\n this._columns = value._columns || [];\n this._sortDirs = value._sortDirs || [];\n this._sortParams = value._sortParams || [];\n }\n }\n\n public save(): void {\n const settingsString = JSON.stringify(this);\n localStorage.setItem(this._key, settingsString);\n }\n\n public get columns(): Array<{ id: string, name: string, isActive?: boolean }> {\n return this._columns;\n }\n\n public get sortParams(): string[] {\n return this._sortParams;\n }\n\n public get sortDirs(): string[] {\n return this._sortDirs;\n }\n\n public get key(): string {\n return this._key;\n }\n\n public set columns(columns: Array<{ id: string, name: string, isActive?: boolean }>) {\n this._columns = columns;\n }\n\n public set sortParams(sortParams: string[]) {\n this._sortParams = sortParams;\n }\n\n public set sortDirs(sortDirs: string[]) {\n this._sortDirs = sortDirs;\n }\n}\n","import { Subject, BehaviorSubject, delay, filter, tap } from 'rxjs';\nimport { MatMultiSortTableDataSource } from './mat-multi-sort-data-source';\nimport { SortDirection } from '@angular/material/sort';\nimport { Settings } from './utils';\nimport { PageEvent } from '@angular/material/paginator';\n\nexport class TableData<T> {\n private _dataSource!: MatMultiSortTableDataSource<T>;\n private readonly _columns: BehaviorSubject<{ id: string, name: string, isActive?: boolean }[]>;\n private _displayedColumns: string[] = [];\n pageSize = 0;\n pageIndex = 0;\n private _pageSizeOptions: number[];\n private _totalElements = 0\n private _sortParams: string[];\n private _sortDirs: string[];\n private _key = '';\n\n private _nextObservable: Subject<void> = new Subject<void>();\n private _previousObservable: Subject<void> = new Subject<void>();\n private _sizeObservable: Subject<void> = new Subject<void>();\n private _sortObservable: Subject<void> = new Subject<void>();\n private _displayedSortDirs?: string[]\n private _displayedSortParams?: string[]\n\n private _sortHeadersObservable: Subject<string[]> = new Subject<string[]>();\n\n // TODO refactor\n constructor(columns: { id: string, name: string, isActive?: boolean }[],\n options?: {\n defaultSortParams?: string[],\n defaultSortDirs?: string[],\n pageSizeOptions?: number[],\n totalElements?: number,\n localStorageKey?: string\n }) {\n this._columns = new BehaviorSubject(columns.map(c => { if (c.isActive === undefined) { c.isActive = true; } return c; }));\n\n if (options) {\n if (options.pageSizeOptions && options.pageSizeOptions.length < 1) {\n throw Error('Array of pageSizeOptions must contain at least one entry');\n }\n\n if (options.defaultSortParams) {\n options.defaultSortParams.map(s => {\n if (this._columns.value.find(column => column.id === s) === undefined) {\n throw Error(`Provided sort parameter \"${s}\" is not a column.`);\n }\n });\n }\n\n this._sortParams = options.defaultSortParams || [];\n this._sortDirs = options.defaultSortDirs || [];\n\n if (this._sortParams.length !== this._sortDirs.length) {\n this._sortDirs = this._sortParams.map(() => 'asc');\n }\n\n this._totalElements = options.totalElements || 0;\n this._pageSizeOptions = options.pageSizeOptions || [10, 20, 50, 100];\n this._key = options.localStorageKey ?? '';\n } else {\n this._pageSizeOptions = [10, 20, 50, 100];\n this._sortParams = [];\n this._sortDirs = [];\n }\n this.init();\n }\n\n public onSortEvent() {\n this._sortParams = this._dataSource.sort['actives'];\n this._sortDirs = this._dataSource.sort['directions'];\n this._clientSideSort();\n this._sortObservable.next();\n this.storeTableSettings();\n }\n\n public onPaginationEvent($event: PageEvent) {\n const tmpPageSize: number = this.pageSize;\n this.pageSize = $event.pageSize;\n this.pageIndex = $event.pageIndex;\n\n if (tmpPageSize !== this.pageSize) {\n this._sizeObservable.next();\n } else if ($event.previousPageIndex !== undefined && $event.previousPageIndex < $event.pageIndex) {\n this._nextObservable.next();\n } else if ($event.previousPageIndex !== undefined && $event.previousPageIndex > $event.pageIndex) {\n this._previousObservable.next();\n }\n }\n\n public updateSortHeaders(): void {\n // Dirty hack to display default sort column(s)\n const temp = Object.assign([], this._displayedColumns);\n this._sortHeadersObservable.next([]);\n this._sortHeadersObservable.next(temp);\n this._clientSideSort();\n this._sortObservable.next();\n this.storeTableSettings();\n }\n\n // this fixes an infine loop of rerendering\n private subscribeSortHeaders(): void {\n this._sortHeadersObservable.pipe(\n delay(0),\n // ignore when there is no update in the sort (params or dirs)\n filter(() => this._displayedSortDirs !== this.sortDirs && this._displayedSortParams !== this.sortParams),\n tap((column) => {\n // update the displayed sort when it is not the empty array\n if(column.length > 0) {\n this._displayedSortDirs = this.sortDirs;\n this._displayedSortParams = this.sortParams;\n }\n })\n ).subscribe(columns => this._displayedColumns = columns)\n }\n\n private init() {\n this.subscribeSortHeaders();\n if (this._key) {\n const settings = new Settings(this._key);\n settings.load();\n if (this._isLocalStorageSettingsValid(settings)) {\n // load column configuration from localstorage and update the name\n this.columns = settings.columns.map(storedColumn => {\n return {...storedColumn, name: this.columns.find(column => column.id === storedColumn.id)?.name ?? storedColumn.name};\n });\n this._sortDirs = settings.sortDirs;\n this._sortParams = settings.sortParams;\n } else {\n console.warn(\"Stored tableSettings are invalid. Using default\");\n }\n }\n this.displayedColumns = this.columns.filter(c => c.isActive).map(c => c.id);\n }\n\n private _clientSideSort() {\n this._dataSource.orderData();\n }\n\n private _isLocalStorageSettingsValid(settings: Settings): boolean {\n // check if number of columns matching\n if (settings.columns.length !== this._columns.value.length) {\n return false;\n }\n\n // check if columns are the same\n for (const column of settings.columns) {\n const match = this._columns.value.find(c => c.id === column.id);\n if (match === undefined) {\n return false;\n }\n }\n return true;\n }\n\n public storeTableSettings(): void {\n if (this._key) {\n const settings: Settings = new Settings(this._key);\n settings.columns = this._columns.value;\n settings.sortParams = this._sortParams;\n settings.sortDirs = this._sortDirs;\n settings.save();\n }\n }\n\n public set totalElements(totalElements: number) {\n this._totalElements = totalElements;\n }\n\n public get totalElements(): number {\n return this._totalElements;\n }\n\n public set displayedColumns(displayedColumns: string[]) {\n this._displayedColumns = displayedColumns;\n this._columns.next(this._columns.value.map(c => {\n c.isActive = this._displayedColumns.includes(c.id);\n return c;\n }));\n }\n\n public get displayedColumns(): string[] {\n return this._displayedColumns;\n }\n\n public set dataSource(dataSource: MatMultiSortTableDataSource<T>) {\n this._dataSource = dataSource;\n if (this._sortParams.length > 0) {\n this._dataSource.sort.actives = this._sortParams;\n this._dataSource.sort.directions = this._sortDirs.map(v => v as SortDirection);\n this.updateSortHeaders();\n }\n }\n\n public get dataSource(): MatMultiSortTableDataSource<T> {\n return this._dataSource;\n }\n\n public set data(data: T[]) {\n this._dataSource.data = data;\n this._clientSideSort();\n }\n\n public set columns(v: { id: string, name: string, isActive?: boolean }[]) {\n this._columns.next(v.map(c => { if (c.isActive === undefined) { c.isActive = true; } return c; }));\n }\n\n public onColumnsChange(): BehaviorSubject<{ id: string, name: string, isActive?: boolean }[]> {\n return this._columns;\n }\n\n public updateColumnNames(v: { id: string, name: string }[]) {\n const dict: { [key: string]: string } = {};\n v.forEach(c => dict[c.id] = c.name);\n this._columns.next(this._columns.value.map(c => { c.name = dict[c.id] || c.name; return c; }));\n }\n\n public get nextObservable() {\n return this._nextObservable;\n }\n\n public get previousObservable() {\n return this._previousObservable;\n }\n\n public get sizeObservable() {\n return this._sizeObservable;\n }\n\n public get sortObservable() {\n return this._sortObservable;\n }\n\n public get sortParams(): string[] {\n return this._sortParams;\n }\n\n public get sortDirs(): string[] {\n return this._sortDirs;\n }\n\n public get columns(): { id: string, name: string, isActive?: boolean }[] {\n return this._columns.value;\n }\n\n public get pageSizeOptions(): number[] {\n return this._pageSizeOptions;\n }\n\n public set sortParams(v: string[]) {\n this._sortParams = v;\n this._dataSource.sort.actives = this._sortParams;\n }\n\n public set sortDirs(v: string[]) {\n this._sortDirs = v;\n this._dataSource.sort.directions = this._sortDirs.map(elem => elem as SortDirection);\n }\n}\n","import { DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject } from 'rxjs';\nimport { MatMultiSort } from './mat-multi-sort.directive';\n\nexport class MatMultiSortTableDataSource<T> extends DataSource<T> {\n private _data: BehaviorSubject<T[]> = new BehaviorSubject<T[]>([]);\n private clientSideSorting;\n sort: MatMultiSort;\n\n constructor(sort: MatMultiSort, clientSideSorting = false) {\n super();\n this.sort = sort;\n this.clientSideSorting = clientSideSorting;\n }\n\n public set data(data: T[]) {\n this._data.next(data);\n }\n\n public get data(): T[] {\n return this._data.value;\n }\n\n connect(): BehaviorSubject<T[]> {\n return this._data;\n }\n\n disconnect(): void {\n this._data.complete();\n }\n\n orderData() {\n this._data.next(this.sortData(this._data.value, this.sort.actives, this.sort.directions));\n }\n\n sortData(data: T[], actives: string[], directions: string[]): T[] {\n const _data = Object.assign(new Array<T>(), data);\n if (this.clientSideSorting) {\n return _data.sort((i1, i2) => {\n return this._sortData(i1, i2, actives, directions);\n });\n }\n return _data;\n }\n\n _sortData(d1: T, d2: T, params: string[], dirs: string[]): number {\n // @ts-expect-error -- need a typesafe way to express these accessor operations, ts-ignore could be a solution\n // if there's not a suitable solution offered by typescript\n if (d1[params[0]] > d2[params[0]]) {\n return dirs[0] === 'asc' ? 1 : -1;\n // @ts-expect-error --- same\n } else if (d1[params[0]] < d2[params[0]]) {\n return dirs[0] === 'asc' ? -1 : 1;\n } else {\n if (params.length > 1) {\n params = params.slice(1, params.length);\n dirs = dirs.slice(1, dirs.length);\n return this._sortData(d1, d2, params, dirs);\n } else {\n return 0;\n }\n }\n }\n}\n","\n/*\n * Public API Surface of mat-multi-sort\n */\n\nexport * from './lib/mat-multi-sort.directive';\nexport * from './lib/mat-multi-sort-header/mat-multi-sort-header.component';\nexport * from './lib/mat-multi-sort-table-settings/mat-multi-sort-table-settings.component';\nexport * from './lib/mat-multi-sort.module';\nexport * from './lib/table-data';\nexport * from './lib/mat-multi-sort-data-source';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i3"],"mappings":"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"}