{"version":3,"file":"catrx-ui-datatable.mjs","sources":["../../../../projects/catrx/ui/datatable/src/datatable-sort.pipe.ts","../../../../projects/catrx/ui/datatable/src/datatable.component.ts","../../../../projects/catrx/ui/datatable/src/datatable.component.html","../../../../projects/catrx/ui/datatable/src/datatable.factory.ts","../../../../projects/catrx/ui/datatable/src/cat-datatable.service.ts","../../../../projects/catrx/ui/datatable/src/cat-datatable.module.ts","../../../../projects/catrx/ui/datatable/catrx-ui-datatable.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'orderBy', pure: false })\nexport class DatatableSortPipe implements PipeTransform {\n  transform(array: Array<any>, args: string, reverse: boolean): Array<any> {\n    array.sort((a: any, b: any) => {\n      const aDeep = this.goDeep(a, args);\n      const bDeep = this.goDeep(b, args);\n      if ((aDeep < bDeep && !reverse) || (aDeep > bDeep && reverse)) {\n        return -1;\n      } else if ((aDeep > bDeep && !reverse) || (aDeep < bDeep && reverse)) {\n        return 1;\n      } else {\n        return 0;\n      }\n    });\n    return array;\n  }\n\n  private goDeep(obj: any, desc: string) {\n    if (desc) {\n      const arr = desc.split('.');\n      while (arr.length && (obj = obj[arr.shift() ?? 0]));\n    }\n    return obj;\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  Input,\n  OnDestroy,\n  OnInit,\n  ViewChild,\n  signal,\n} from '@angular/core';\nimport { klArray } from '@koalarx/utils/operators/array';\nimport { klDelay } from '@koalarx/utils/operators/delay';\nimport { clone } from '@koalarx/utils/operators/object';\nimport { Ng2SearchPipe } from 'ng2-search-filter';\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\nimport { Subject } from 'rxjs/internal/Subject';\nimport { first } from 'rxjs/internal/operators/first';\nimport { takeUntil } from 'rxjs/internal/operators/takeUntil';\nimport {\n  CatDatatableSelection,\n  DatatableActionButtonConfig,\n  DatatableConfig,\n  DatatableFilterResponse,\n} from './cat-datatable.interface';\n\n@Component({\n  selector: 'cat-datatable',\n  templateUrl: 'datatable.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DatatableComponent implements OnInit, OnDestroy {\n  @Input({ required: true }) config: DatatableConfig<any>;\n\n  @ViewChild('list', { static: false }) private elList: ElementRef<HTMLDivElement>;\n\n  public selection$ = new BehaviorSubject<CatDatatableSelection<any>>({\n    data: [],\n    lastSelected: null,\n    selected: [],\n    emit: false,\n    checkAll: false,\n  });\n  public datatableList$ = new BehaviorSubject<any[]>([]);\n  public datatableBackupList$ = new BehaviorSubject<any[]>([]);\n  public loadedList$ = new BehaviorSubject<boolean>(false);\n  public destroySubscriptions$ = new Subject();\n  public scrollLoadingData = false;\n\n  public currentPage = 1;\n  public totalItemsPage = 0;\n  public totalItemsBd = 0;\n  public columnIndexSort = -1;\n  public orderBy = '';\n  public reverse = false;\n\n  private textFilter?: string;\n  private objectFilter?: any;\n\n  ngOnDestroy() {\n    this.destroySubscriptions$.next(true);\n  }\n\n  ngOnInit(): void {\n    if (this.config.typeDataList === 'onScroll') {\n      this.config.hidePaginator = true;\n    }\n\n    if (this.config.defaultColumSortIndex > -1) {\n      this.columnIndexSort = this.config.defaultColumSortIndex;\n      this.orderBy = this.getItemLine(this.config.defaultColumSortIndex)?.sortColumn ?? ''\n    }\n\n    if (this.config.defaultColumOrder) {\n      this.reverse = this.config.defaultColumOrder === 'desc';\n    }\n\n    this.watchFilter();\n    this.observeAnEmitSelection();\n    this.observeListScrollToPaginate();\n\n    if (this.config?.reloadList) {\n      this.config?.reloadList\n        .pipe(takeUntil(this.destroySubscriptions$))\n        .subscribe((reloadlist) => {\n          if (reloadlist.reload) {\n            this.loadData(reloadlist.preservePagination, true);\n          }\n        });\n    }\n  }\n\n  public getFooterColspan() {\n    let colspan = 1;\n    if (this.config?.hasSelection) {\n      colspan++;\n    }\n    if (this.config?.hasAction) {\n      colspan++;\n    }\n\n    return colspan;\n  }\n\n  //#region [Load Data Control]\n  private watchFilter() {\n    if (this.config) {\n      (this.config.filter$ ?? new BehaviorSubject(null))\n        .pipe(takeUntil(this.destroySubscriptions$))\n        .subscribe((filter) => {\n          if (typeof filter === 'string' && this.config?.typeDataList === 'all') {\n            this.datatableList$.next(\n              Ng2SearchPipe.filter(this.datatableBackupList$.getValue(), filter)\n            );\n          } else if (typeof filter === 'object') {\n            this.objectFilter = filter;\n\n            if (this.config?.typeDataList === 'all') {\n              let filteredList = this.datatableBackupList$.getValue();\n              filteredList = filteredList.filter((itemLine) => {\n                const dataFiltered = [];\n                Object.keys(filter).forEach((indexNameFilter) => {\n                  if (filter[indexNameFilter] && indexNameFilter !== 'filter') {\n                    if (\n                      typeof itemLine[indexNameFilter] === 'string' &&\n                      typeof filter[indexNameFilter] === 'string'\n                    ) {\n                      dataFiltered.push(\n                        (itemLine[indexNameFilter] as string)\n                          .toLowerCase()\n                          .includes(\n                            (filter[indexNameFilter] as string).toLowerCase()\n                          )\n                      );\n                    } else {\n                      dataFiltered.push(\n                        JSON.stringify(itemLine[indexNameFilter]) ===\n                        JSON.stringify(filter[indexNameFilter]) ||\n                        (itemLine[indexNameFilter]?.['id'] ?? 0) ===\n                        (filter[indexNameFilter]?.['id'] ?? -1) ||\n                        (itemLine[indexNameFilter]?.['codigo'] ?? 0) ===\n                        (filter[indexNameFilter]?.['codigo'] ?? -1)\n                      );\n                    }\n                  }\n                });\n\n                return dataFiltered.filter((d) => d === false).length === 0;\n              });\n              this.datatableList$.next(filteredList);\n            }\n          }\n\n          switch (this.config?.typeDataList) {\n            case 'all':\n              if (this.datatableBackupList$.getValue().length === 0)\n                this.loadData();\n              break;\n            case 'onDemand':\n            case 'onScroll':\n              this.loadData(false, true);\n              break;\n          }\n        });\n    }\n  }\n\n  private loadData(preserveCurrentPage = false, reloadList = false) {\n    if (this.config?.service) {\n      const onScroll = this.config?.typeDataList === 'onScroll' && !reloadList;\n\n      this.scrollLoadingData = true;\n      if (!onScroll) {\n        if (!preserveCurrentPage) this.currentPage = 1;\n        this.clearSelection();\n        this.loadedList$.next(false);\n      }\n\n      this.config\n        .service(this.getFilter())\n        .pipe(first())\n        .subscribe({\n          next: (response) => {\n            const listData = (onScroll\n              ? [\n                ...this.datatableBackupList$.getValue(),\n                ...response.items\n              ]\n              : response.items);\n\n            this.datatableList$.next(listData);\n            this.datatableBackupList$.next(clone(listData));\n            this.totalItemsBd = response.count;\n            this.totalItemsPage = klArray(listData)\n              .split(this.config?.limitItemPerPage ?? 30)\n              .getValue()[0]?.length;\n\n            if (this.config?.getDatasource) this.config.getDatasource(listData);\n\n            if (!onScroll || !this.loadedList$.getValue()) {\n              this.loadedList$.next(true);\n            }\n\n            this.scrollLoadingData = false;\n          },\n          error: () => {\n            if (!onScroll || !this.loadedList$.getValue()) {\n              this.loadedList$.next(true);\n            }\n\n            this.scrollLoadingData = false;\n          },\n        });\n    }\n  }\n\n  private getFilter() {\n    let filter = {\n      page: this.currentPage,\n      limit: this.config.limitItemPerPage,\n      orderBy: this.orderBy,\n      direction: this.reverse ? 'desc' : 'asc',\n    } as DatatableFilterResponse;\n\n    if (this.textFilter) {\n      filter['filter'] = this.textFilter;\n    } else if (this.objectFilter) {\n      filter = {\n        ...filter,\n        ...this.objectFilter,\n      };\n    }\n\n    return filter;\n  }\n\n  private async observeListScrollToPaginate() {\n    if (this.config.typeDataList === 'onScroll') {\n      const elList = await this.getElementList();\n\n      elList.onscroll = () => {\n        const scrollSize = elList.scrollHeight - elList.clientHeight;\n        const scrollPosition = elList.scrollTop;\n        const percentScrolled = (scrollPosition * 100) / scrollSize;\n        const endOfList = this.datatableBackupList$.getValue().length === this.totalItemsBd;\n        const paginate = percentScrolled >= 70 && !endOfList;\n\n        if (paginate && !this.scrollLoadingData) {\n          this.scrollLoadingData = true;\n          this.loadData();\n        }\n      };\n    }\n  }\n\n  private async getElementList() {\n    while (!this.elList) {\n      await klDelay(50);\n    }\n\n    return this.elList.nativeElement;\n  }\n\n  //#endregion\n\n  //#region [Order List Control]\n  public isSortable(columnIndex: number) {\n    return !!this.getItemLine(columnIndex)?.sortColumn;\n  }\n\n  public sort(columnIndex: number, reverse?: boolean) {\n    if (this.isSortable(columnIndex)) {\n      this.checkAll(false);\n      this.orderBy = this.getItemLine(columnIndex)?.sortColumn ?? '';\n\n      if (this.orderBy) {\n        this.reverse = reverse\n          ? reverse\n          : this.columnIndexSort !== columnIndex\n            ? false\n            : !this.reverse;\n        this.columnIndexSort = columnIndex;\n      }\n\n      if (this.config.typeDataList === 'onDemand') {\n        this.loadData(true);\n      }\n    }\n  }\n\n  //#endregion\n\n  //#region [Selection List Control]\n  public isChecked(index: number) {\n    const selection = this.selection$.getValue();\n    return selection\n      ? !!selection.selected.find((selectItem) => selectItem.index === index)\n      : false;\n  }\n\n  public toggleItem(\n    index: number,\n    item: any,\n    forceCheck = false,\n    emit = true,\n    checkAll = false\n  ) {\n    if (\n      (this.config?.disableSelectionItem &&\n        !(this.config?.disableSelectionItem(item) ?? false)) ||\n      !this.config?.disableSelectionItem\n    ) {\n      const selection = this.selection$.getValue();\n      const itemSelection = { index, item };\n      selection.emit = emit;\n      selection.checkAll = checkAll;\n      selection.lastSelected = itemSelection;\n\n      if (this.isChecked(index) && !forceCheck) {\n        selection.selected = klArray(selection.selected)\n          .map((selectItem) => {\n            if (selectItem.index === index) {\n              return null;\n            }\n            return selectItem;\n          })\n          .clearEmptyValues()\n          .getValue();\n      } else if (!this.isChecked(index)) {\n        selection.selected.push(itemSelection);\n      }\n\n      this.selection$.next(selection);\n    }\n  }\n\n  public checkAll(checked: boolean) {\n    const selection = this.selection$.getValue();\n\n    if (checked) {\n      this.getItemsOnCurrentPage().forEach((itemList, index) =>\n        this.toggleItem(index, itemList, checked, false)\n      );\n    } else {\n      selection.selected = [];\n    }\n\n    selection.emit = true;\n    selection.checkAll = checked;\n    this.selection$.next(selection);\n  }\n\n  public isAllChecked() {\n    const selection = this.selection$.getValue();\n    return selection\n      ? selection?.selected?.length === this.getItemsOnCurrentPage()?.length\n      : false;\n  }\n\n  public isIndeterminateSelection() {\n    const selection = this.selection$.getValue();\n    return !this.isAllChecked() && selection.selected.length > 0;\n  }\n\n  private getItemsOnCurrentPage() {\n    let page = this.currentPage - 1;\n    if (page < 0) page = 0;\n\n    return klArray(this.datatableList$.getValue())\n      .split(this.config?.limitItemPerPage ?? 30)\n      .getValue()[page];\n  }\n\n  private observeAnEmitSelection() {\n    if (this.config?.getSelection && this.config?.hasSelection) {\n      this.selection$\n        .pipe(takeUntil(this.destroySubscriptions$))\n        .subscribe((selection) => {\n          selection.data = this.datatableList$.getValue();\n          if (selection.emit && this.config?.getSelection) {\n            this.config.getSelection(selection);\n          }\n        });\n    }\n  }\n\n  private clearSelection() {\n    this.selection$.next({\n      data: [],\n      lastSelected: null,\n      selected: [],\n      emit: false,\n      checkAll: false,\n    });\n  }\n\n  //#endregion\n\n  //#region [List Control]\n  public getActionButtons(rowData: any): DatatableActionButtonConfig<any>[] {\n    return (\n      this.config?.actionButtons?.filter(\n        (btn) =>\n          (btn.havePermission === undefined || btn.havePermission) &&\n          (btn.showBtn ? btn.showBtn(rowData) : true)\n      ) ?? []\n    );\n  }\n\n  public getItemLine(columnIndex: number) {\n    return this.config?.data?.find((item) => item.columnIndex === columnIndex);\n  }\n\n  public getItemLineComponent(columnIndex: number, data: any) {\n    const itemLine = this.getItemLine(columnIndex);\n\n    if (itemLine && itemLine.component) {\n      return itemLine.component(data);\n    }\n\n    return null;\n  }\n\n  public getItemLineText(columnIndex: number, rowData: any) {\n    const itemLine = this.getItemLine(columnIndex);\n\n    if (itemLine && itemLine.text) {\n      return itemLine.text(rowData);\n    }\n\n    return null;\n  }\n\n  public getPaginateProps() {\n    const totalItems = this.totalItemsBd && this.config.typeDataList === 'onDemand'\n      ? this.totalItemsBd\n      : this.datatableList$.getValue()?.length;\n    const startItemOffset = this.config.limitItemPerPage * (this.currentPage - 1);\n    const endItemOffset = this.config.limitItemPerPage * this.currentPage;\n\n    return {\n      itemsPerPage: this.config.typeDataList === 'onScroll'\n        ? 0\n        : this.config?.limitItemPerPage ?? 30,\n      currentPage: this.currentPage ?? 0,\n      totalItems,\n      startItemOffset: startItemOffset > 0\n        ? startItemOffset\n        : 1,\n      endItemOffset: endItemOffset > totalItems\n        ? totalItems\n        : endItemOffset\n    };\n  }\n\n  public canShowColumn(index: number) {\n    const itemLineConfig = this.getItemLine(index);\n    if (itemLineConfig.showColumn) {\n      return itemLineConfig.showColumn();\n    }\n\n    return true;\n  }\n\n  //#endregion\n\n  //#region [Pagination Control]\n  public handlePageSizeChange() {\n    this.checkAll(false);\n    this.handlePageChange(1);\n  }\n\n  public handlePageChange(page: number) {\n    this.currentPage = page;\n    if (this.config?.typeDataList === 'onDemand') {\n      this.datatableList$.next([]);\n      this.loadData(true);\n    } else {\n      this.checkAll(false);\n    }\n  }\n\n  //#endregion\n}\n","<nav class=\"cat-datatable-menu\" *ngIf=\"config.hideMenuAndPaginator !== true\">\n  <ng-container *ngIf=\"(selection$ | async)?.selected?.length > 0\">\n    <ng-content select=\"nav[list-checked-actions]\"></ng-content>\n  </ng-container>\n  <ng-content select=\"nav[list-actions]\"></ng-content>\n\n  <div class=\"space\"></div>\n\n  <div *ngIf=\"config.hidePaginator !== true\" class=\"page-size-content mr-20\">\n    <label>Itens por página: </label>\n    <select class=\"form-select form-select-sm\" [(ngModel)]=\"config.limitItemPerPage\" (change)=\"handlePageSizeChange()\">\n      <option selected [ngValue]=\"10\">10</option>\n      <option [ngValue]=\"30\">30</option>\n      <option [ngValue]=\"50\">50</option>\n      <option [ngValue]=\"100\">100</option>\n    </select>\n  </div>\n\n  <div *ngIf=\"config.hidePaginator !== true\" class=\"pagination-content\">\n    <span class=\"page-info\">\n      {{getPaginateProps().startItemOffset}}\n      -\n      {{getPaginateProps().endItemOffset}}\n      de\n      {{ getPaginateProps().totalItems }}\n    </span>\n    <pagination-controls class=\"my-pagination\" previousLabel=\"Anterior\" nextLabel=\"Próximo\"\n      (pageChange)=\"handlePageChange($event)\" />\n  </div>\n</nav>\n<div #list class=\"table-responsive table-container\" [ngClass]=\"{\n  'list-without-action': !config.hasAction && config.hasSelection,\n  'list-without-selection': config.hasAction && !config.hasSelection,\n  'list-without-selection-and-action': !config.hasAction && !config.hasSelection\n}\">\n  <table class=\"table table-hover\">\n    <thead>\n      <tr>\n        <th scope=\"col\" class=\"selection\" *ngIf=\"config?.hasSelection\">\n          <div class=\"checkbox\">\n            <input #checkboxAll [checked]=\"isAllChecked()\" (change)=\"checkAll(checkboxAll.checked)\"\n              [indeterminate]=\"isIndeterminateSelection()\" class=\"form-check-input\" type=\"checkbox\" />\n          </div>\n        </th>\n        <th scope=\"col\" class=\"option\" *ngIf=\"config?.hasAction\" [style.width]=\"\n            42 * (config?.actionButtons?.length ?? 1) + 'px!important'\n          \"></th>\n        <ng-container *ngFor=\"let column of config?.columns; let columnIndex = index\">\n          <th *ngIf=\"canShowColumn(columnIndex)\" scope=\"col\" (click)=\"sort(columnIndex)\" [ngClass]=\"{\n              activeSelection: columnIndex >= 0,\n              sortable: isSortable(columnIndex),\n              sorted: columnIndex === columnIndexSort\n            }\">\n            <div class=\"content-header\">\n              {{ column }}\n              <i *ngIf=\"columnIndex !== columnIndexSort && isSortable(columnIndex)\" class=\"fa-solid fa-sort\"></i>\n              <i *ngIf=\"columnIndex === columnIndexSort && !reverse\" class=\"fa-solid fa-arrow-up-a-z\"></i>\n              <i *ngIf=\"columnIndex === columnIndexSort && reverse\" class=\"fa-solid fa-arrow-down-z-a\"></i>\n            </div>\n          </th>\n        </ng-container>\n      </tr>\n    </thead>\n    <ng-container>\n      <tbody>\n        <tr *ngIf=\"(loadedList$ | async) === false\" class=\"fake-line\">\n          <td colspan=\"50\">\n            <ng-container *ngIf=\"config?.customLoaderComponent; else defaultLoader\">\n              <cat-dynamic-component [component]=\"config?.customLoaderComponent\" />\n            </ng-container>\n\n            <ng-template #defaultLoader>\n              <div class=\"datatable-loader\">\n                <cat-loader></cat-loader>\n              </div>\n            </ng-template>\n          </td>\n        </tr>\n\n        <ng-container *ngIf=\"datatableList$ | async as datatableList\">\n          <ng-container *ngIf=\"datatableList.length === 0 && loadedList$ | async\">\n            <tr class=\"fake-line\">\n              <td colspan=\"50\">\n                <ng-container *ngIf=\"config?.customEmptyComponent; else defaultEmptyList\">\n                  <cat-dynamic-component [component]=\"config?.customEmptyComponent\" />\n                </ng-container>\n\n                <ng-template #defaultEmptyList>\n                  <div *ngIf=\"loadedList$ | async\" class=\"empty-list-container\">\n                    <i class=\"fa-solid fa-inbox\"></i>\n                    Nenhum registro encontrado\n                  </div>\n                </ng-template>\n              </td>\n            </tr>\n          </ng-container>\n\n          <ng-container *ngIf=\"datatableList.length > 0 && loadedList$ | async\">\n            <tr *ngFor=\"\n                let rowData of datatableList\n                  | orderBy : orderBy : reverse\n                  | paginate : getPaginateProps();\n                let i = index\">\n              <td class=\"selection\" *ngIf=\"config?.hasSelection\">\n                <div class=\"checkbox\">\n                  <input *ngIf=\"\n                      (config?.disableSelectionItem &&\n                        !(config?.disableSelectionItem(rowData) ?? false)) ||\n                      !config?.disableSelectionItem\" class=\"form-check-input\" [checked]=\"isChecked(i)\"\n                    (change)=\"toggleItem(i, rowData)\" type=\"checkbox\" />\n                </div>\n              </td>\n              <td class=\"option\" *ngIf=\"config?.hasAction\" [style.width]=\"\n                  42 * (config?.actionButtons?.length ?? 1) + 'px!important'\">\n                <div class=\"options-content\">\n                  <cat-icon-button *ngFor=\"let actionButton of getActionButtons(rowData)\" [icon]=\"actionButton.iconName\"\n                    [color]=\"actionButton.iconColor\" [tooltip]=\"actionButton.tooltip\" (click)=\"\n                      actionButton.fnAction\n                        ? actionButton.fnAction(rowData)\n                        : null\n                    \" />\n                </div>\n              </td>\n\n              <ng-container *ngFor=\"let column of config?.columns; let columnIndex = index\">\n                <td *ngIf=\"canShowColumn(columnIndex)\" [ngClass]=\"{ sorted: columnIndex === columnIndexSort }\"\n                  [style.width]=\"getItemLine(columnIndex).customWidthColumn\">\n                  <cat-dynamic-component *ngIf=\"\n                      getItemLineComponent(\n                        columnIndex,\n                        rowData\n                      ) as dynamicComponent;\n                      else tableCellDateText\" [component]=\"dynamicComponent\" />\n                  <ng-template #tableCellDateText>\n                    {{ this.getItemLineText(columnIndex, rowData) }}\n                  </ng-template>\n                </td>\n              </ng-container>\n            </tr>\n          </ng-container>\n        </ng-container>\n      </tbody>\n    </ng-container>\n  </table>\n\n  <div *ngIf=\"scrollLoadingData && (loadedList$ | async) === true\" class=\"datatable-scroll-loader\">\n    <cat-loader></cat-loader>\n  </div>\n</div>","import {\n  DatatableActionButtonConfig,\n  DatatableConfig,\n  DatatableData,\n  CatDatatableDataHttpResponse,\n  CatDatatableSelection,\n  DatatableTypeDataList,\n  ColumOrderType,\n} from './cat-datatable.interface';\nimport { CatDynamicComponent } from '@catrx/ui/dynamic-component';\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { Subject } from 'rxjs/internal/Subject';\n\nexport class DatatableFactory<FilterType = any, DataType = any> {\n  private config: DatatableConfig<DataType>;\n\n  constructor(\n    filter$: Subject<FilterType> | BehaviorSubject<FilterType>,\n    service: (\n      filter: FilterType\n    ) => Observable<CatDatatableDataHttpResponse<DataType>>,\n    loadType: DatatableTypeDataList = 'all'\n  ) {\n    this.config = {\n      filter$: filter$,\n      service,\n      typeDataList: loadType,\n      limitItemPerPage: 30,\n      reloadList: new BehaviorSubject({ reload: false }),\n    } as DatatableConfig<DataType>;\n  }\n\n  hasSelection(has = true) {\n    this.config.hasSelection = has;\n    return this;\n  }\n\n  hasActions(has = true) {\n    this.config.hasAction = has;\n    return this;\n  }\n\n  hidePaginator(hide = true) {\n    this.config.hidePaginator = hide;\n    return this;\n  }\n\n  hideMenuAndPaginator(hide = true) {\n    this.config.hideMenuAndPaginator = hide;\n    return this;\n  }\n\n  disableSelectionLineByRule(rule: (itemLine: DataType) => boolean) {\n    this.config.disableSelectionItem = rule;\n    return this;\n  }\n\n  setActionButton(options: DatatableActionButtonConfig<DataType>) {\n    if (!this.config.actionButtons) this.config.actionButtons = [];\n    this.config.actionButtons.push(options);\n    return this;\n  }\n\n  setColumns(columns: string[]) {\n    this.config.columns = columns;\n    return this;\n  }\n\n  setItemLine(options: DatatableData<DataType>) {\n    if (!this.config.data) this.config.data = [];\n    this.config.data.push(options);\n    return this;\n  }\n\n  setCustomEmptyComponent(component: CatDynamicComponent) {\n    this.config.customEmptyComponent = component;\n    return this;\n  }\n\n  setCustomLoaderComponent(component: CatDynamicComponent) {\n    this.config.customLoaderComponent = component;\n    return this;\n  }\n\n  setOrder(columnIndex: number, direction: ColumOrderType = 'asc') {\n    this.config.defaultColumSortIndex = columnIndex;\n    this.config.defaultColumOrder = direction;\n    return this;\n  }\n\n  getSelection(\n    getSelection: (selection: CatDatatableSelection<DataType>) => void\n  ) {\n    this.config.getSelection = getSelection;\n    return this;\n  }\n\n  getDatasource(getDatasource: (datasource: DataType[]) => void) {\n    this.config.getDatasource = getDatasource;\n    return this;\n  }\n\n  generate() {\n    return this.config;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { Subject } from 'rxjs/internal/Subject';\nimport {\n  CatDatatableDataHttpResponse,\n  DatatableTypeDataList,\n} from './cat-datatable.interface';\nimport { DatatableFactory } from './datatable.factory';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class CatDatatableService {\n  public build<FilterType, ListType>(\n    filter: Subject<FilterType> | BehaviorSubject<FilterType>,\n    service: (\n      filter: FilterType\n    ) => Observable<CatDatatableDataHttpResponse<ListType>>,\n    loadType: DatatableTypeDataList = 'all'\n  ) {\n    return new DatatableFactory(filter, service, loadType);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { DatatableComponent } from './datatable.component';\nimport { CommonModule } from '@angular/common';\nimport { CatDynamicComponentModule } from '@catrx/ui/dynamic-component';\nimport { CatIconButtonComponent } from '@catrx/ui/icon-button';\nimport { NgxPaginationModule } from 'ngx-pagination';\nimport { DatatableSortPipe } from './datatable-sort.pipe';\nimport { FormsModule } from '@angular/forms';\nimport { CatLoaderModule } from '@catrx/ui/loader';\n\n@NgModule({\n  declarations: [DatatableComponent, DatatableSortPipe],\n  exports: [DatatableComponent],\n  imports: [\n    CommonModule,\n    FormsModule,\n    CatDynamicComponentModule,\n    CatIconButtonComponent,\n    CatLoaderModule,\n    NgxPaginationModule,\n  ],\n})\nexport class CatDatatableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i7.DatatableSortPipe"],"mappings":"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"}