UNPKG

ngx-mat-multi-sort-fork

Version:

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

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