{"version":3,"file":"obliczeniowo-elementary-array-to-table.mjs","sources":["../../../../projects/components/array-to-table/components/editable-cell/editable-cell.component.ts","../../../../projects/components/array-to-table/components/editable-cell/editable-cell.component.html","../../../../projects/components/array-to-table/components/pipe/is.pipe.ts","../../../../projects/components/array-to-table/components/pipe/is-template.pipe.ts","../../../../projects/components/array-to-table/components/array-to-table/array-to-table.component.ts","../../../../projects/components/array-to-table/components/array-to-table/array-to-table.component.html","../../../../projects/components/array-to-table/array-to-table.module.ts","../../../../projects/components/array-to-table/obliczeniowo-elementary-array-to-table.ts"],"sourcesContent":["import { ElementaryMath } from '@obliczeniowo/elementary/math';\r\nimport {\r\n  Component,\r\n  HostListener,\r\n  ElementRef,\r\n  HostBinding,\r\n  input,\r\n  model,\r\n  effect,\r\n} from '@angular/core';\r\n\r\n@Component({\r\n    selector: 'td[obl-editable-cell]',\r\n    templateUrl: './editable-cell.component.html',\r\n    styleUrls: ['./editable-cell.component.scss'],\r\n    standalone: false\r\n})\r\nexport class EditableCellComponent {\r\n  value = model.required<string | number | { [key: string]: number | string }>();\r\n\r\n  editable = input<boolean>(true);\r\n\r\n  type: 'string' | 'number' | 'json' | 'none' = 'none';\r\n\r\n  inputValue: string | number | undefined;\r\n\r\n  @HostBinding('class.focus')\r\n  focus: boolean = false;\r\n\r\n  @HostBinding('class.number') get isNumber(): boolean {\r\n    return this.type === 'number';\r\n  }\r\n\r\n  @HostBinding('class.string') get isText(): boolean {\r\n    return this.type === 'string';\r\n  }\r\n\r\n  @HostListener('click') clicked() {\r\n    if (this.editable()) {\r\n      this.focus = true;\r\n    }\r\n  }\r\n\r\n  blur(event: any) {\r\n    console.log(event.target.value)\r\n    this.value.set(event.target.value);\r\n    this.focus = false;\r\n  }\r\n\r\n  constructor(protected elementRef: ElementRef<HTMLElement>) {\r\n    effect(() => {\r\n      this.value();\r\n      this.changed();\r\n    }, {\r\n      allowSignalWrites: true\r\n    });\r\n  }\r\n\r\n  ngAfterViewChecked(): void {\r\n    if (this.focus) {\r\n      const input = this.elementRef.nativeElement.querySelector('input');\r\n\r\n      if (input) {\r\n        input.focus();\r\n      }\r\n    }\r\n  }\r\n\r\n  changed() {\r\n    const value = this.value();\r\n    const isString = typeof value === 'string';\r\n    if (isString || typeof value === 'number') {\r\n      if (isString && ElementaryMath.isNumeric(value as string, true)) {\r\n        this.value.set(parseFloat(value as string));\r\n      }\r\n      this.type = typeof value as any;\r\n      this.inputValue = value as any;\r\n    } else if (value === undefined) {\r\n      this.type = 'none';\r\n      this.inputValue = '';\r\n    } else {\r\n      this.type = 'json';\r\n      this.inputValue = 'object';\r\n    }\r\n  }\r\n}\r\n","@if (editable() && focus && (type === 'string' || type === 'number')) {\r\n  <obl-input-wrapper\r\n    display=\"none\"\r\n  >\r\n    <input oblInput type=\"text\" [value]=\"inputValue\" (blur)=\"blur($event)\" />\r\n  </obl-input-wrapper>\r\n} @else {\r\n  {{ inputValue }}\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n    name: 'is',\r\n    standalone: false\r\n})\r\nexport class IsPipe implements PipeTransform {\r\n  transform(value: any, ...args: ['string' | 'number']): boolean {\r\n    // eslint-disable-next-line valid-typeof\r\n    return typeof value === args[0];\r\n  }\r\n}\r\n","import { Pipe, PipeTransform, TemplateRef } from '@angular/core';\r\n\r\n@Pipe({\r\n    name: 'isTemplate',\r\n    standalone: false\r\n})\r\nexport class IsTemplatePipe implements PipeTransform {\r\n  transform(value: any, ...args: unknown[]): TemplateRef<any> | undefined {\r\n    return value instanceof TemplateRef && value || undefined;\r\n  }\r\n}\r\n","import { PageControllerRecordAdapter } from '@obliczeniowo/elementary/scroller-nav';\r\nimport { ElementaryMath } from '@obliczeniowo/elementary/math';\r\nimport { OblFileService, Csv } from '@obliczeniowo/elementary/files';\r\nimport {\r\n  Component,\r\n  ElementRef,\r\n  Input,\r\n  SimpleChanges,\r\n  ChangeDetectorRef,\r\n  Output,\r\n  EventEmitter,\r\n  TemplateRef,\r\n  input,\r\n} from '@angular/core';\r\n\r\ninterface Record {\r\n  x: number;\r\n  y: number;\r\n  value: string | number;\r\n}\r\n\r\n/**\r\n * Component prepared to display raw data like text/numbers as a quick formatted table\r\n */\r\n@Component({\r\n    selector: 'obl-array-to-table',\r\n    templateUrl: './array-to-table.component.html',\r\n    styleUrls: ['./array-to-table.component.scss'],\r\n    standalone: false\r\n})\r\nexport class ArrayToTableComponent {\r\n  /**\r\n   * Array of elements to display number/string/table of number/string\r\n   */\r\n  @Input() array: (string | number)[] | (string | number)[][] = [];\r\n  /** */\r\n  headers = input<string[] | undefined>([]);\r\n  /**\r\n   * Caption text of table to display\r\n   */\r\n  caption = input<string | TemplateRef<any> | undefined>();\r\n  /**\r\n   * Maximum number of columns in one line, if number of columns is greater then this value\r\n   * then it will split data in new record line\r\n   */\r\n  maxLength = input<number | undefined>();\r\n  /** */\r\n  editable = input<boolean>(false);\r\n  /** */\r\n  display = input<{ index?: boolean; download?: 'json' | 'csv' }>({\r\n    index: true,\r\n    download: 'csv',\r\n  });\r\n\r\n  @Output() arrayChanged: EventEmitter<(string | number)[][]> =\r\n    new EventEmitter<(string | number)[][]>();\r\n\r\n  /**\r\n   * Prepared to display data\r\n   */\r\n  records: Record[][] = [];\r\n  /**\r\n   * body of table reference for scroller\r\n   */\r\n  tbody: HTMLElement | null = null;\r\n  /**\r\n   * y table wrapper reference for scroller\r\n   */\r\n  yWrapper: HTMLElement | null = null;\r\n\r\n  pageAdapter: PageControllerRecordAdapter = new PageControllerRecordAdapter(\r\n    this.records.length\r\n  );\r\n\r\n  constructor(\r\n    protected elementRef: ElementRef<HTMLElement>,\r\n    protected change: ChangeDetectorRef,\r\n    protected file: OblFileService\r\n  ) {}\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes.array || changes.maxLength) {\r\n      this.array = this.array.map((v) => {\r\n        if (v instanceof Array) {\r\n          return v;\r\n        }\r\n        return [v];\r\n      });\r\n\r\n      this.records =\r\n        this.convert().reduce((p, c) => {\r\n          const copy = [...c];\r\n          while (this.maxLength() && copy.length > (this.maxLength() || 0)) {\r\n            p.push(copy.splice(0, this.maxLength()));\r\n          }\r\n          if (copy.length) {\r\n            p.push(copy);\r\n          }\r\n          return p;\r\n        }, [] as Record[][]) || [];\r\n\r\n      this.pageAdapter.setMax(this.records.length);\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    setTimeout(() => {\r\n      this.tbody = this.elementRef.nativeElement.querySelector('tbody');\r\n      this.yWrapper = this.elementRef.nativeElement.querySelector('.y-wrapper');\r\n    });\r\n  }\r\n\r\n  downloadCsv(name: string = 'Table') {\r\n    if (this.array.length) {\r\n      const converted = this.convert();\r\n      const csv = Csv.fromArray(\r\n        converted.map((v) => v.map((v) => v.value)),\r\n        this.headers()\r\n      );\r\n\r\n      this.file.saveTextFile(csv.prepare(), name, 'text/csv');\r\n    }\r\n  }\r\n\r\n  downloadJson(name: string = 'Table') {\r\n    if (this.array.length) {\r\n      const converted = this.convert();\r\n      const csv = Csv.fromArray(\r\n        converted.map((v) => v.map((v) => v.value)),\r\n        this.headers()\r\n      );\r\n\r\n      this.file.saveTextFile(\r\n        JSON.stringify(csv.toJson(), undefined, '  '),\r\n        name,\r\n        'text/json'\r\n      );\r\n    }\r\n  }\r\n\r\n  changed(value: any, record: number, index: number) {\r\n    if (ElementaryMath.isNumeric(value, true)) {\r\n      value = parseFloat(value);\r\n      this.records[record][index].value = value;\r\n      (this.array as (string | number)[][])[this.records[record][index].y][\r\n        this.records[record][index].x\r\n      ] = value;\r\n    } else {\r\n      this.records[record][index].value = value;\r\n      (this.array as (string | number)[][])[this.records[record][index].y][\r\n        this.records[record][index].x\r\n      ] = value;\r\n    }\r\n\r\n    this.arrayChanged.emit(this.array as (string | number)[][]);\r\n  }\r\n\r\n  protected convert(): Record[][] {\r\n    return (this.array as (string | number)[][]).map((v, y) =>\r\n      v.map((value, x) => ({ x, y, value }))\r\n    );\r\n  }\r\n}\r\n","<div class=\"table-wrapper\">\r\n  <div class=\"y-wrapper\">\r\n    <table>\r\n      @if (caption()) {\r\n        <caption>\r\n          @if (caption() | is: 'string') {\r\n            {{ caption() }}\r\n          } @else {\r\n            <ng-container *ngTemplateOutlet=\"(caption() | isTemplate) || captionRef\"></ng-container>\r\n          }\r\n        </caption>\r\n      }\r\n\r\n      <tbody>\r\n        @if (!maxLength() && headers()?.length) {\r\n          @if (!maxLength() && headers()?.length) {\r\n            <tr>\r\n              @if (display().index) {\r\n                <th class=\"index\"></th>\r\n              }\r\n              @for ( header of headers(); track header) {\r\n                <th>{{ header }}</th>\r\n              }\r\n            </tr>\r\n          }\r\n        }\r\n        @for(record of records; track $index; let vIndex = $index) { \r\n          @if (\r\n            vIndex >= pageAdapter.position &&\r\n            vIndex < pageAdapter.page.jump + pageAdapter.position\r\n          ) {\r\n            <tr>\r\n              @if (display().index) {\r\n                <td class=\"index\">{{ vIndex + 1 }}</td>\r\n              }\r\n              @for (value of record; track value) {\r\n                <td\r\n                  obl-editable-cell\r\n                  [value]=\"value.value\"\r\n                  [editable]=\"editable()\"\r\n                  (valueChanged)=\"changed($event, vIndex, $index)\"\r\n                ></td>\r\n              }\r\n            </tr>\r\n          }\r\n        }\r\n      </tbody>\r\n    </table>\r\n  </div>\r\n  <div class=\"buttons-vertical\">\r\n    @if (pageAdapter.getMax() > pageAdapter.page.jump) {\r\n      <obl-scroller-nav\r\n        [horizontal]=\"false\"\r\n        [pageController]=\"pageAdapter\"\r\n        [element]=\"tbody\"\r\n      ></obl-scroller-nav>\r\n    }\r\n\r\n    @if (display().download === 'csv') {\r\n      <button oblButton (click)=\"downloadCsv()\">\r\n        <obl-icon [name]=\"'csv-file'\"></obl-icon>\r\n      </button>\r\n    }\r\n\r\n    @if (display().download === 'json') {\r\n      <button oblButton (click)=\"downloadJson()\">\r\n        <obl-icon [name]=\"'json-file'\"></obl-icon>\r\n      </button>\r\n    }\r\n\r\n    <ng-content></ng-content>\r\n  </div>\r\n</div>\r\n\r\n<obl-scroller-nav [element]=\"yWrapper\"></obl-scroller-nav>\r\n\r\n<ng-template #captionRef></ng-template>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { ButtonsModule } from '@obliczeniowo/elementary/buttons';\r\nimport { ScrollerNavModule } from '@obliczeniowo/elementary/scroller-nav';\r\nimport { IconsModule } from '@obliczeniowo/elementary/icons';\r\nimport { InputModule } from '@obliczeniowo/elementary/input';\r\n\r\nimport { ArrayToTableComponent } from './components/array-to-table/array-to-table.component';\r\nimport { EditableCellComponent } from './components/editable-cell/editable-cell.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { IsPipe } from './components/pipe/is.pipe';\r\nimport { IsTemplatePipe } from './components/pipe/is-template.pipe';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    ArrayToTableComponent,\r\n    EditableCellComponent,\r\n    IsPipe,\r\n    IsTemplatePipe,\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    IconsModule,\r\n    ButtonsModule,\r\n    ScrollerNavModule,\r\n    InputModule,\r\n  ],\r\n  exports: [\r\n    ArrayToTableComponent\r\n  ]\r\n})\r\nexport class ArrayToTableModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i6.EditableCellComponent","i7.IsPipe","i8.IsTemplatePipe"],"mappings":"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"}