{"version":3,"file":"obelisco-angular-table.mjs","sources":["../../../projects/obelisco-angular/table/o-table.component.ts","../../../projects/obelisco-angular/table/o-table.component.html","../../../projects/obelisco-angular/table/o-table.module.ts","../../../projects/obelisco-angular/table/obelisco-angular-table.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n  OnInit,\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  Output,\n  QueryList,\n  ViewChildren,\n  Renderer2,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Column, DataSource, TableCheckbox } from 'obelisco-angular/core/models';\n\n@Component({\n  selector: 'o-table',\n  templateUrl: './o-table.component.html',\n  styleUrls: ['./o-table.component.scss'],\n})\nexport class OTableComponent implements OnInit, AfterViewInit {\n  public isValidateComponent: boolean = false;\n\n  @Input() public id: string = 'o-table';\n  @Input() public columns: Column[] = [];\n  @Input() public dataSource: DataSource[] = [];\n  @Input() public isBordered: boolean = false;\n  @Input() public isStriped: boolean = false;\n  @Input() public isScrollable: boolean = false;\n  @Input() public customClasses: string = '';\n  @Input() public checkbox!: TableCheckbox;\n\n  @Output() public dataSelectedChange = new EventEmitter<DataSource[]>();\n\n  private inputCheckArr: ElementRef[] = [];\n  private dataSelected: DataSource[] = [];\n\n  @ViewChildren('checkbox') public checkboxRef!: QueryList<ElementRef>;\n\n  constructor(\n    private readonly renderer: Renderer2,\n    private sanitizer: DomSanitizer\n  ) {}\n\n  public ngOnInit(): void {\n    this.componentValidations();\n  }\n\n  public ngAfterViewInit(): void {\n    this.checkboxRef.map((e) => {\n      this.inputCheckArr.push(e.nativeElement);\n    });\n  }\n\n  private componentValidations(): void {\n    this.isValidateComponent =\n      this.columns.length > 0 && this.dataSource.length > 0;\n\n    if (!this.isValidateComponent) {\n      throw new Error('The columns and dataSource must not be empty');\n    }\n\n    this.columns.map((e) => {\n      if (e.key === '' || e.value === '') {\n        this.isValidateComponent = false;\n        throw new Error('The columns must not have null values');\n      }\n    });\n\n    this.columns.map((e) => (e.value = e.value.trim()));\n\n    this.columns = this.columns.map((e) => {\n      e.value =\n        e.value.charAt(0).toUpperCase() + e.value.slice(1).toLowerCase();\n      return e;\n    });\n\n    this.columns.map((e) => {\n      if (\n        e.value.match(/^[a-zA-ZáéíóúÁÉÍÓÚñÑ ]*$/) &&\n        e.key.match(/^[a-zA-Z ]*$/)\n      ) {\n        this.isValidateComponent = true;\n        return e;\n      } else {\n        this.isValidateComponent = false;\n        throw new Error(\n          'The columns value must not contain numbers or symbols and the key must not contain numbers, symbols or accents'\n        );\n      }\n    });\n  }\n\n  sanitizeHTML(html: string): SafeHtml {\n    return this.sanitizer.bypassSecurityTrustHtml(html);\n  }\n\n  public onHeaderCheckboxChange(event: Event): void {\n    const target = event.target as HTMLInputElement;\n    if (target) {\n      const isChecked = target.checked;\n      this.checkboxRef.toArray().forEach((checkbox: ElementRef) => {\n        (checkbox.nativeElement as HTMLInputElement).checked = isChecked;\n      });\n\n      if (isChecked) {\n        this.dataSelected = [...this.dataSource];\n      } else {\n        this.dataSelected = [];\n      }\n\n      this.dataSelectedChange.emit(this.dataSelected);\n    }\n  }\n\n  public onCheckboxChange(data: DataSource, event: any): void {\n    if (event && event.target && typeof event.target.checked === 'boolean') {\n      const isChecked: boolean = event.target.checked;\n\n      if (isChecked) {\n        this.dataSelected.push(data);\n      } else {\n        const index = this.dataSelected.findIndex((item) => item === data);\n        if (index !== -1) {\n          this.dataSelected.splice(index, 1);\n        }\n      }\n\n      this.dataSelectedChange.emit(this.dataSelected);\n    }\n  }\n}\n","<div [ngClass]=\"{ 'responsive-scroll': isScrollable }\" [class]=\"customClasses\" tabindex=\"0\">\n  <table\n    *ngIf=\"isValidateComponent\"\n    class=\"table\"\n    [ngClass]=\"{ 'table-borderless': !isBordered, 'table-striped': isStriped }\"\n  >\n    <thead>\n      <tr>\n        <th scope=\"col\" *ngIf=\"checkbox?.isAllSelectable == true\" [ngClass]=\"checkbox.customClassesTh\">\n          <div class=\"custom-control custom-checkbox\">\n            <input\n              class=\"custom-control-input\"\n              type=\"checkbox\"\n              id=\"{{ id }}-selectAllCheckbox\"\n              name=\"{{ id }}-selectAllCheckbox\"\n              value=\"\"\n              (change)=\"onHeaderCheckboxChange($event)\"\n            />\n            <label\n              [ngClass]=\"checkbox.customClassesLabel\"\n              class=\"custom-control-label\"\n              for=\"{{ id }}-selectAllCheckbox\"\n              aria-label=\"Descripción para usuarios de lectores de pantalla\"\n              >{{ checkbox.title }}</label\n            >\n          </div>\n        </th>\n        <th scope=\"col\" *ngIf=\"checkbox?.isAllSelectable == false\" [ngClass]=\"checkbox.customClassesTh\">\n          {{ checkbox.title }}\n        </th>\n        <ng-container *ngFor=\"let column of columns\">\n          <th scope=\"col\" [ngClass]=\"column.customClasses\">{{ column.value }}</th>\n        </ng-container>\n      </tr>\n    </thead>\n    <tbody>\n      <tr *ngFor=\"let data of dataSource; let i = index\">\n        <td *ngIf=\"checkbox\">\n          <div class=\"custom-control custom-checkbox\">\n            <input\n              #checkbox\n              class=\"custom-control-input\"\n              type=\"checkbox\"\n              id=\"{{ id }}-checkbox_{{ i }}\"\n              name=\"{{ id }}-checkbox_{{ i }}\"\n              value=\"\"\n              (change)=\"onCheckboxChange(data, $event)\"\n            />\n            <label\n              class=\"custom-control-label no-text\"\n              for=\"{{ id }}-checkbox_{{ i }}\"\n              aria-label=\"Descripción para usuarios de lectores de pantalla\"\n            ></label>\n          </div>\n        </td>\n        <ng-container *ngFor=\"let column of columns\">\n          <td [ngClass]=\"data[column.key].customClasses\">\n            <div *ngIf=\"data[column.key].data\" [innerHTML]=\"sanitizeHTML(data[column.key].data)\"></div>\n          </td>\n        </ng-container>\n      </tr>\n    </tbody>\n  </table>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OTableComponent } from './o-table.component';\n\n@NgModule({\n  declarations: [OTableComponent],\n  imports: [CommonModule],\n  exports: [OTableComponent]\n})\nexport class OTableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}