{"version":3,"file":"pascalhonegger-ng-datatable.mjs","sources":["../../../projects/ng-datatable/src/lib/DataTable.ts","../../../projects/ng-datatable/src/lib/Paginator.ts","../../../projects/ng-datatable/src/lib/BootstrapPaginator.ts","../../../projects/ng-datatable/src/lib/DefaultSorter.ts","../../../projects/ng-datatable/src/lib/DataTableModule.ts","../../../projects/ng-datatable/src/public-api.ts","../../../projects/ng-datatable/src/pascalhonegger-ng-datatable.ts"],"sourcesContent":["import { Directive, input, model, effect, untracked, computed } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nexport type SortOrder = 'asc' | 'desc';\nexport type SortByFunction<T = any> = (data: T) => any;\nexport type SortBy<T = any> = string | SortByFunction<T> | (string | SortByFunction<T>)[];\n\nexport interface SortEvent {\n  sortBy: SortBy;\n  sortOrder: string;\n}\n\nexport interface PageEvent {\n  activePage: number;\n  rowsOnPage: number;\n  dataLength: number;\n}\n\nexport interface DataEvent {\n  length: number;\n}\n\n@Directive({\n  selector: 'table[mfData]',\n  exportAs: 'mfDataTable',\n})\nexport class DataTable<T = any> {\n  /** Array of data to display in table */\n  readonly inputData = input.required<readonly T[], readonly T[] | null | undefined>({\n    alias: 'mfData',\n    transform: (i) => i ?? [],\n  });\n\n  /** Sort by parameter */\n  readonly sortBy = model<SortBy<T>>('', { alias: 'mfSortBy' });\n  /** Sort order parameter (either `asc` or `desc`, default: `asc`) */\n  readonly sortOrder = model<SortOrder>('asc', { alias: 'mfSortOrder' });\n\n  /** Number of rows should be displayed on page (default: `1000`) */\n  readonly rowsOnPage = model(1000, { alias: 'mfRowsOnPage' });\n  /** Page number (default: `1`) */\n  readonly activePage = model(1, { alias: 'mfActivePage' });\n\n  readonly inputDataLength = computed(() => this.inputData().length);\n\n  readonly data = computed<readonly T[]>(() => {\n    const offset = (this.activePage() - 1) * this.rowsOnPage();\n\n    return [...this.inputData()]\n      .sort(this.sorter(this.sortBy(), this.sortOrder()))\n      .slice(offset, offset + this.rowsOnPage());\n  });\n\n  readonly onSortChange = new Subject<SortEvent>();\n  readonly onPageChange = new Subject<PageEvent>();\n\n  constructor() {\n    // Events which were published based on the old API, could probably be deleted at some point\n    effect(() => {\n      const sortBy = this.sortBy();\n      const sortOrder = this.sortOrder();\n      if (sortBy) {\n        this.onSortChange.next({ sortBy: sortBy, sortOrder: sortOrder });\n      }\n    });\n\n    effect(() => {\n      this.setPage(untracked(this.activePage), this.rowsOnPage());\n    });\n    effect(() => {\n      const inputDataLength = this.inputDataLength();\n      const rowsOnPage = this.rowsOnPage();\n      const activePage = untracked(this.activePage);\n      const lastPage = Math.ceil(inputDataLength / rowsOnPage);\n      const newActivePage = (lastPage < activePage ? lastPage : activePage) || 1;\n      this.activePage.set(newActivePage);\n    });\n    effect(() => {\n      this.onPageChange.next({\n        activePage: this.activePage(),\n        rowsOnPage: this.rowsOnPage(),\n        dataLength: this.inputDataLength(),\n      });\n    });\n  }\n\n  getSort(): SortEvent {\n    return { sortBy: this.sortBy(), sortOrder: this.sortOrder() };\n  }\n\n  setSort(sortBy: SortBy<T>, sortOrder: SortOrder): void {\n    this.sortBy.set(sortBy);\n    this.sortOrder.set(['asc', 'desc'].includes(sortOrder) ? sortOrder : 'asc');\n  }\n\n  getPage(): PageEvent {\n    return {\n      activePage: this.activePage(),\n      rowsOnPage: this.rowsOnPage(),\n      dataLength: this.inputDataLength(),\n    };\n  }\n\n  setPage(activePage: number, rowsOnPage: number): void {\n    if (this.rowsOnPage() !== rowsOnPage || this.activePage() !== activePage) {\n      this.rowsOnPage.set(rowsOnPage);\n      this.activePage.set(\n        this.activePage() !== activePage\n          ? activePage\n          : this.calculateNewActivePage(this.rowsOnPage(), rowsOnPage),\n      );\n    }\n  }\n\n  private calculateNewActivePage(previousRowsOnPage: number, currentRowsOnPage: number): number {\n    const firstRowOnPage = (this.activePage() - 1) * previousRowsOnPage + 1;\n    const newActivePage = Math.ceil(firstRowOnPage / currentRowsOnPage);\n    return newActivePage;\n  }\n\n  private caseInsensitiveIteratee(sortBy: string | SortByFunction) {\n    return (row: any): any => {\n      let value = row;\n      if (typeof sortBy === 'string' || sortBy instanceof String) {\n        for (const sortByProperty of sortBy.split('.')) {\n          if (value) {\n            value = value[sortByProperty];\n          }\n        }\n      } else if (typeof sortBy === 'function') {\n        value = sortBy(value);\n      }\n\n      if ((value && typeof value === 'string') || value instanceof String) {\n        return value.toLowerCase();\n      }\n\n      return value;\n    };\n  }\n\n  private compare(left: any, right: any): number {\n    if (left === right) {\n      return 0;\n    }\n    if (left == null && right != null) {\n      return -1;\n    }\n    if (right == null) {\n      return 1;\n    }\n    return left > right ? 1 : -1;\n  }\n\n  private sorter<T>(sortBy: SortBy<T>, sortOrder: SortOrder): (left: T, right: T) => number {\n    const order = sortOrder === 'desc' ? -1 : 1;\n    if (Array.isArray(sortBy)) {\n      const iteratees = sortBy.map((entry) => this.caseInsensitiveIteratee(entry));\n      return (left, right) => {\n        for (const iteratee of iteratees) {\n          const comparison = this.compare(iteratee(left), iteratee(right)) * order;\n          if (comparison !== 0) {\n            return comparison;\n          }\n        }\n        return 0;\n      };\n    } else {\n      const iteratee = this.caseInsensitiveIteratee(sortBy);\n      return (left, right) => this.compare(iteratee(left), iteratee(right)) * order;\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  computed,\n  effect,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\nimport { DataTable, PageEvent } from './DataTable';\nimport { Subscription } from 'rxjs';\n\n@Component({\n  selector: 'mfPaginator',\n  template: `<ng-content />`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Paginator {\n  private injectMfTable = inject(DataTable, { optional: true })!;\n\n  /** explicitly specify reference data table, by default the parent `mfData` is injected */\n  readonly inputMfTable = input<DataTable>(undefined, { alias: 'mfTable' });\n  private readonly mfTable = computed<DataTable>(() => this.inputMfTable() ?? this.injectMfTable);\n\n  readonly activePage = signal<number>(0);\n  readonly rowsOnPage = signal<number>(0);\n  readonly dataLength = signal<number>(0);\n  readonly lastPage = computed<number>(() => {\n    const rowsOnPage = this.rowsOnPage();\n    const dataLength = this.dataLength();\n    return rowsOnPage === 0 ? 0 : Math.ceil(dataLength / rowsOnPage);\n  });\n\n  constructor() {\n    let currentSubscription: Subscription | undefined = undefined;\n    effect(() => {\n      const currentTable = this.mfTable();\n      this.onPageChangeSubscriber(currentTable.getPage());\n      currentSubscription?.unsubscribe();\n      currentSubscription = currentTable.onPageChange.subscribe(this.onPageChangeSubscriber);\n    });\n    inject(DestroyRef).onDestroy(() => {\n      currentSubscription?.unsubscribe();\n    });\n  }\n\n  setPage(pageNumber: number): void {\n    this.mfTable().setPage(pageNumber, this.rowsOnPage());\n  }\n\n  setRowsOnPage(rowsOnPage: number): void {\n    this.mfTable().setPage(this.activePage(), rowsOnPage);\n  }\n\n  private onPageChangeSubscriber = (event: PageEvent) => {\n    this.activePage.set(event.activePage);\n    this.rowsOnPage.set(event.rowsOnPage);\n    this.dataLength.set(event.dataLength);\n  };\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { DataTable } from './DataTable';\nimport { Paginator } from './Paginator';\n\n@Component({\n  selector: 'mfBootstrapPaginator',\n  template: `\n    <mfPaginator #p [mfTable]=\"mfTable()\">\n      @if (p.dataLength() > p.rowsOnPage()) {\n        <ul class=\"pagination float-start\">\n          <li class=\"page-item\" [class.disabled]=\"p.activePage() <= 1\" (click)=\"p.setPage(1)\">\n            <a class=\"page-link\" aria-label=\"Previous\"><span aria-hidden=\"true\">&laquo;</span></a>\n          </li>\n          @if (p.activePage() > 4 && p.activePage() + 1 > p.lastPage()) {\n            <li class=\"page-item\" (click)=\"p.setPage(p.activePage() - 4)\">\n              <a class=\"page-link\">{{ p.activePage() - 4 }}</a>\n            </li>\n          }\n          @if (p.activePage() > 3 && p.activePage() + 2 > p.lastPage()) {\n            <li class=\"page-item\" (click)=\"p.setPage(p.activePage() - 3)\">\n              <a class=\"page-link\">{{ p.activePage() - 3 }}</a>\n            </li>\n          }\n          @if (p.activePage() > 2) {\n            <li class=\"page-item\" (click)=\"p.setPage(p.activePage() - 2)\">\n              <a class=\"page-link\">{{ p.activePage() - 2 }}</a>\n            </li>\n          }\n          @if (p.activePage() > 1) {\n            <li class=\"page-item\" (click)=\"p.setPage(p.activePage() - 1)\">\n              <a class=\"page-link\">{{ p.activePage() - 1 }}</a>\n            </li>\n          }\n          <li class=\"page-item active\">\n            <a class=\"page-link\">{{ p.activePage() }}</a>\n          </li>\n          @if (p.activePage() + 1 <= p.lastPage()) {\n            <li class=\"page-item\" (click)=\"p.setPage(p.activePage() + 1)\">\n              <a class=\"page-link\">{{ p.activePage() + 1 }}</a>\n            </li>\n          }\n          @if (p.activePage() + 2 <= p.lastPage()) {\n            <li class=\"page-item\" (click)=\"p.setPage(p.activePage() + 2)\">\n              <a class=\"page-link\">{{ p.activePage() + 2 }}</a>\n            </li>\n          }\n          @if (p.activePage() + 3 <= p.lastPage() && p.activePage() < 3) {\n            <li class=\"page-item\" (click)=\"p.setPage(p.activePage() + 3)\">\n              <a class=\"page-link\">{{ p.activePage() + 3 }}</a>\n            </li>\n          }\n          @if (p.activePage() + 4 <= p.lastPage() && p.activePage() < 2) {\n            <li class=\"page-item\" (click)=\"p.setPage(p.activePage() + 4)\">\n              <a class=\"page-link\">{{ p.activePage() + 4 }}</a>\n            </li>\n          }\n          <li\n            class=\"page-item\"\n            [class.disabled]=\"p.activePage() >= p.lastPage()\"\n            (click)=\"p.setPage(p.lastPage())\"\n          >\n            <a class=\"page-link\" aria-label=\"Next\"><span aria-hidden=\"true\">&raquo;</span></a>\n          </li>\n        </ul>\n      }\n      @if (p.dataLength() > minRowsOnPage()) {\n        <ul class=\"pagination float-end\">\n          @for (rows of rowsOnPageSet(); track rows) {\n            <li\n              class=\"page-item\"\n              [class.active]=\"p.rowsOnPage() === rows\"\n              (click)=\"p.setRowsOnPage(rows)\"\n            >\n              <a class=\"page-link\">{{ rows }}</a>\n            </li>\n          }\n        </ul>\n      }\n    </mfPaginator>\n  `,\n  styles: ['.page-link { cursor: pointer; }'],\n  imports: [Paginator],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BootstrapPaginator {\n  /** Specify values for buttons to change number of diplayed rows, e.g. [5, 10, 15] */\n  rowsOnPageSet = input.required<readonly number[]>();\n  /** explicitly specify reference data table, by default the parent `mfData` is injected */\n  mfTable = input<DataTable>();\n\n  minRowsOnPage = computed<number>(() =>\n    this.rowsOnPageSet().reduce(\n      (previous, current) => (current < previous ? current : previous),\n      0,\n    ),\n  );\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { DataTable, SortBy } from './DataTable';\n\n@Component({\n  selector: 'mfDefaultSorter',\n  template: ` <a\n    (click)=\"sort()\"\n    (keydown.enter)=\"sort()\"\n    (keydown.space)=\"sort()\"\n    class=\"text-nowrap text-decoration-none\"\n    tabindex=\"0\"\n  >\n    <ng-content />\n    @if (isSortedByMeAsc()) {\n      <span aria-hidden=\"true\" aria-label=\"asc\">▲</span>\n    } @else if (isSortedByMeDesc()) {\n      <span aria-hidden=\"true\" aria-label=\"desc\">▼</span>\n    }\n  </a>`,\n  styles: ['a { cursor: pointer; }'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DefaultSorter<T = any> {\n  private readonly mfTable = inject(DataTable<T>);\n\n  /** Specify how to sort data (argument for lodash function [\\_.sortBy ](https://lodash.com/docs#sortBy)) */\n  readonly sortBy = input.required<SortBy<T>>({ alias: 'by' });\n\n  readonly isSortedByMeAsc = computed<boolean>(() => {\n    const tableSortBy = this.mfTable.sortBy();\n    const tableSortOrder = this.mfTable.sortOrder();\n    const mySort = this.sortBy();\n    return tableSortBy == mySort && tableSortOrder === 'asc';\n  });\n  readonly isSortedByMeDesc = computed<boolean>(() => {\n    const tableSortBy = this.mfTable.sortBy();\n    const tableSortOrder = this.mfTable.sortOrder();\n    const mySort = this.sortBy();\n    return tableSortBy == mySort && tableSortOrder === 'desc';\n  });\n\n  sort() {\n    if (this.isSortedByMeAsc()) {\n      this.mfTable.setSort(this.sortBy(), 'desc');\n    } else {\n      this.mfTable.setSort(this.sortBy(), 'asc');\n    }\n    return false;\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { DataTable } from './DataTable';\nimport { DefaultSorter } from './DefaultSorter';\nimport { Paginator } from './Paginator';\nimport { BootstrapPaginator } from './BootstrapPaginator';\n\n/**\n * Optional module which exports all components\n * @deprecated Should be replaced with component imports (DataTable, DefaultSorter, Paginator, BootstrapPaginator)\n */\n@NgModule({\n  imports: [DataTable, DefaultSorter, Paginator, BootstrapPaginator],\n  exports: [DataTable, DefaultSorter, Paginator, BootstrapPaginator],\n})\nexport class DataTableModule {}\n","/*\n * Public API Surface of ng-datatable\n */\n\nexport * from './lib/BootstrapPaginator';\nexport * from './lib/Paginator';\nexport * from './lib/DefaultSorter';\nexport * from './lib/DataTable';\nexport * from './lib/DataTableModule';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}