UNPKG

ngx-ui-builder

Version:

Angular - Render component ui with configurations

1 lines 27.8 kB
{"version":3,"file":"ngx-ui-builder-table.mjs","sources":["../../../libs/ngx-ui-builder/table/src/table.service.ts","../../../libs/ngx-ui-builder/table/src/component/cell/cell.component.ts","../../../libs/ngx-ui-builder/table/src/component/filter/filter.component.ts","../../../libs/ngx-ui-builder/table/src/component/table/table.component.ts","../../../libs/ngx-ui-builder/table/src/component/table/table.component.html","../../../libs/ngx-ui-builder/table/src/table.module.ts","../../../libs/ngx-ui-builder/table/src/public-api.ts","../../../libs/ngx-ui-builder/table/src/ngx-ui-builder-table.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NubTableService {\n constructor() {}\n}\n","import { ChangeDetectionStrategy, Component, Input, OnInit, ViewContainerRef } from '@angular/core';\n\n@Component({\n selector: 'nub-table-cell',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NubTableCellComponent implements OnInit {\n // Common cell properties\n @Input() set cell(cell: any) {\n this.localConfigs.cell = { ...cell };\n };\n @Input() set metadata(metadata: any) {\n this.localConfigs.metadata = { ...metadata };\n };\n\n localConfigs: { cell?: any, metadata?: any } = {};\n\n constructor(private viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n const cell: any = this.viewContainerRef.createComponent(this.localConfigs.metadata.component);\n cell.instance.cell = this.localConfigs.cell;\n cell.instance.metadata = this.localConfigs.metadata;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n Injector,\n Input,\n OnInit,\n ViewContainerRef,\n} from '@angular/core';\nimport { NubTableColumnConfig } from '../../table.types';\nimport { NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\n\n@Component({\n selector: 'nub-table-filter',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NubFilterComponent),\n multi: true\n }\n ]\n})\nexport class NubFilterComponent implements OnInit {\n // Common cell properties\n @Input() set column(column: NubTableColumnConfig) {\n this.localConfigs.column = {...column};\n }\n\n localConfigs: { column?: NubTableColumnConfig } = {};\n\n constructor(\n public injector: Injector,\n private viewContainerRef: ViewContainerRef\n ) {}\n\n ngOnInit(): void {\n const injectorControl = this.injector.get(NgControl);\n const cell = this.viewContainerRef.createComponent<any>(this.localConfigs.column?.filter?.component);\n\n injectorControl.valueAccessor = cell.instance;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n BehaviorSubject,\n debounceTime,\n filter,\n lastValueFrom,\n map,\n Observable,\n Subject,\n takeUntil,\n tap,\n} from 'rxjs';\nimport { NubTableCell, NubTableColumnConfig, NubTableConfig, NubTableRow } from '../../table.types';\nimport { FormControl, FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'nub-table',\n styleUrls: ['./table.component.css'],\n templateUrl: './table.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NubTableComponent implements OnInit, AfterViewInit, OnDestroy {\n @Input() set configs(configs: NubTableConfig) {\n this.setConfigs(configs);\n }\n\n @ViewChild('footerComponent', { read: ViewContainerRef }) footerComponent: any;\n\n localConfigs: NubTableConfig = {\n id: new Date().getTime(),\n sortOrder: {},\n columnOptions: [],\n footer: {\n configs: {\n page: 1,\n pageSize: 10,\n pageSizes: [5, 10, 20, 50, 100]\n }\n }\n };\n\n tableMatrix$: BehaviorSubject<NubTableRow[]> = new BehaviorSubject<NubTableRow[]>([]);\n obChangeWithData$: BehaviorSubject<any[] | undefined> = new BehaviorSubject<any[] | undefined>(undefined);\n\n txtSearch: FormControl = new FormControl();\n\n filterFormGroup: FormGroup = new FormGroup<any>({});\n\n private _unsubscribeAll: Subject<void> = new Subject<void>();\n\n constructor() { }\n\n ngOnInit(): void {\n this.obChangeWithData$\n .pipe(\n filter(data => data !== undefined),\n tap(data => this.buildTableMatrix(data ?? [])),\n map(value => value),\n )\n .subscribe();\n\n this.txtSearch.valueChanges.pipe(\n debounceTime(this.localConfigs.search?.debounceTime || 300),\n takeUntil(this._unsubscribeAll),\n ).subscribe(val => {\n if (this.localConfigs.search) {\n this.localConfigs.search.value = val;\n }\n this.refresh();\n });\n\n // Filter section\n this.localConfigs.columnOptions.forEach((col: NubTableColumnConfig) => {\n if (col.filter) {\n this.filterFormGroup.addControl(col.property, new FormControl(''));\n\n this.filterFormGroup.controls[col.property].valueChanges.pipe(\n debounceTime(col.filter.debounceTime || 300),\n takeUntil(this._unsubscribeAll),\n ).subscribe(() => {\n this.refresh();\n });\n }\n });\n\n this.refresh();\n }\n\n ngAfterViewInit(): void {\n if (this.localConfigs.footer?.component) {\n const viewContainerRef = this.footerComponent;\n viewContainerRef.clear();\n\n const footerComponent = viewContainerRef.createComponent(this.localConfigs.footer?.component);\n footerComponent.instance.configs = this.localConfigs.footer.configs || null;\n }\n }\n\n ngOnDestroy() {\n this._unsubscribeAll.next();\n this._unsubscribeAll.complete();\n }\n\n async refresh() {\n let data: any[] = [];\n let totalItems: number;\n if (!this.localConfigs.dataSource) {\n this.obChangeWithData$.next(data);\n }\n\n let dataSource;\n if (this.localConfigs.dataSource) {\n dataSource = this.localConfigs.dataSource(this.buildQueryParams(), this);\n }\n if (dataSource instanceof Promise) {\n ({ data, totalItems } = await dataSource);\n } else if (dataSource instanceof Observable) {\n ({ data, totalItems } = await lastValueFrom(dataSource));\n } else {\n ({ data, totalItems } = dataSource ?? { data: [], totalItems: 0 });\n }\n\n if (this.localConfigs.footer?.configs) {\n this.localConfigs.footer.configs.totalItems = totalItems;\n }\n\n this.obChangeWithData$.next(data);\n }\n\n buildQueryParams() {\n let queryParams = Object.create(null);\n\n if (this.localConfigs.search) {\n queryParams.search = this.localConfigs.search.value || '';\n }\n\n if (this.localConfigs.columnOptions.some(col => !!col.filter)) {\n queryParams.filter = this.filterFormGroup.getRawValue();\n }\n\n if (this.localConfigs.sortOrder) {\n queryParams.sort = this.localConfigs.sortOrder || {};\n }\n\n if (!this.localConfigs.footer?.component && this.localConfigs.footer?.configs) {\n Object.assign(queryParams, this.localConfigs.footer.configs);\n }\n\n if (this.localConfigs.mapQueryParams) {\n queryParams = this.localConfigs.mapQueryParams(queryParams);\n }\n\n return new URLSearchParams(queryParams).toString();\n }\n\n buildTableMatrix<T>(data: T[]) {\n const result: NubTableRow[] = [];\n\n for (const index in data) {\n // Build a row\n const row: NubTableRow = {\n id: `${this.localConfigs.id}-${index}`,\n data: data[index],\n columns: [],\n class: this.localConfigs.rowOptions?.class,\n metadata: this.localConfigs.rowOptions,\n };\n\n // Build a column in row (cell)\n const rowClone = Object.assign({}, row);\n delete rowClone.columns;\n for (const columnOption of this.localConfigs.columnOptions) {\n const col: NubTableCell = {\n cell: {\n title: columnOption.title,\n data: (data as any)[index][columnOption.property],\n },\n metadata: { ...columnOption, row: rowClone },\n };\n\n row.columns?.push(col);\n }\n\n result.push(row);\n }\n\n this.tableMatrix$.next(result);\n }\n\n onChangeSortType(col: NubTableColumnConfig) {\n const sortTypes = ['', 'asc', 'desc'];\n const idx = col.sort?.type ? sortTypes.findIndex(sortType => sortType === col.sort?.type) : 0;\n\n if (col.sort) {\n col.sort.type = sortTypes[idx + 1] || ('' as any);\n }\n this.localConfigs.sortOrder[col.property] = col.sort?.type;\n return this.refresh();\n }\n\n /*-------------------Paging section-----------------*/\n async setPageSize(): Promise<void> {\n await this.refresh();\n return this.goToPage(0);\n }\n\n goToPage(pageIndex: number): Promise<void> {\n if (this.localConfigs.footer?.configs) {\n this.localConfigs.footer.configs.page = pageIndex + 1;\n }\n return this.refresh();\n }\n /*---------------End Paging section ----------------*/\n\n private setConfigs(configs: NubTableConfig) {\n // Combine configs and local configs\n this.localConfigs = { ...this.localConfigs, ...configs };\n }\n}\n","\n\n<!-- Table Section -->\n<table>\n <caption *ngIf=\"localConfigs.caption\" [style.caption-side]=\"localConfigs.captionPosition\">{{localConfigs.caption}}</caption>\n\n <thead>\n <tr>\n <td\n *ngIf=\"localConfigs.search\"\n [attr.colspan]=\"localConfigs.columnOptions.length\"\n class=\"search-container\"\n [ngClass]=\"localConfigs.search.class\"\n >\n <!-- Search Section -->\n <label>\n {{ localConfigs.search.title }}\n <input\n type=\"text\"\n [title]=\"localConfigs.search.title\"\n [placeholder]=\"localConfigs.search.placeholder\"\n [formControl]=\"txtSearch\"\n />\n </label>\n </td>\n </tr>\n <tr [formGroup]=\"filterFormGroup\">\n <th class=\"title\" *ngFor=\"let col of localConfigs.columnOptions\">\n <div class=\"header-container\" (click)=\"!!col.sort && onChangeSortType(col)\">\n <span>{{ col.title }}</span>\n <span *ngIf=\"!!col.sort\" class=\"sorting\">\n <svg\n *ngIf=\"col.sort.type === 'asc'\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M19.5 8.25l-7.5 7.5-7.5-7.5\" />\n </svg>\n <svg\n *ngIf=\"col.sort.type === 'desc'\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 15.75l7.5-7.5 7.5 7.5\" />\n </svg>\n </span>\n </div>\n <div *ngIf=\"!!col.filter\" class=\"filtering\">\n <ng-container *ngIf=\"col.filter.component\">\n <nub-table-filter [column]=\"col\" [formControlName]=\"col.property\"></nub-table-filter>\n </ng-container>\n <ng-container *ngIf=\"!col.filter.component\">\n <input type=\"text\" [formControlName]=\"col.property\" />\n </ng-container>\n </div>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let row of tableMatrix$ | async\">\n <ng-container *ngFor=\"let column of row.columns\">\n <ng-container *ngIf=\"column.metadata['component']\">\n <nub-table-cell [cell]=\"column.cell\" [metadata]=\"column.metadata\"></nub-table-cell>\n </ng-container>\n <ng-container *ngIf=\"!column.metadata['component']\">\n <td>{{ column.cell['data'] }}</td>\n </ng-container>\n </ng-container>\n </tr>\n </tbody>\n <tfoot\n class=\"table-footer\"\n >\n <tr>\n <td\n [attr.colspan]=\"localConfigs.columnOptions.length\"\n >\n <ng-container *ngIf=\"!!localConfigs.footer?.component; else defaultFooter\" #footerComponent></ng-container>\n </td>\n </tr>\n </tfoot>\n</table>\n\n<ng-template #defaultFooter>\n <div class=\"footer-container\">\n <div class=\"settings\">\n <label>\n Items per page:\n <select [(ngModel)]=\"localConfigs.footer!.configs!.pageSize!\" (change)=\"setPageSize()\">\n <option *ngFor=\"let page of localConfigs.footer!.configs!.pageSizes\">\n <span>{{ page }}</span>\n </option>\n </select>\n </label>\n </div>\n <div class=\"pagination\">\n <div class=\"page-number\">\n {{(localConfigs.footer?.configs?.page! - 1) * localConfigs.footer?.configs?.pageSize! + 1}}\n -\n {{localConfigs.footer?.configs?.page! * localConfigs.footer?.configs?.pageSize!}}\n of\n {{localConfigs.footer?.configs?.totalItems}}\n </div>\n <div class=\"page-function\">\n <button type=\"button\" class=\"page-first\" (click)=\"goToPage(0)\"></button>\n <button type=\"button\" class=\"page-previous\" (click)=\"goToPage(localConfigs.footer?.configs?.page! > 1 ? localConfigs.footer?.configs?.page! - 2 : 0)\"></button>\n <button type=\"button\" class=\"page-next\" (click)=\"goToPage(localConfigs.footer?.configs?.page!)\"></button>\n <button type=\"button\" class=\"page-last\" (click)=\"goToPage(localConfigs.footer?.configs?.totalItems! / localConfigs.footer?.configs?.pageSize!)\"></button>\n </div>\n </div>\n </div>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NubTableComponent } from './component/table/table.component';\nimport { NubTableCellComponent } from './component/cell/cell.component';\nimport { NubFilterComponent } from './component/filter/filter.component';\nimport { NubUtilsModule } from 'ngx-ui-builder/utils';\n\n@NgModule({\n declarations: [\n NubTableComponent,\n NubTableCellComponent,\n NubFilterComponent,\n ],\n imports: [CommonModule, FormsModule, ReactiveFormsModule, NubUtilsModule],\n exports: [NubTableComponent],\n})\nexport class NubTableModule {}\n","/*\n * Public API Surface of table\n */\n\nexport * from './table.service';\nexport * from './component/table/table.component';\nexport * from './table.module';\nexport * from './table.types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.NubTableCellComponent","i4.NubFilterComponent"],"mappings":"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"}