ngx-mat-multi-sort
Version:
An extension for the angular material table to support multi-sorting.
1 lines • 52 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, OnInit} from '@angular/core';\nimport { MatSort, MatSortable, SortDirection } from '@angular/material/sort';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[matMultiSort]',\n exportAs: 'matMultiSort'\n})\nexport class MatMultiSort extends MatSort implements OnInit {\n\n start = 'asc' as 'asc' | 'desc';\n private _allDirections: SortDirection[] = ['asc', 'desc'];\n\n directions: SortDirection[] = [];\n actives: string[] = [];\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 getNextSortDirection(sortable: MatSortable): SortDirection {\n const i = this._allDirections.indexOf(this.activeDirection(sortable));\n return this._allDirections[(i + 1) % this._allDirections.length];\n }\n}\n","import {\n Component,\n Input,\n ChangeDetectorRef,\n ViewEncapsulation,\n ElementRef,\n inject,\n InjectionToken\n} from '@angular/core';\nimport {MatSort, 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// eslint-disable-next-line @angular-eslint/component-selector\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 imports: [],\n providers: [{provide: MatSort, useExisting: MatMultiSort}],\n})\nexport class MatMultiSortHeaderComponent extends MatSortHeader {\n _intl: MatSortHeaderIntl;\n _mySort?: MatMultiSort;\n _myColumnDef?: C2MatSortHeaderColumnDef;\n\n start = 'asc' as 'asc' | 'desc';\n @Input('mat-multi-sort-header') id: string = '';\n\n constructor() {\n const _intl = inject(MatSortHeaderIntl);\n const changeDetectorRef = inject(ChangeDetectorRef);\n const _sort = inject(MatMultiSort, { optional: true });\n const _columnDef = inject<C2MatSortHeaderColumnDef>(new InjectionToken('C2_SORT_HEADER_COLUMN_DEF'), { optional: true });\n const _focusMonitor = inject(FocusMonitor);\n const _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n super(_intl, changeDetectorRef, _sort, _columnDef, _focusMonitor, _elementRef);\n\n this._intl = _intl;\n if(_sort) this._mySort = _sort;\n if(_columnDef) this._myColumnDef = _columnDef;\n }\n\n _isSorted() {\n return this._mySort ? this._mySort.actives.findIndex(activeId => activeId === this.id) > -1 : false;\n }\n\n _sortId() {\n return this._mySort ? this._mySort.actives.findIndex(activeId => activeId === this.id) + 1 : false;\n }\n\n _renderArrow() {\n return !this._isDisabled() || this._isSorted();\n }\n\n getSortDirection(): 'asc' | 'desc' | '' {\n const i = this._mySort ? this._mySort.actives.findIndex(activeIds => activeIds === this.id) : 0;\n const direction = this._mySort ? this._mySort.directions[i] : 'asc';\n return this._isSorted() ? direction : (this.start || (this._mySort && this._mySort.start));\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 @if (_renderArrow() && _isSorted()) {\n <div class=\"mat-sort-header-arrow\"\n animate.enter=\"opacity: 1; transform: translateY(0)\"\n animate.leave=\"opacity: 0; transform: translateY(-25%)\">\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, inject } 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 // eslint-disable-next-line @angular-eslint/component-selector\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 private overlay = inject(Overlay);\n private viewContainerRef = inject(ViewContainerRef);\n private viewportRuler = inject(ViewportRuler);\n\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 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(i !== -1) {\n if (this.sort[i].direction === 'asc') {\n this.sort[i].direction = 'desc';\n } else {\n this.sort[i].direction = 'asc';\n }\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.id) {\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 { 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 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 {BehaviorSubject, delay, filter, Subject, 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 (settings.columns.length > 0) {\n // load column configuration from localstorage and update the name\n this.columns = this.columns.map(column => {\n const storedColumn = settings.columns.find(storedCol => storedCol.id === column.id);\n if (!storedColumn) return column;\n return {...storedColumn, name: column.name ?? storedColumn.name};\n });\n\n // apply sort order from settings\n this.columns = this.orderColumnsBySettings(this.columns, settings);\n\n this._sortDirs = [];\n this._sortParams = [];\n for(const [index, storedSortParam] of settings.sortParams.entries()) {\n if(this.columns.some(col => col.id === storedSortParam)) {\n this._sortParams.push(storedSortParam);\n this._sortDirs.push(settings.sortDirs[index]);\n }\n }\n }\n }\n this.displayedColumns = this.columns.filter(c => c.isActive).map(c => c.id);\n }\n\n private orderColumnsBySettings(\n currentColumns: {id: string, name: string, isActive?: boolean}[],\n settings: Settings) {\n const settingsColumnIds = settings.columns.map(column => column.id);\n\n // Get all columns in their settings order, but only if they still exist in the current columns.\n const knownColumnsInSettingsOrder = settings.columns\n .map(storedColumn => currentColumns.find(column => column.id === storedColumn.id))\n .filter((column): column is { id: string; name: string; isActive?: boolean } => column !== undefined);\n\n // Keep new columns that are not in the settings, at their current position.\n const result: { id: string; name: string; isActive?: boolean }[] = [];\n let knownIndex = 0;\n\n for (const currentColumn of currentColumns) {\n if (settingsColumnIds.includes(currentColumn.id)) {\n const nextKnownColumn = knownColumnsInSettingsOrder[knownIndex];\n\n if (nextKnownColumn) {\n result.push(nextKnownColumn);\n knownIndex++;\n }\n } else {\n result.push(currentColumn);\n }\n }\n\n return result;\n }\n\n private _clientSideSort() {\n this._dataSource.orderData();\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":[],"mappings":"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