UNPKG

@obliczeniowo/elementary

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