{"version":3,"file":"ngx-excel-viewer.mjs","sources":["../../../projects/ngx-excel-viewer/src/lib/ngx-excel-viewer.service.ts","../../../projects/ngx-excel-viewer/src/lib/ngx-excel-viewer.component.ts","../../../projects/ngx-excel-viewer/src/lib/ngx-excel-viewer.component.html","../../../projects/ngx-excel-viewer/src/lib/ngx-excel-viewer.module.ts","../../../projects/ngx-excel-viewer/src/public-api.ts","../../../projects/ngx-excel-viewer/src/ngx-excel-viewer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NgxExcelViewerService {\n\n  constructor() { }\n}\n","import { Component, EventEmitter, HostListener, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n  selector: 'ngx-excel-viewer',\n  templateUrl: 'ngx-excel-viewer.component.html',\n  styleUrls: ['ngx-excel-viewer.component.scss']\n})\nexport class NgxExcelViewerComponent implements OnInit, OnChanges {\n  @Input() id: string = \"\";\n  @Input() data: any;\n  @Input() sheetNames: string[] = [];\n  @Input() editable: boolean = false;\n  @Input() events: BehaviorSubject<any> | null = null;\n  @Input() saveDataOutput: \"complete\" | \"edited-only\" = \"complete\";\n  @Output() onDataSave = new EventEmitter<any>();\n  @Output() onScrollEnd = new EventEmitter<any>();\n  public currentSheetName = \"\";\n  public maxOfColumns = 0;\n  public selectedCellIndices: [number, number] = [-1, -1];\n  public isEditingTheSelectedCell = false;\n  public headers: string[] = [];\n  public sheetData: any[] = [];\n  public isSheetDataChanged = false;\n  private backupSheetData: any[] = [];\n  public modifiedRows: number[] = [];\n  private renderedPages = 1;\n  private lastScrollTop = 0;\n  public loading = false;\n  constructor() { }\n\n  ngOnInit(): void {\n    if (this.data != null) {\n      this.currentSheetName = this.sheetNames[0];\n      if (this.data[this.currentSheetName]) {\n        this.run();\n      }\n    }\n    if (this.events != null) {\n      this.events.subscribe(event => {\n        if (event.id == this.id) {\n          if (event.type == \"cancel\") {\n            this.sheetData = JSON.parse(JSON.stringify(this.backupSheetData));\n            this.isSheetDataChanged = false;\n            this.modifiedRows = [];\n          } else if (event.type == \"save\") {\n            if(this.saveDataOutput == \"complete\"){\n              this.onDataSave.emit({id: this.id, sheet: this.currentSheetName, data: this.sheetData.map((row: any) => row['value'])});\n              return;\n            }\n            let payload: any = {};\n            for (let rowIndex of this.modifiedRows) {\n              payload[`${rowIndex + 1}`] = this.sheetData[rowIndex].map((row: any) => row['value']);\n            }\n            this.onDataSave.emit({ id: this.id, sheet: this.currentSheetName, data: payload });\n          } else if (event.type == \"saved\") {\n            for (let rowIndex of this.modifiedRows) {\n              this.data[rowIndex] = this.sheetData[rowIndex].map((row: any) => row['value']);\n              this.backupSheetData[rowIndex] = this.sheetData[rowIndex];\n            }\n          } else if (event.type == \"new_data\") {\n            this.run();\n          }\n        }\n      })\n    }\n  }\n\n  run() {\n    this.loading = true;\n    setTimeout(() => {\n      this.calculateMaxColumns();\n      this.generateHeaders();\n      this.generateSheetData();\n      setTimeout(() => {\n        this.loading = false;\n      }, 100)\n    }, 100);\n\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['data'] && changes['data'].previousValue != changes['data'].currentValue) {\n      this.run();\n    }\n  }\n\n  calculateMaxColumns() {\n    this.maxOfColumns = 0;\n    if (this.data[this.currentSheetName]) {\n      for (let row of this.data[this.currentSheetName]) {\n        if (row.length > this.maxOfColumns) {\n          this.maxOfColumns = row.length;\n        }\n      }\n    }\n  }\n\n  generateHeaders() {\n    let headers: string[] = [];\n    for (let i = 0; i < this.maxOfColumns; i++) {\n      let header = \"\";\n      let num = i;\n      while (num >= 0) {\n        let remainder = num % 26;\n        header = String.fromCharCode(65 + remainder) + header;\n        num = Math.floor(num / 26) - 1;\n      }\n      headers.push(header);\n    }\n    this.headers = headers;\n  }\n\n  generateSheetData() {\n    if(this.data[this.currentSheetName]){\n      this.sheetData = JSON.parse(JSON.stringify(this.data[this.currentSheetName].map((row: any) => row.map((r: any) => ({\"value\": r})))));\n      this.backupSheetData = JSON.parse(JSON.stringify(this.sheetData));\n    }else{\n      this.sheetData = [];\n      this.backupSheetData = [];\n    }\n  }\n\n  setSelectedSheetName(sheet: string) {\n    if (this.isSheetDataChanged) {\n      alert(\"Save sheet before switching\");\n      return;\n    }\n    this.currentSheetName = sheet;\n    this.run();\n  }\n\n  selectCell(i: number, j: number) {\n    if ((this.selectedCellIndices[0] == i && this.selectedCellIndices[1] == j) || (i > this.sheetData.length - 1 || j > this.maxOfColumns - 1)) {\n      (document.querySelector(`#input-${this.selectedCellIndices[0]}-${this.selectedCellIndices[1]}`) as any).focus()\n      return;\n    }\n    i = i >= 0 ? i : 0;\n    j = j >= 0 ? j : 0;\n    this.selectedCellIndices = [i, j];\n    (document.querySelector(`#input-${i}-${j}`) as any).focus()\n  }\n\n  onDataChanges(event: any, i: number, j: number) {\n    if (!this.editable) return;\n    if (this.backupSheetData[i][j][\"value\"] != event.target.innerText) {\n      this.sheetData[i][j][\"value\"] = event.target.innerText;\n      if (!this.modifiedRows.includes(i)) {\n        this.modifiedRows.push(i);\n      }\n      if (!this.isSheetDataChanged) {\n        this.isSheetDataChanged = true;\n      }\n    }\n  }\n\n  @HostListener('keypress', ['$event'])\n  onKeyPress(event: any) {\n    if (event.which == 13) {\n      event.preventDefault();\n    }\n  }\n\n  onScroll(event: any) {\n    if (event.target.scrollTop > this.lastScrollTop) {\n      if ((event.target.offsetHeight + event.target.scrollTop) >= event.target.scrollHeight) {\n        this.onScrollEnd.emit({ id: this.id, pageNo: this.renderedPages++, sheet: this.currentSheetName });\n      }\n    }\n    this.lastScrollTop = event.target.scrollTop;\n  }\n\n\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: any) {\n    if (event.key?.includes(\"Arrow\")) {\n      const key = event.key;\n      let i = this.selectedCellIndices[0];\n      let j = this.selectedCellIndices[1];\n      event.target.blur();\n      if (key == \"ArrowUp\") {\n        i--;\n      } else if (key == \"ArrowDown\") {\n        i++;\n      } else if (key == \"ArrowLeft\") {\n        if (window.getSelection()?.anchorOffset == 0) j--;\n      } else if (key == \"ArrowRight\") {\n        if ((window.getSelection()?.anchorOffset ?? 0) >= event.target.innerText.length) j++;\n      }\n      this.selectCell(i, j);\n    }\n  }\n\n\n}\n","<div class=\"excel-file\">\r\n    <div class=\"scrollable\" (scroll)=\"onScroll($event)\">\r\n        <table *ngIf=\"sheetData.length != 0\">\r\n            <thead>\r\n                <tr>\r\n                    <th class=\"header s-no\"></th>\r\n                    <th class=\"header\" *ngFor=\"let header of headers\">{{header}}</th>\r\n                </tr>\r\n            </thead>\r\n            <tbody>\r\n                <ng-container *ngIf=\"currentSheetName && data\">\r\n                    <tr *ngFor=\"let data of sheetData; let i=index\">\r\n                        <td class=\"s-no\">{{i+1}}</td>\r\n                        <td *ngFor=\"let cell of data; let j=index\"\r\n                            [ngClass]=\"{'main-selected': selectedCellIndices[0] == i && selectedCellIndices[1] == j}\"\r\n                            (click)=\"selectCell(i,j)\">\r\n                            <div [id]=\"'input-'+i+'-'+j\" (blur)=\"onDataChanges($event, i, j)\" (focus)=\"selectCell(i,j)\"\r\n                                [contentEditable]=\"editable\" [innerHTML]=\"cell['value']\"></div>\r\n                        </td>\r\n                    </tr>\r\n                </ng-container>\r\n            </tbody>\r\n        </table>\r\n    </div>\r\n    <div class=\"empty-data\" *ngIf=\"sheetData.length == 0\">\r\n        Empty Sheet\r\n    </div>\r\n    <div class=\"footer\">\r\n        Sheets: <div *ngFor=\"let sheet of sheetNames\" class=\"sheet\" [ngClass]=\"{'active': currentSheetName == sheet}\"\r\n            (click)=\"setSelectedSheetName(sheet)\">{{sheet}}</div>\r\n    </div>\r\n    <div class=\"loading\" *ngIf=\"loading\">\r\n        <div class=\"spinner\">\r\n            <div class=\"lds-spinner\">\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n                <div></div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</div>","import { NgModule } from '@angular/core';\nimport { NgxExcelViewerComponent } from './ngx-excel-viewer.component';\nimport { CommonModule } from '@angular/common';\n\n\n\n@NgModule({\n  declarations: [\n    NgxExcelViewerComponent,\n  ],\n  imports: [\n    CommonModule,\n  ],\n  exports: [\n    NgxExcelViewerComponent\n  ]\n})\nexport class NgxExcelViewerModule { }\n","/*\n * Public API Surface of ngx-excel-viewer\n */\n\nexport * from './lib/ngx-excel-viewer.service';\nexport * from './lib/ngx-excel-viewer.component';\nexport * from './lib/ngx-excel-viewer.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}