{"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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"}