{"version":3,"file":"ngx-selection-table.mjs","sources":["../../src/ngx-selection-table/selection-table.component.ts","../../src/ngx-selection-table/selection-table.component.html","../../ngx-selection-table.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nexport enum SearchType {\n  searchWithSubHeader = 'searchWithSubHeader',\n  searchAll = 'searchAll',\n  searchInChildren = 'searchInChildren'\n}\n\nconst AUX_HEADER  = 'header';\nconst AUX_CHECKED = 'checked';\nconst AUX_SELECT  = 'select';\n\n@Component({\n  selector: 'ngx-selection-table',\n  templateUrl: './selection-table.component.html',\n  styleUrls: ['./selection-table.component.scss'],\n  standalone: true,\n  imports: [ CommonModule, FormsModule ]\n})\n\nexport class SelectionTableComponent {\n  filterValue: string;\n  itemHiddenFlag = {};\n  @Input()\n  /**\n   * Flag for showing the filter input box\n   */\n  filter: boolean;\n  @Input()\n  /**\n   * name of the key column\n   */\n  keyColumn: string;\n  @Input()\n  /**\n   * table data\n   */\n  tableSource: any[];\n  @Input()\n  /**\n   * Flag for showing the checkbox\n   */\n  checkbox = true;\n  @Input()\n  /**\n   * Flag for multiple selection\n   */\n  multiSelection = true;\n\n  @Input()\n  /**\n   * Flag for click row to select\n   */\n  clickToSelect = true;\n\n  @Input()\n  /**\n   * columns need to be hidden\n   */\n  hiddenColumns: string[];\n\n  @Input()\n  /**\n   * column used for tooltip\n   */\n  tooltipColumn: string;\n\n  @Input()\n  /**\n   * search style for the filter\n   */\n  searchStyle = SearchType.searchInChildren;\n\n  @Input()\n  /**\n   * search column for the filter\n   */\n  searchColumn: string;\n\n  /**\n   * selection change event\n   */\n  @Output() change = new EventEmitter<any>();\n\n  /**\n   * triggered by clicking the <tr>\n   */\n  onClick(e, row) {\n    if (this.clickToSelect) {\n      this.onChange(e, row);\n    }\n  }\n\n  /**\n   * Triggered by the changing of checkbox.\n   * Toggle the value of the checkbox;\n   * If multiSelection is false, will clear the previous selections.\n   */\n  onChange(event, row) {\n    if (!row.header) {\n      row.checked = !row.checked;\n      if (row.checked && !this.multiSelection) {\n        // unSelect other selected ones\n        if (this.tableSource) {\n          for (const tableRow of this.tableSource) {\n            if (tableRow.checked && tableRow[this.key] !== row[this.key]) {\n              tableRow.checked = false;\n            }\n          }\n        }\n      }\n      event.tableRow = row;\n      this.change.emit(event);\n    }\n  }\n\n  /**\n   * Get all the columns that need to be displayed.\n   * \"header\", \"checked\" and columns in hiddenColumns will be excluded.\n   */\n  get columns(): string[] {\n    if (this.tableSource && this.tableSource.length > 0) {\n      const hiddenColumns = this.hiddenColumns ? this.hiddenColumns : [];\n      const tableRow = this.tableSource.find(row => !row.header);\n      const keys = Object.keys(tableRow).filter(key => (![AUX_HEADER, AUX_CHECKED].includes(key) && !hiddenColumns.includes(key)));\n      if (this.checkbox) {\n        return [AUX_SELECT].concat(keys);\n      } else {\n        return keys;\n      }\n    }\n    return [];\n  }\n\n  /**\n   * Get the text for the subtitle column\n   * 'select', 'header', 'checked' and columns in hiddenColumns will be excluded.\n   * Return the first item if there are multiple items in the subtitle row.\n   */\n  get headColumn(): string {\n    if (this.tableSource && this.tableSource.length > 0) {\n      const hiddenColumns = this.hiddenColumns ? this.hiddenColumns : [];\n      const tableRow = this.tableSource.find(row => row.header);\n      const keys = Object.keys(tableRow).filter(\n        key => (![AUX_SELECT, AUX_HEADER, AUX_CHECKED].includes(key) && !hiddenColumns.includes(key)));\n      return keys[0];\n    }\n    return \"\";\n  }\n\n  /**\n   * Get the key column. If it is empty, use the first column (excluded the selection column).\n   */\n  get key(): string {\n    return this.keyColumn ? this.keyColumn : this.checkbox ? this.columns[1] : this.columns[0];\n  }\n\n  /**\n   * Get the table source after the filter being applied.\n   * There are three types of filter:\n   * searchWithSubHeader: search including the sub header (only), if any children are picked, the relative parent will be picked as well\n   * searchAll:           search including the sub header, all it's children will be picked as well,\n   *                      if any children are picked, the relative parent will be picked as well\n   * searchInChildren:    search excluding the sub header,\n   *                      if any children are picked, the relative parent will be picked as well\n   */\n  get tableSourceAfterFiltered() {\n    if (!this.searchColumn) {\n      return [];\n    }\n\n    let filter;\n    if (this.filterValue) {\n      filter = this.filterValue.toUpperCase();\n    }\n    switch (this.searchStyle) {\n      // search including the sub header (only), if any children are picked, the relative parent will be picked as well\n      case SearchType.searchWithSubHeader:\n        return this.tableSource.filter(row => !filter || filter.length === 0 ||\n          row[this.searchColumn].toUpperCase().includes(filter) ||\n          (row.header && this._getSubSearchItems(row[this.key]).findIndex(item => item.toUpperCase().includes(filter)) >= 0));\n      // search including the sub header, all it's children will be picked as well,\n      // if any children are picked, the relative parent will be picked as well\n      case SearchType.searchAll:\n        return this.tableSource.filter(row => !filter || filter.length === 0 ||\n          row[this.searchColumn].toUpperCase().includes(filter) ||\n          (!row.header && this._getParentSearchItem(row[this.key]).toUpperCase().includes(filter)) ||\n          (row.header && this._getSubSearchItems(row[this.key]).findIndex(item => item.toUpperCase().includes(filter)) >= 0)\n        );\n      // search excluding the sub header, if any children are picked, the relative parent will be picked as well\n      case SearchType.searchInChildren:\n      default:\n        return this.tableSource.filter(row => !filter || filter.length === 0 ||\n          !row.header && row[this.searchColumn].toUpperCase().includes(filter) ||\n          (row.header && this._getSubSearchItems(row[this.key]).findIndex(item => item.toUpperCase().includes(filter)) >= 0));\n    }\n  }\n\n  /**\n   * Toggle the sub items of current row\n   */\n  toggleSubTopic(event, row) {\n    if (this.key != null) {\n      this._getSubItems(row[this.key]).forEach(key => this.itemHiddenFlag[key] = !this.itemHiddenFlag[key]);\n      // undefined --> all sub items are showing,\n      // false -> all sub items are hidden\n      this.itemHiddenFlag[row[this.key]] = this.itemHiddenFlag[row[this.key]] === undefined ? false : undefined;\n    }\n  }\n\n  /**\n   * Check whether the sub items are in hidden status by key.\n   */\n  isSubTopicHidden(key) {\n    // undefined --> all sub items are showing,\n    // false -> all sub items are hidden\n    return this.itemHiddenFlag[key] === false;\n  }\n\n  /**\n   * get all sub items by key.\n   */\n  private _getSubItems(key): string[] {\n    const startIndex = this.tableSource.findIndex(row => row[this.key] === key && row.header);\n    if (this.tableSource.length <= startIndex + 1 || startIndex < 0) {\n      // the header is the last one, or can't find it, return empty directly\n      return [];\n    }\n\n    let endIndex = this.tableSource.slice(startIndex + 1).findIndex(row => row.header);\n\n    if (endIndex < 0 ) {\n      // no next header, set index as last item\n      endIndex = this.tableSource.length - 1;\n    }\n    return this.tableSource.slice(startIndex + 1, startIndex + endIndex + 1).map(row => row[this.key]);\n  }\n\n  /**\n   * Get parent item of the provided key row\n   */\n  private _getParentSearchItem(key): string {\n    const childIndex = this.tableSource.findIndex(row => row[this.key] === key && !row.header);\n    if (childIndex < 0) {\n      return '';\n    }\n    const slicedTable = this.tableSource.slice(0, childIndex);\n    const parentIndex = slicedTable.map(row => row.header).lastIndexOf(true);\n    return parentIndex >= 0 ? slicedTable[parentIndex][this.searchColumn] : '';\n  }\n\n  /**\n   * Get sub items of the provided key row.\n   */\n  private _getSubSearchItems(key): string[] {\n    const keys = this._getSubItems(key);\n    if (!keys || keys.length === 0) {\n      return [];\n    }\n    return this.tableSource.filter(row => keys.includes(row[this.key])).map(row => row[this.searchColumn]);\n  }\n}\n","<table>\n  <tr>\n    <th class=\"sticky-header\" *ngFor=\"let column of columns\" nowrap>{{column=='select'? '': column}}</th>\n  </tr>\n  <tr *ngIf=\"filter\">\n    <td [colSpan]=\"columns.length\">\n      <div class=\"search\">\n        <div class=\"icon-container\">\n          <div class=\"search-icon\" *ngIf=\"!filterValue\">&#9906;</div>\n          <div class=\"clear-icon\" *ngIf=\"filterValue\" (click)=\"filterValue=''\">&times;</div>\n        </div>\n        <input type=\"text\" class=\"search-input\" placeholder=\"Enter Search Terms Here...\" [(ngModel)]=\"filterValue\">\n      </div>\n    </td>\n  </tr>\n  <ng-container *ngFor=\"let row of tableSourceAfterFiltered\">\n    <tr *ngIf=\"!itemHiddenFlag[row[key]]\" (click)=\"onClick($event, row); $event.stopPropagation()\"\n        [id]=\"row[key]\"\n        [title]=\"tooltipColumn? row[tooltipColumn]? row[tooltipColumn]: '' : ''\"\n        [class.selected]=\"row.checked\">\n      <td *ngIf=\"!row.header && checkbox\" class=\"checkbox\">\n        <label class=\"container\">\n          <input type='checkbox' name='check' (change)=\"onChange($event, row); $event.stopPropagation()\" [checked]=\"row.checked\">\n          <span class=\"checkmark\"></span>\n        </label>\n      </td>\n      <th *ngIf=\"row.header\" [colSpan]=\"columns.length\" class=\"subtopic\" (click)=\"toggleSubTopic($event, row)\">\n        <span *ngIf=\"!isSubTopicHidden(row[key])\">&#8722;</span>\n        <span *ngIf=\"isSubTopicHidden(row[key])\">&#43;</span> {{row[headColumn]}}\n      </th>\n      <ng-container *ngIf=\"!row.header && !checkbox\">\n        <td *ngFor=\"let column of columns\">{{row[column]}}</td>\n      </ng-container>\n      <ng-container *ngIf=\"!row.header && checkbox\">\n        <td *ngFor=\"let column of columns.slice(1)\">{{row[column].constructor.name === 'Number'? (row[column] | number:'1.0-2') : row[column] }}</td>\n      </ng-container>\n    </tr>\n  </ng-container>\n</table>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}