@agentsmith.bgd/as-lib-generic-table 20.0.8 → 20.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,10 +12,10 @@ import * as i1 from '@angular/platform-browser';
12
12
 
13
13
  class AsLibGenericTableService {
14
14
  constructor() { }
15
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: AsLibGenericTableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: AsLibGenericTableService, providedIn: 'root' });
15
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AsLibGenericTableService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AsLibGenericTableService, providedIn: 'root' });
17
17
  }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: AsLibGenericTableService, decorators: [{
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AsLibGenericTableService, decorators: [{
19
19
  type: Injectable,
20
20
  args: [{
21
21
  providedIn: 'root'
@@ -28,10 +28,10 @@ class TooltipComponent {
28
28
  top = 0;
29
29
  constructor() { }
30
30
  ngOnInit() { }
31
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: TooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.0", type: TooltipComponent, isStandalone: true, selector: "tooltip", ngImport: i0, template: "<div [style.left]=\"left + 'px'\" [style.top]=\"top + 'px'\" class=\"my-tooltip\">\n\t{{ tooltip }}\n</div>\n", styles: [".my-tooltip{position:fixed;background-color:#000;border-radius:4px;color:#fff;font-family:Arial,serif;padding:3px 6px;font-size:13px;margin-top:5px;transform:translate(-50%)}.my-tooltip:before{content:\"\";width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid black;position:absolute;left:calc(50% - 5px);top:-5px}\n"] });
31
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: TooltipComponent, isStandalone: true, selector: "tooltip", ngImport: i0, template: "<div [style.left]=\"left + 'px'\" [style.top]=\"top + 'px'\" class=\"my-tooltip\">\n\t{{ tooltip }}\n</div>\n", styles: [".my-tooltip{position:fixed;background-color:#000;border-radius:4px;color:#fff;font-family:Arial,serif;padding:3px 6px;font-size:13px;margin-top:5px;transform:translate(-50%)}.my-tooltip:before{content:\"\";width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid black;position:absolute;left:calc(50% - 5px);top:-5px}\n"] });
33
33
  }
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: TooltipComponent, decorators: [{
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipComponent, decorators: [{
35
35
  type: Component,
36
36
  args: [{ selector: 'tooltip', standalone: true, template: "<div [style.left]=\"left + 'px'\" [style.top]=\"top + 'px'\" class=\"my-tooltip\">\n\t{{ tooltip }}\n</div>\n", styles: [".my-tooltip{position:fixed;background-color:#000;border-radius:4px;color:#fff;font-family:Arial,serif;padding:3px 6px;font-size:13px;margin-top:5px;transform:translate(-50%)}.my-tooltip:before{content:\"\";width:0;height:0;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid black;position:absolute;left:calc(50% - 5px);top:-5px}\n"] }]
37
37
  }], ctorParameters: () => [] });
@@ -75,10 +75,10 @@ class TooltipDirective {
75
75
  this.componentRef.instance.top = bottom;
76
76
  }
77
77
  }
78
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: TooltipDirective, deps: [{ token: i0.ElementRef }, { token: i0.ApplicationRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
79
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.0", type: TooltipDirective, isStandalone: true, selector: "[tooltip]", inputs: { tooltip: "tooltip" }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, ngImport: i0 });
78
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipDirective, deps: [{ token: i0.ElementRef }, { token: i0.ApplicationRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
79
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.16", type: TooltipDirective, isStandalone: true, selector: "[tooltip]", inputs: { tooltip: "tooltip" }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, ngImport: i0 });
80
80
  }
81
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: TooltipDirective, decorators: [{
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TooltipDirective, decorators: [{
82
82
  type: Directive,
83
83
  args: [{
84
84
  selector: '[tooltip]',
@@ -128,10 +128,10 @@ class VisibleRowActionPipe {
128
128
  return false;
129
129
  }
130
130
  }
131
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: VisibleRowActionPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
132
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.0", ngImport: i0, type: VisibleRowActionPipe, isStandalone: true, name: "visibleRowAction" });
131
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: VisibleRowActionPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
132
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: VisibleRowActionPipe, isStandalone: true, name: "visibleRowAction" });
133
133
  }
134
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: VisibleRowActionPipe, decorators: [{
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: VisibleRowActionPipe, decorators: [{
135
135
  type: Pipe,
136
136
  args: [{
137
137
  name: 'visibleRowAction'
@@ -153,10 +153,10 @@ class SafeLimitedHtmlPipe {
153
153
  const sanitized = value.replace(pattern, '');
154
154
  return this.sanitizer.bypassSecurityTrustHtml(sanitized);
155
155
  }
156
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: SafeLimitedHtmlPipe, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
157
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.2.0", ngImport: i0, type: SafeLimitedHtmlPipe, isStandalone: true, name: "safeLimitedHtml" });
156
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SafeLimitedHtmlPipe, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
157
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: SafeLimitedHtmlPipe, isStandalone: true, name: "safeLimitedHtml" });
158
158
  }
159
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: SafeLimitedHtmlPipe, decorators: [{
159
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SafeLimitedHtmlPipe, decorators: [{
160
160
  type: Pipe,
161
161
  args: [{ name: 'safeLimitedHtml' }]
162
162
  }], ctorParameters: () => [{ type: i1.DomSanitizer }] });
@@ -180,10 +180,10 @@ class UnwrapTagDirective {
180
180
  // remove the empty element
181
181
  parent.removeChild(this.el.nativeElement);
182
182
  }
183
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: UnwrapTagDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
184
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.0", type: UnwrapTagDirective, isStandalone: true, selector: "[appUnwraptag]", inputs: { appUnwraptag: "appUnwraptag" }, ngImport: i0 });
183
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UnwrapTagDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
184
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.16", type: UnwrapTagDirective, isStandalone: true, selector: "[appUnwraptag]", inputs: { appUnwraptag: "appUnwraptag" }, ngImport: i0 });
185
185
  }
186
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: UnwrapTagDirective, decorators: [{
186
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UnwrapTagDirective, decorators: [{
187
187
  type: Directive,
188
188
  args: [{
189
189
  selector: '[appUnwraptag]',
@@ -272,6 +272,7 @@ class AsLibGenericTableComponent {
272
272
  searchString = input(...(ngDevMode ? [undefined, { debugName: "searchString" }] : []));
273
273
  sort = input('name', ...(ngDevMode ? [{ debugName: "sort" }] : []));
274
274
  order = input('asc', ...(ngDevMode ? [{ debugName: "order" }] : []));
275
+ formSubmitLabel = input('SAVE', ...(ngDevMode ? [{ debugName: "formSubmitLabel" }] : []));
275
276
  availableTranslations = {
276
277
  en: EN_TRANSLATIONS,
277
278
  cn: CN_TRANSLATIONS,
@@ -299,6 +300,7 @@ class AsLibGenericTableComponent {
299
300
  modalService = inject(BsModalService);
300
301
  deepLinkDone = false;
301
302
  inputTypeKey;
303
+ checkboxTypeKey;
302
304
  constructor(language$) {
303
305
  this.language$ = language$;
304
306
  this.translations = this.availableTranslations['en'];
@@ -314,6 +316,7 @@ class AsLibGenericTableComponent {
314
316
  this.init();
315
317
  this.deepLink();
316
318
  this.inputTypeKey = this.tableHead().find(t => t.type === 'input')?.key || '';
319
+ this.checkboxTypeKey = this.tableHead().find(t => t.type === 'checkbox')?.key || '';
317
320
  (language$ || of('en')).subscribe((language) => {
318
321
  this.currentLanguage = language;
319
322
  this.log('Language changed to:', language);
@@ -556,10 +559,26 @@ class AsLibGenericTableComponent {
556
559
  return this.shouldApplyRule(targetValue, visibilityRule.rule, visibilityRule.value);
557
560
  }
558
561
  pushInputValues() {
559
- const forEmit = this.tableData().map(row => ({
560
- id: row['id'],
561
- value: row[this.inputTypeKey]
562
- }));
562
+ let forEmit = [];
563
+ if (this.inputTypeKey) {
564
+ const forEmit1 = this.tableData().map(row => ({
565
+ id: row['id'],
566
+ value: row[this.inputTypeKey],
567
+ key: this.inputTypeKey
568
+ }));
569
+ forEmit = [...forEmit1];
570
+ }
571
+ if (this.checkboxTypeKey) {
572
+ const forEmit1 = this.tableData().map(row => {
573
+ this.log('pushInputRow', row);
574
+ return {
575
+ id: row['id'],
576
+ value: !!row[this.checkboxTypeKey],
577
+ key: this.checkboxTypeKey,
578
+ };
579
+ });
580
+ forEmit = [...forEmit, ...forEmit1];
581
+ }
563
582
  this.log('for emit', forEmit);
564
583
  this.pushedInputValues.emit(forEmit);
565
584
  }
@@ -569,10 +588,10 @@ class AsLibGenericTableComponent {
569
588
  }
570
589
  return key;
571
590
  }
572
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: AsLibGenericTableComponent, deps: [{ token: LANG_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Component });
573
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.0", type: AsLibGenericTableComponent, isStandalone: true, selector: "as-lib-generic-table", inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, striped: { classPropertyName: "striped", publicName: "striped", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, hovered: { classPropertyName: "hovered", publicName: "hovered", isSignal: true, isRequired: false, transformFunction: null }, enableSearch: { classPropertyName: "enableSearch", publicName: "enableSearch", isSignal: true, isRequired: false, transformFunction: null }, rowCounter: { classPropertyName: "rowCounter", publicName: "rowCounter", isSignal: true, isRequired: false, transformFunction: null }, enableLog: { classPropertyName: "enableLog", publicName: "enableLog", isSignal: true, isRequired: false, transformFunction: null }, perPage: { classPropertyName: "perPage", publicName: "perPage", isSignal: true, isRequired: false, transformFunction: null }, tableHead: { classPropertyName: "tableHead", publicName: "tableHead", isSignal: true, isRequired: false, transformFunction: null }, tableData: { classPropertyName: "tableData", publicName: "tableData", isSignal: true, isRequired: false, transformFunction: null }, tableHeadStorage: { classPropertyName: "tableHeadStorage", publicName: "tableHeadStorage", isSignal: true, isRequired: false, transformFunction: null }, perPageValues: { classPropertyName: "perPageValues", publicName: "perPageValues", isSignal: true, isRequired: false, transformFunction: null }, headerActions: { classPropertyName: "headerActions", publicName: "headerActions", isSignal: true, isRequired: false, transformFunction: null }, rowActions: { classPropertyName: "rowActions", publicName: "rowActions", isSignal: true, isRequired: false, transformFunction: null }, tableStyle: { classPropertyName: "tableStyle", publicName: "tableStyle", isSignal: true, isRequired: false, transformFunction: null }, headStyle: { classPropertyName: "headStyle", publicName: "headStyle", isSignal: true, isRequired: false, transformFunction: null }, paginationAlignment: { classPropertyName: "paginationAlignment", publicName: "paginationAlignment", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, selectableKey: { classPropertyName: "selectableKey", publicName: "selectableKey", isSignal: true, isRequired: false, transformFunction: null }, selectableClass: { classPropertyName: "selectableClass", publicName: "selectableClass", isSignal: true, isRequired: false, transformFunction: null }, searchString: { classPropertyName: "searchString", publicName: "searchString", isSignal: true, isRequired: false, transformFunction: null }, sort: { classPropertyName: "sort", publicName: "sort", isSignal: true, isRequired: false, transformFunction: null }, order: { classPropertyName: "order", publicName: "order", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterParamsChanged: "filterParamsChanged", editRow: "editRow", sliderClicked: "sliderClicked", headerActionClicked: "headerActionClicked", rowActionClicked: "rowActionClicked", tableHeadChanged: "tableHeadChanged", pushedInputValues: "pushedInputValues" }, providers: [BsModalService], ngImport: i0, template: "<div\n class=\"dynamic-table\"\n>\n @if (loading()) {\n <p class=\"position-absolute text-center d-block w-100 opacity-100\">\n <i class=\"fa fa-spinner fa-spin fa-3x text-primary mt-5 opacity-100\"></i>\n </p>\n }\n <div class=\"row mb-3 mx-0\"\n [appUnwraptag]=\"(!perPageValues() || perPageValues().length < 2) && (!headerActions() || !headerActions().length) && !enableSearch()\"\n [ngClass]=\"{\n\t\tloading: loading()\n\t}\">\n <div class=\"col-md-7 d-flex d-sm-flex d-md-block justify-content-center mb-2\"\n [appUnwraptag]=\"(!perPageValues() || perPageValues().length < 2) && (!headerActions() || !headerActions().length) && !enableSearch()\">\n @if (perPageValues() && perPageValues().length > 1) {\n <div class=\"d-block d-md-inline-flex me-0 me-md-3\">\n <div class=\"table-length\">\n <label\n >{{ translate('SHOW') }}\n <select\n (change)=\"changePerPage($event)\"\n aria-controls=\"data-table-combine\"\n class=\"form-select form-select-sm\"\n name=\"data-table-combine_length\"\n >\n @for (perp of perPageValues(); track perp) {\n <option [selected]=\"perPage() === perp\"\n value=\"{{ perp }}\">{{ perp }}\n </option>\n }\n </select>\n {{ translate('ENTRIES') }}</label\n >\n </div>\n </div>\n }\n @if (headerActions() && headerActions().length) {\n <div class=\"d-block d-inline-flex\" [ngClass]=\"{\n 'mb-2': (!perPageValues() || perPageValues().length < 2) && !enableSearch()\n }\">\n <div class=\"dt-buttons btn-group flex-wrap\">\n @for (action of headerActions(); track action.actionName + $index) {\n <button\n (click)=\"headerAction(action.actionName)\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm {{ action.actionName }} {{ action.btnColor }}\"\n id=\"header-action-{{ action.actionName }}\"\n type=\"button\"\n >\n <span>\n @if (action.faIcon) {\n <i class=\"fa {{ action.faIcon }}\"></i>\n }\n {{ action.label }}\n </span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n @if (enableSearch()) {\n <div class=\"col-md-5 d-flex d-xl-block justify-content-center\">\n <div class=\"table-search\">\n <label\n > {{ translate('SEARCH') }}:\n <input\n (ngModelChange)=\"this.searchUpdate.next($event)\"\n [(ngModel)]=\"search\"\n aria-controls=\"data-table-combine\"\n class=\"form-control form-control-sm\"\n id=\"table-search\"\n placeholder=\"\"\n type=\"search\"\n /></label>\n </div>\n </div>\n }\n </div>\n <div class=\"table-responsive\" [ngClass]=\"{\n\t\tloading: loading()\n\t}\">\n <table\n [ngClass]=\"{\n\t\t\t\t'table-striped': striped(),\n\t\t\t\t'table-bordered': bordered(),\n\t\t\t\t'table-hover': hovered()\n\t\t\t}\"\n class=\"table table-fixed align-middle {{ tableStyle() }}\"\n >\n <thead [class]=\"headStyle()\">\n <tr>\n @if (rowCounter()) {\n <th class=\"text-end small-column\"> {{ translate('NR') }}</th>\n }\n @for (head of tableHead(); track head.key) {\n @if (!head.hidden) {\n <th\n (click)=\"!head.notSortable && tableSort(head.key)\"\n [ngClass]=\"head.sort\"\n class=\"header {{ head.notSortable ? '' : 'sortable' }} {{ head.cellAlign }}\"\n >\n <div>\n <span [translate]=\"head.key.toUpperCase()\">{{ head.label || head.key }}</span>\n @if (!head.notSortable) {\n <span class=\"fa\"></span>\n }\n </div>\n </th>\n }\n }\n @if (tableHeadStorage() || (rowActions() && rowActions().length)) {\n <th\n class=\"header small-column text-center p-0\" data-width=\"50\">\n @if (tableHeadStorage()) {\n <a\n (click)=\"openTableLayoutModal(tableHeadModal)\"\n aria-controls=\"basic-link-dropdown\"\n class=\"menu-button toggle-white big-toggle dropdown-menu-link\"\n ></a>\n }\n </th>\n }\n </tr>\n </thead>\n\n @if (tableData().length) {\n <tbody>\n @for (row of tableData(); track row['id'] || $index) {\n <tr class=\"{{ row['rowClass'] || '' }}\"\n (click)=\"onRowClick(row, $event)\"\n [className]=\"selectableClickedValue === row[selectableKey()] ? selectableClass() : ''\"\n [attr.data-id]=\"row['id']\">\n @if (rowCounter()) {\n <th class=\"text-end\"> {{ $index + counter }}.</th>\n }\n @for (head of tableHead(); track head.key) {\n @if (!head.hidden) {\n <td [attr.data-column]=\"head.key\" class=\"header text-nowrap {{ head.cellAlign }}\">\n @if (head.type === 'select') {\n <input class=\"select\" type=\"checkbox\"/>\n }\n @if (!head.type) {\n {{ row[head.key] }}\n }\n @if (head.type === 'html') {\n <span [innerHTML]=\"row[head.key] | safeLimitedHtml\"></span>\n }\n @if (head.type === 'badge') {\n <span class=\"badge {{ row[head.key + 'Badge'] }}\">{{ row[head.key] }}</span>\n }\n @if (head.type === 'date') {\n {{ row[head.key] | date: head.dateFormat ? head.dateFormat : \"dd.MM.yyyy\" }}\n }\n @if (head.type === 'datetime') {\n {{ row[head.key] | date: head.dateFormat ? head.dateFormat : \"dd.MM.yyyy HH:mm:ss\" }}\n }\n @if (head.type === 'image') {\n @if (row[head.key] && row[head.key] !== '') {\n <img alt=\"img\" [attr.src]=\"row[head.key]\"\n width=\"{{head?.imageSize?.width || 50}}\" height=\"{{head?.imageSize?.height || 50}}\"/>\n }\n }\n @if (head.type === 'url') {\n <a [attr.href]=\"row[head.key]\" target=\"{{head?.urlTarget || '_blank'}}\">{{ row[head.key] }}</a>\n }\n @if (head.type === 'slider') {\n <div class=\"form-check form-switch\">\n <input\n (change)=\"sliderClicked.emit(row)\"\n [checked]=\"row[head.key]\"\n class=\"switched\"\n id=\"check-{{ row['id'] }}\"\n type=\"checkbox\"\n value=\"true\"\n />\n <label for=\"check-{{ row['id'] }}\"></label>\n </div>\n }\n\n @if (head.type === 'input') {\n <input [(ngModel)]=\"row[head.key]\" type=\"text\" name=\"input_{{row['id']}}\"/>\n }\n </td>\n }\n }\n @if (tableHeadStorage() || (rowActions() && rowActions().length)) {\n <td class=\"small-column\">\n <div class=\"menu text-end\">\n @for (action of rowActions(); track (action.label || '') + '_' + $index) {\n @if (row | visibleRowAction: action.visibilityRule : enableLog()) {\n <button\n (click)=\"rowAction(action.actionName, row, $event)\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n tooltip=\"{{ action.label }}\"\n type=\"button\"\n >\n <span><i class=\"fa {{ action.faIcon }}\"></i></span>\n </button>\n } @else if (action.visibilityRule?.disabled) {\n <button\n [disabled]=\"true\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n tooltip=\"{{ action.label }}\"\n type=\"button\"\n >\n <span><i class=\"fa {{ action.faIcon }}\"></i></span>\n </button>\n }\n }\n </div>\n </td>\n }\n </tr>\n }\n @if (inputTypeKey) {\n <tr>\n <td\n [colSpan]=\"tableHead().length - 1 + (rowCounter() ? 1 : 0) + ((tableHeadStorage() || (rowActions() && rowActions().length) ) ? 1 : 0)\">\n <button (click)=\"pushInputValues()\" class=\"btn buttons-copy buttons-html5 btn-sm ms-2 btn-secondary\">\n Save\n </button>\n </td>\n </tr>\n }\n </tbody>\n } @else {\n <tbody>\n <tr>\n <td\n [colSpan]=\"tableHead().length - 1 + (rowCounter() ? 1 : 0) + ((tableHeadStorage() || (rowActions() && rowActions().length) ) ? 1 : 0)\">\n <div class=\"alert alert-light\" role=\"alert\">\n <i class=\"fa fa-exclamation-triangle\"></i> {{ translate('NO_DATA_FOUND') }}\n </div>\n </td>\n </tr>\n </tbody>\n }\n </table>\n\n </div>\n @if (totalPages > 1) {\n <as-lib-pagination\n (pageChange)=\"pageChange($event)\"\n [align]=\"paginationAlignment()\"\n [enableLog]=\"enableLog()\"\n [first]=\"page() === 0\"\n [last]=\"page() === totalPages - 1\"\n [page]=\"page()\"\n [totalPages]=\"totalPages\"\n ></as-lib-pagination>\n }\n <ng-template #tableHeadModal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ translate('EDIT_TABLE_HEADER') }}</h4>\n <button (click)=\"modalClose()\" aria-label=\"Close\" class=\"btn-close close pull-right\" type=\"button\">\n <span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n @for (td of tableHead(); track td.key) {\n <div class=\"form-check form-switch\">\n <input\n (change)=\"handleTHchange(td.key)\"\n [checked]=\"!td.hidden\"\n [disabled]=\"td.mandatory\"\n [readOnly]=\"td.mandatory\"\n class=\"form-check-input\"\n id=\"{{ td.key }}\"\n role=\"switch\"\n type=\"checkbox\"\n value=\"true\"\n />\n <label class=\"form-check-label\" for=\"{{ td.key }}\">{{ td.label }} {{ td.mandatory ? \"*\" : \"\" }}</label>\n </div>\n }\n <small class=\"small text-muted pt-2\">* {{ translate('MANDATORY_FIELDS') }}</small>\n </div>\n <div class=\"modal-footer\">\n <button (click)=\"resetValues()\" class=\"btn btn-outline-secondary me-auto\" type=\"button\">{{ translate('RESET') }}\n </button>\n <button (click)=\"modalClose()\" class=\"btn btn-primary\" type=\"button\">{{ translate('SAVE') }}</button>\n </div>\n </ng-template>\n</div>\n", styles: [".dropdown-holder{min-height:20px}.dynamic-table,.dynamic-table button,span.badge{font-size:12px;font-weight:400}.table-length label{display:inline-block;white-space:nowrap}.table-length select{display:inline-block;width:auto}.table-search{text-align:right}.table-search label{display:inline-block;white-space:nowrap}.table-search input{display:inline-block;width:auto}th.sortable div{display:flex;align-items:center;cursor:pointer}th.sortable div span:not(.fa){flex:1}th.sortable div span.fa{display:block}th.sortable div span.fa:after{content:\"\\f0dc\";opacity:.25}th.sortable.headerSortDown span.fa.fa:after{color:#348fe2;content:\"\\f0dd\";opacity:1}th.sortable.headerSortUp span.fa.fa:after{color:#348fe2;content:\"\\f0de\";opacity:1}.menu-button{border-radius:50%;width:24px;height:24px;display:inline-block;position:relative;cursor:pointer}.menu-button:after{content:\"\";background-image:radial-gradient(circle,black 2px,transparent 2px);background-size:100% 33.33%;width:18px;height:18px;display:block;top:3px;left:3px;position:absolute}.menu-button:hover{background:#4e4e4e26}.menu-button.menu-horizontal:after{background-size:33.33% 100%}.small-column{white-space:nowrap;width:1%}.loading{opacity:.3}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: TooltipDirective, selector: "[tooltip]", inputs: ["tooltip"] }, { kind: "component", type: AsLibPaginationComponent, selector: "as-lib-pagination", inputs: ["first", "last", "align", "enableLog", "totalPages", "page"], outputs: ["pageChange"] }, { kind: "directive", type: UnwrapTagDirective, selector: "[appUnwraptag]", inputs: ["appUnwraptag"] }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "pipe", type: VisibleRowActionPipe, name: "visibleRowAction" }, { kind: "pipe", type: SafeLimitedHtmlPipe, name: "safeLimitedHtml" }] });
591
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AsLibGenericTableComponent, deps: [{ token: LANG_TABLE, optional: true }], target: i0.ɵɵFactoryTarget.Component });
592
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AsLibGenericTableComponent, isStandalone: true, selector: "as-lib-generic-table", inputs: { loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, striped: { classPropertyName: "striped", publicName: "striped", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, hovered: { classPropertyName: "hovered", publicName: "hovered", isSignal: true, isRequired: false, transformFunction: null }, enableSearch: { classPropertyName: "enableSearch", publicName: "enableSearch", isSignal: true, isRequired: false, transformFunction: null }, rowCounter: { classPropertyName: "rowCounter", publicName: "rowCounter", isSignal: true, isRequired: false, transformFunction: null }, enableLog: { classPropertyName: "enableLog", publicName: "enableLog", isSignal: true, isRequired: false, transformFunction: null }, perPage: { classPropertyName: "perPage", publicName: "perPage", isSignal: true, isRequired: false, transformFunction: null }, tableHead: { classPropertyName: "tableHead", publicName: "tableHead", isSignal: true, isRequired: false, transformFunction: null }, tableData: { classPropertyName: "tableData", publicName: "tableData", isSignal: true, isRequired: false, transformFunction: null }, tableHeadStorage: { classPropertyName: "tableHeadStorage", publicName: "tableHeadStorage", isSignal: true, isRequired: false, transformFunction: null }, perPageValues: { classPropertyName: "perPageValues", publicName: "perPageValues", isSignal: true, isRequired: false, transformFunction: null }, headerActions: { classPropertyName: "headerActions", publicName: "headerActions", isSignal: true, isRequired: false, transformFunction: null }, rowActions: { classPropertyName: "rowActions", publicName: "rowActions", isSignal: true, isRequired: false, transformFunction: null }, tableStyle: { classPropertyName: "tableStyle", publicName: "tableStyle", isSignal: true, isRequired: false, transformFunction: null }, headStyle: { classPropertyName: "headStyle", publicName: "headStyle", isSignal: true, isRequired: false, transformFunction: null }, paginationAlignment: { classPropertyName: "paginationAlignment", publicName: "paginationAlignment", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, selectableKey: { classPropertyName: "selectableKey", publicName: "selectableKey", isSignal: true, isRequired: false, transformFunction: null }, selectableClass: { classPropertyName: "selectableClass", publicName: "selectableClass", isSignal: true, isRequired: false, transformFunction: null }, searchString: { classPropertyName: "searchString", publicName: "searchString", isSignal: true, isRequired: false, transformFunction: null }, sort: { classPropertyName: "sort", publicName: "sort", isSignal: true, isRequired: false, transformFunction: null }, order: { classPropertyName: "order", publicName: "order", isSignal: true, isRequired: false, transformFunction: null }, formSubmitLabel: { classPropertyName: "formSubmitLabel", publicName: "formSubmitLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterParamsChanged: "filterParamsChanged", editRow: "editRow", sliderClicked: "sliderClicked", headerActionClicked: "headerActionClicked", rowActionClicked: "rowActionClicked", tableHeadChanged: "tableHeadChanged", pushedInputValues: "pushedInputValues" }, providers: [BsModalService], ngImport: i0, template: "<div\n class=\"dynamic-table\"\n>\n @if (loading()) {\n <p class=\"position-absolute text-center d-block w-100 opacity-100\">\n <i class=\"fa fa-spinner fa-spin fa-3x text-primary mt-5 opacity-100\"></i>\n </p>\n }\n <div class=\"row mb-3 mx-0\"\n [appUnwraptag]=\"(!perPageValues() || perPageValues().length < 2) && (!headerActions() || !headerActions().length) && !enableSearch()\"\n [ngClass]=\"{\n\t\tloading: loading()\n\t}\">\n <div class=\"col-md-7 d-flex d-sm-flex d-md-block justify-content-center mb-2\"\n [appUnwraptag]=\"(!perPageValues() || perPageValues().length < 2) && (!headerActions() || !headerActions().length) && !enableSearch()\">\n @if (perPageValues() && perPageValues().length > 1) {\n <div class=\"d-block d-md-inline-flex me-0 me-md-3\">\n <div class=\"table-length\">\n <label\n >{{ translate('SHOW') }}\n <select\n (change)=\"changePerPage($event)\"\n aria-controls=\"data-table-combine\"\n class=\"form-select form-select-sm\"\n name=\"data-table-combine_length\"\n >\n @for (perp of perPageValues(); track perp) {\n <option [selected]=\"perPage() === perp\"\n value=\"{{ perp }}\">{{ perp }}\n </option>\n }\n </select>\n {{ translate('ENTRIES') }}</label\n >\n </div>\n </div>\n }\n @if (headerActions() && headerActions().length) {\n <div class=\"d-block d-inline-flex\" [ngClass]=\"{\n 'mb-2': (!perPageValues() || perPageValues().length < 2) && !enableSearch()\n }\">\n <div class=\"dt-buttons btn-group flex-wrap\">\n @for (action of headerActions(); track action.actionName + $index) {\n <button\n (click)=\"headerAction(action.actionName)\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm {{ action.actionName }} {{ action.btnColor }}\"\n id=\"header-action-{{ action.actionName }}\"\n type=\"button\"\n >\n <span>\n @if (action.faIcon) {\n <i class=\"fa {{ action.faIcon }}\"></i>\n }\n {{ action.label }}\n </span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n @if (enableSearch()) {\n <div class=\"col-md-5 d-flex d-xl-block justify-content-center\">\n <div class=\"table-search\">\n <label\n > {{ translate('SEARCH') }}:\n <input\n (ngModelChange)=\"this.searchUpdate.next($event)\"\n [(ngModel)]=\"search\"\n aria-controls=\"data-table-combine\"\n class=\"form-control form-control-sm\"\n id=\"table-search\"\n placeholder=\"\"\n type=\"search\"\n /></label>\n </div>\n </div>\n }\n </div>\n <div class=\"table-responsive\" [ngClass]=\"{\n\t\tloading: loading()\n\t}\">\n <table\n [ngClass]=\"{\n\t\t\t\t'table-striped': striped(),\n\t\t\t\t'table-bordered': bordered(),\n\t\t\t\t'table-hover': hovered()\n\t\t\t}\"\n class=\"table table-fixed align-middle {{ tableStyle() }}\"\n >\n <thead [class]=\"headStyle()\">\n <tr>\n @if (rowCounter()) {\n <th class=\"text-end small-column\"> {{ translate('NR') }}</th>\n }\n @for (head of tableHead(); track head.key) {\n @if (!head.hidden) {\n <th\n (click)=\"!head.notSortable && tableSort(head.key)\"\n [ngClass]=\"head.sort\"\n class=\"header {{ head.notSortable ? '' : 'sortable' }} {{ head.cellAlign }}\"\n >\n <div>\n <span [translate]=\"head.key.toUpperCase()\">{{ head.label || head.key }}</span>\n @if (!head.notSortable) {\n <span class=\"fa\"></span>\n }\n </div>\n </th>\n }\n }\n @if (tableHeadStorage() || (rowActions() && rowActions().length)) {\n <th\n class=\"header small-column text-center p-0\" data-width=\"50\">\n @if (tableHeadStorage()) {\n <a\n (click)=\"openTableLayoutModal(tableHeadModal)\"\n aria-controls=\"basic-link-dropdown\"\n class=\"menu-button toggle-white big-toggle dropdown-menu-link\"\n ></a>\n }\n </th>\n }\n </tr>\n </thead>\n\n @if (tableData().length) {\n <tbody>\n @for (row of tableData(); track row['id'] || $index) {\n <tr class=\"{{ row['rowClass'] || '' }}\"\n (click)=\"onRowClick(row, $event)\"\n [className]=\"selectableClickedValue === row[selectableKey()] ? selectableClass() : ''\"\n [attr.data-id]=\"row['id']\">\n @if (rowCounter()) {\n <th class=\"text-end\"> {{ $index + counter }}.</th>\n }\n @for (head of tableHead(); track head.key) {\n @if (!head.hidden) {\n <td [attr.data-column]=\"head.key\" class=\"header text-nowrap {{ head.cellAlign }}\">\n @if (head.type === 'checkbox') {\n @if (row | visibleRowAction: head.visibilityFieldRule : enableLog()) {\n <input class=\"select\" [(ngModel)]=\"row[head.key]\" name=\"checkbox_{{row['id']}}\" type=\"checkbox\"/>\n } @else if (head.visibilityFieldRule?.disabled) {\n <input class=\"select\" [disabled]=\"true\" [(ngModel)]=\"row[head.key]\" name=\"checkbox_{{row['id']}}\" type=\"checkbox\"/>\n }\n }\n @if (!head.type) {\n {{ row[head.key] }}\n }\n @if (head.type === 'html') {\n <span [innerHTML]=\"row[head.key] | safeLimitedHtml\"></span>\n }\n @if (head.type === 'badge') {\n <span class=\"badge {{ row[head.key + 'Badge'] }}\">{{ row[head.key] }}</span>\n }\n @if (head.type === 'date') {\n {{ row[head.key] | date: head.dateFormat ? head.dateFormat : \"dd.MM.yyyy\" }}\n }\n @if (head.type === 'datetime') {\n {{ row[head.key] | date: head.dateFormat ? head.dateFormat : \"dd.MM.yyyy HH:mm:ss\" }}\n }\n @if (head.type === 'image') {\n @if (row[head.key] && row[head.key] !== '') {\n <img alt=\"img\" [attr.src]=\"row[head.key]\"\n width=\"{{head?.imageSize?.width || 50}}\" height=\"{{head?.imageSize?.height || 50}}\"/>\n }\n }\n @if (head.type === 'url') {\n <a [attr.href]=\"row[head.key]\" target=\"{{head?.urlTarget || '_blank'}}\">{{ row[head.key] }}</a>\n }\n @if (head.type === 'slider') {\n <div class=\"form-check form-switch\">\n <input\n (change)=\"sliderClicked.emit(row)\"\n [checked]=\"row[head.key]\"\n class=\"switched\"\n id=\"check-{{ row['id'] }}\"\n type=\"checkbox\"\n value=\"true\"\n />\n <label for=\"check-{{ row['id'] }}\"></label>\n </div>\n }\n\n @if (head.type === 'input') {\n <input [(ngModel)]=\"row[head.key]\" type=\"text\" name=\"input_{{row['id']}}\"/>\n }\n </td>\n }\n }\n @if (tableHeadStorage() || (rowActions() && rowActions().length)) {\n <td class=\"small-column\">\n <div class=\"menu text-end\">\n @for (action of rowActions(); track (action.label || '') + '_' + $index) {\n @if (row | visibleRowAction: action.visibilityRule : enableLog()) {\n <button\n (click)=\"rowAction(action.actionName, row, $event)\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n tooltip=\"{{ action.label }}\"\n type=\"button\"\n >\n <span><i class=\"fa {{ action.faIcon }}\"></i></span>\n </button>\n } @else if (action.visibilityRule?.disabled) {\n <button\n [disabled]=\"true\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n tooltip=\"{{ action.label }}\"\n type=\"button\"\n >\n <span><i class=\"fa {{ action.faIcon }}\"></i></span>\n </button>\n }\n }\n </div>\n </td>\n }\n </tr>\n }\n @if (inputTypeKey || checkboxTypeKey) {\n <tr>\n <td\n [colSpan]=\"tableHead().length - 1 + (rowCounter() ? 1 : 0) + ((tableHeadStorage() || (rowActions() && rowActions().length) ) ? 1 : 0)\">\n <button (click)=\"pushInputValues()\" class=\"btn buttons-copy buttons-html5 btn-sm ms-2 btn-secondary\">\n {{ translate(formSubmitLabel()) }}\n </button>\n </td>\n </tr>\n }\n </tbody>\n } @else {\n <tbody>\n <tr>\n <td\n [colSpan]=\"tableHead().length - 1 + (rowCounter() ? 1 : 0) + ((tableHeadStorage() || (rowActions() && rowActions().length) ) ? 1 : 0)\">\n <div class=\"alert alert-light\" role=\"alert\">\n <i class=\"fa fa-exclamation-triangle\"></i> {{ translate('NO_DATA_FOUND') }}\n </div>\n </td>\n </tr>\n </tbody>\n }\n </table>\n\n </div>\n @if (totalPages > 1) {\n <as-lib-pagination\n (pageChange)=\"pageChange($event)\"\n [align]=\"paginationAlignment()\"\n [enableLog]=\"enableLog()\"\n [first]=\"page() === 0\"\n [last]=\"page() === totalPages - 1\"\n [page]=\"page()\"\n [totalPages]=\"totalPages\"\n ></as-lib-pagination>\n }\n <ng-template #tableHeadModal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ translate('EDIT_TABLE_HEADER') }}</h4>\n <button (click)=\"modalClose()\" aria-label=\"Close\" class=\"btn-close close pull-right\" type=\"button\">\n <span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n @for (td of tableHead(); track td.key) {\n <div class=\"form-check form-switch\">\n <input\n (change)=\"handleTHchange(td.key)\"\n [checked]=\"!td.hidden\"\n [disabled]=\"td.mandatory\"\n [readOnly]=\"td.mandatory\"\n class=\"form-check-input\"\n id=\"{{ td.key }}\"\n role=\"switch\"\n type=\"checkbox\"\n value=\"true\"\n />\n <label class=\"form-check-label\" for=\"{{ td.key }}\">{{ td.label }} {{ td.mandatory ? \"*\" : \"\" }}</label>\n </div>\n }\n <small class=\"small text-muted pt-2\">* {{ translate('MANDATORY_FIELDS') }}</small>\n </div>\n <div class=\"modal-footer\">\n <button (click)=\"resetValues()\" class=\"btn btn-outline-secondary me-auto\" type=\"button\">{{ translate('RESET') }}\n </button>\n <button (click)=\"modalClose()\" class=\"btn btn-primary\" type=\"button\">{{ translate('SAVE') }}</button>\n </div>\n </ng-template>\n</div>\n", styles: [".dropdown-holder{min-height:20px}.dynamic-table,.dynamic-table button,span.badge{font-size:12px;font-weight:400}.table-length label{display:inline-block;white-space:nowrap}.table-length select{display:inline-block;width:auto}.table-search{text-align:right}.table-search label{display:inline-block;white-space:nowrap}.table-search input{display:inline-block;width:auto}th.sortable div{display:flex;align-items:center;cursor:pointer}th.sortable div span:not(.fa){flex:1}th.sortable div span.fa{display:block}th.sortable div span.fa:after{content:\"\\f0dc\";opacity:.25}th.sortable.headerSortDown span.fa.fa:after{color:#348fe2;content:\"\\f0dd\";opacity:1}th.sortable.headerSortUp span.fa.fa:after{color:#348fe2;content:\"\\f0de\";opacity:1}.menu-button{border-radius:50%;width:24px;height:24px;display:inline-block;position:relative;cursor:pointer}.menu-button:after{content:\"\";background-image:radial-gradient(circle,black 2px,transparent 2px);background-size:100% 33.33%;width:18px;height:18px;display:block;top:3px;left:3px;position:absolute}.menu-button:hover{background:#4e4e4e26}.menu-button.menu-horizontal:after{background-size:33.33% 100%}.small-column{white-space:nowrap;width:1%}.loading{opacity:.3}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: TooltipDirective, selector: "[tooltip]", inputs: ["tooltip"] }, { kind: "component", type: AsLibPaginationComponent, selector: "as-lib-pagination", inputs: ["first", "last", "align", "enableLog", "totalPages", "page"], outputs: ["pageChange"] }, { kind: "directive", type: UnwrapTagDirective, selector: "[appUnwraptag]", inputs: ["appUnwraptag"] }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "pipe", type: VisibleRowActionPipe, name: "visibleRowAction" }, { kind: "pipe", type: SafeLimitedHtmlPipe, name: "safeLimitedHtml" }] });
574
593
  }
575
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImport: i0, type: AsLibGenericTableComponent, decorators: [{
594
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AsLibGenericTableComponent, decorators: [{
576
595
  type: Component,
577
596
  args: [{ selector: 'as-lib-generic-table', imports: [
578
597
  CommonModule,
@@ -582,13 +601,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.0", ngImpor
582
601
  VisibleRowActionPipe,
583
602
  SafeLimitedHtmlPipe,
584
603
  UnwrapTagDirective
585
- ], providers: [BsModalService], standalone: true, template: "<div\n class=\"dynamic-table\"\n>\n @if (loading()) {\n <p class=\"position-absolute text-center d-block w-100 opacity-100\">\n <i class=\"fa fa-spinner fa-spin fa-3x text-primary mt-5 opacity-100\"></i>\n </p>\n }\n <div class=\"row mb-3 mx-0\"\n [appUnwraptag]=\"(!perPageValues() || perPageValues().length < 2) && (!headerActions() || !headerActions().length) && !enableSearch()\"\n [ngClass]=\"{\n\t\tloading: loading()\n\t}\">\n <div class=\"col-md-7 d-flex d-sm-flex d-md-block justify-content-center mb-2\"\n [appUnwraptag]=\"(!perPageValues() || perPageValues().length < 2) && (!headerActions() || !headerActions().length) && !enableSearch()\">\n @if (perPageValues() && perPageValues().length > 1) {\n <div class=\"d-block d-md-inline-flex me-0 me-md-3\">\n <div class=\"table-length\">\n <label\n >{{ translate('SHOW') }}\n <select\n (change)=\"changePerPage($event)\"\n aria-controls=\"data-table-combine\"\n class=\"form-select form-select-sm\"\n name=\"data-table-combine_length\"\n >\n @for (perp of perPageValues(); track perp) {\n <option [selected]=\"perPage() === perp\"\n value=\"{{ perp }}\">{{ perp }}\n </option>\n }\n </select>\n {{ translate('ENTRIES') }}</label\n >\n </div>\n </div>\n }\n @if (headerActions() && headerActions().length) {\n <div class=\"d-block d-inline-flex\" [ngClass]=\"{\n 'mb-2': (!perPageValues() || perPageValues().length < 2) && !enableSearch()\n }\">\n <div class=\"dt-buttons btn-group flex-wrap\">\n @for (action of headerActions(); track action.actionName + $index) {\n <button\n (click)=\"headerAction(action.actionName)\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm {{ action.actionName }} {{ action.btnColor }}\"\n id=\"header-action-{{ action.actionName }}\"\n type=\"button\"\n >\n <span>\n @if (action.faIcon) {\n <i class=\"fa {{ action.faIcon }}\"></i>\n }\n {{ action.label }}\n </span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n @if (enableSearch()) {\n <div class=\"col-md-5 d-flex d-xl-block justify-content-center\">\n <div class=\"table-search\">\n <label\n > {{ translate('SEARCH') }}:\n <input\n (ngModelChange)=\"this.searchUpdate.next($event)\"\n [(ngModel)]=\"search\"\n aria-controls=\"data-table-combine\"\n class=\"form-control form-control-sm\"\n id=\"table-search\"\n placeholder=\"\"\n type=\"search\"\n /></label>\n </div>\n </div>\n }\n </div>\n <div class=\"table-responsive\" [ngClass]=\"{\n\t\tloading: loading()\n\t}\">\n <table\n [ngClass]=\"{\n\t\t\t\t'table-striped': striped(),\n\t\t\t\t'table-bordered': bordered(),\n\t\t\t\t'table-hover': hovered()\n\t\t\t}\"\n class=\"table table-fixed align-middle {{ tableStyle() }}\"\n >\n <thead [class]=\"headStyle()\">\n <tr>\n @if (rowCounter()) {\n <th class=\"text-end small-column\"> {{ translate('NR') }}</th>\n }\n @for (head of tableHead(); track head.key) {\n @if (!head.hidden) {\n <th\n (click)=\"!head.notSortable && tableSort(head.key)\"\n [ngClass]=\"head.sort\"\n class=\"header {{ head.notSortable ? '' : 'sortable' }} {{ head.cellAlign }}\"\n >\n <div>\n <span [translate]=\"head.key.toUpperCase()\">{{ head.label || head.key }}</span>\n @if (!head.notSortable) {\n <span class=\"fa\"></span>\n }\n </div>\n </th>\n }\n }\n @if (tableHeadStorage() || (rowActions() && rowActions().length)) {\n <th\n class=\"header small-column text-center p-0\" data-width=\"50\">\n @if (tableHeadStorage()) {\n <a\n (click)=\"openTableLayoutModal(tableHeadModal)\"\n aria-controls=\"basic-link-dropdown\"\n class=\"menu-button toggle-white big-toggle dropdown-menu-link\"\n ></a>\n }\n </th>\n }\n </tr>\n </thead>\n\n @if (tableData().length) {\n <tbody>\n @for (row of tableData(); track row['id'] || $index) {\n <tr class=\"{{ row['rowClass'] || '' }}\"\n (click)=\"onRowClick(row, $event)\"\n [className]=\"selectableClickedValue === row[selectableKey()] ? selectableClass() : ''\"\n [attr.data-id]=\"row['id']\">\n @if (rowCounter()) {\n <th class=\"text-end\"> {{ $index + counter }}.</th>\n }\n @for (head of tableHead(); track head.key) {\n @if (!head.hidden) {\n <td [attr.data-column]=\"head.key\" class=\"header text-nowrap {{ head.cellAlign }}\">\n @if (head.type === 'select') {\n <input class=\"select\" type=\"checkbox\"/>\n }\n @if (!head.type) {\n {{ row[head.key] }}\n }\n @if (head.type === 'html') {\n <span [innerHTML]=\"row[head.key] | safeLimitedHtml\"></span>\n }\n @if (head.type === 'badge') {\n <span class=\"badge {{ row[head.key + 'Badge'] }}\">{{ row[head.key] }}</span>\n }\n @if (head.type === 'date') {\n {{ row[head.key] | date: head.dateFormat ? head.dateFormat : \"dd.MM.yyyy\" }}\n }\n @if (head.type === 'datetime') {\n {{ row[head.key] | date: head.dateFormat ? head.dateFormat : \"dd.MM.yyyy HH:mm:ss\" }}\n }\n @if (head.type === 'image') {\n @if (row[head.key] && row[head.key] !== '') {\n <img alt=\"img\" [attr.src]=\"row[head.key]\"\n width=\"{{head?.imageSize?.width || 50}}\" height=\"{{head?.imageSize?.height || 50}}\"/>\n }\n }\n @if (head.type === 'url') {\n <a [attr.href]=\"row[head.key]\" target=\"{{head?.urlTarget || '_blank'}}\">{{ row[head.key] }}</a>\n }\n @if (head.type === 'slider') {\n <div class=\"form-check form-switch\">\n <input\n (change)=\"sliderClicked.emit(row)\"\n [checked]=\"row[head.key]\"\n class=\"switched\"\n id=\"check-{{ row['id'] }}\"\n type=\"checkbox\"\n value=\"true\"\n />\n <label for=\"check-{{ row['id'] }}\"></label>\n </div>\n }\n\n @if (head.type === 'input') {\n <input [(ngModel)]=\"row[head.key]\" type=\"text\" name=\"input_{{row['id']}}\"/>\n }\n </td>\n }\n }\n @if (tableHeadStorage() || (rowActions() && rowActions().length)) {\n <td class=\"small-column\">\n <div class=\"menu text-end\">\n @for (action of rowActions(); track (action.label || '') + '_' + $index) {\n @if (row | visibleRowAction: action.visibilityRule : enableLog()) {\n <button\n (click)=\"rowAction(action.actionName, row, $event)\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n tooltip=\"{{ action.label }}\"\n type=\"button\"\n >\n <span><i class=\"fa {{ action.faIcon }}\"></i></span>\n </button>\n } @else if (action.visibilityRule?.disabled) {\n <button\n [disabled]=\"true\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n tooltip=\"{{ action.label }}\"\n type=\"button\"\n >\n <span><i class=\"fa {{ action.faIcon }}\"></i></span>\n </button>\n }\n }\n </div>\n </td>\n }\n </tr>\n }\n @if (inputTypeKey) {\n <tr>\n <td\n [colSpan]=\"tableHead().length - 1 + (rowCounter() ? 1 : 0) + ((tableHeadStorage() || (rowActions() && rowActions().length) ) ? 1 : 0)\">\n <button (click)=\"pushInputValues()\" class=\"btn buttons-copy buttons-html5 btn-sm ms-2 btn-secondary\">\n Save\n </button>\n </td>\n </tr>\n }\n </tbody>\n } @else {\n <tbody>\n <tr>\n <td\n [colSpan]=\"tableHead().length - 1 + (rowCounter() ? 1 : 0) + ((tableHeadStorage() || (rowActions() && rowActions().length) ) ? 1 : 0)\">\n <div class=\"alert alert-light\" role=\"alert\">\n <i class=\"fa fa-exclamation-triangle\"></i> {{ translate('NO_DATA_FOUND') }}\n </div>\n </td>\n </tr>\n </tbody>\n }\n </table>\n\n </div>\n @if (totalPages > 1) {\n <as-lib-pagination\n (pageChange)=\"pageChange($event)\"\n [align]=\"paginationAlignment()\"\n [enableLog]=\"enableLog()\"\n [first]=\"page() === 0\"\n [last]=\"page() === totalPages - 1\"\n [page]=\"page()\"\n [totalPages]=\"totalPages\"\n ></as-lib-pagination>\n }\n <ng-template #tableHeadModal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ translate('EDIT_TABLE_HEADER') }}</h4>\n <button (click)=\"modalClose()\" aria-label=\"Close\" class=\"btn-close close pull-right\" type=\"button\">\n <span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n @for (td of tableHead(); track td.key) {\n <div class=\"form-check form-switch\">\n <input\n (change)=\"handleTHchange(td.key)\"\n [checked]=\"!td.hidden\"\n [disabled]=\"td.mandatory\"\n [readOnly]=\"td.mandatory\"\n class=\"form-check-input\"\n id=\"{{ td.key }}\"\n role=\"switch\"\n type=\"checkbox\"\n value=\"true\"\n />\n <label class=\"form-check-label\" for=\"{{ td.key }}\">{{ td.label }} {{ td.mandatory ? \"*\" : \"\" }}</label>\n </div>\n }\n <small class=\"small text-muted pt-2\">* {{ translate('MANDATORY_FIELDS') }}</small>\n </div>\n <div class=\"modal-footer\">\n <button (click)=\"resetValues()\" class=\"btn btn-outline-secondary me-auto\" type=\"button\">{{ translate('RESET') }}\n </button>\n <button (click)=\"modalClose()\" class=\"btn btn-primary\" type=\"button\">{{ translate('SAVE') }}</button>\n </div>\n </ng-template>\n</div>\n", styles: [".dropdown-holder{min-height:20px}.dynamic-table,.dynamic-table button,span.badge{font-size:12px;font-weight:400}.table-length label{display:inline-block;white-space:nowrap}.table-length select{display:inline-block;width:auto}.table-search{text-align:right}.table-search label{display:inline-block;white-space:nowrap}.table-search input{display:inline-block;width:auto}th.sortable div{display:flex;align-items:center;cursor:pointer}th.sortable div span:not(.fa){flex:1}th.sortable div span.fa{display:block}th.sortable div span.fa:after{content:\"\\f0dc\";opacity:.25}th.sortable.headerSortDown span.fa.fa:after{color:#348fe2;content:\"\\f0dd\";opacity:1}th.sortable.headerSortUp span.fa.fa:after{color:#348fe2;content:\"\\f0de\";opacity:1}.menu-button{border-radius:50%;width:24px;height:24px;display:inline-block;position:relative;cursor:pointer}.menu-button:after{content:\"\";background-image:radial-gradient(circle,black 2px,transparent 2px);background-size:100% 33.33%;width:18px;height:18px;display:block;top:3px;left:3px;position:absolute}.menu-button:hover{background:#4e4e4e26}.menu-button.menu-horizontal:after{background-size:33.33% 100%}.small-column{white-space:nowrap;width:1%}.loading{opacity:.3}\n"] }]
604
+ ], providers: [BsModalService], standalone: true, template: "<div\n class=\"dynamic-table\"\n>\n @if (loading()) {\n <p class=\"position-absolute text-center d-block w-100 opacity-100\">\n <i class=\"fa fa-spinner fa-spin fa-3x text-primary mt-5 opacity-100\"></i>\n </p>\n }\n <div class=\"row mb-3 mx-0\"\n [appUnwraptag]=\"(!perPageValues() || perPageValues().length < 2) && (!headerActions() || !headerActions().length) && !enableSearch()\"\n [ngClass]=\"{\n\t\tloading: loading()\n\t}\">\n <div class=\"col-md-7 d-flex d-sm-flex d-md-block justify-content-center mb-2\"\n [appUnwraptag]=\"(!perPageValues() || perPageValues().length < 2) && (!headerActions() || !headerActions().length) && !enableSearch()\">\n @if (perPageValues() && perPageValues().length > 1) {\n <div class=\"d-block d-md-inline-flex me-0 me-md-3\">\n <div class=\"table-length\">\n <label\n >{{ translate('SHOW') }}\n <select\n (change)=\"changePerPage($event)\"\n aria-controls=\"data-table-combine\"\n class=\"form-select form-select-sm\"\n name=\"data-table-combine_length\"\n >\n @for (perp of perPageValues(); track perp) {\n <option [selected]=\"perPage() === perp\"\n value=\"{{ perp }}\">{{ perp }}\n </option>\n }\n </select>\n {{ translate('ENTRIES') }}</label\n >\n </div>\n </div>\n }\n @if (headerActions() && headerActions().length) {\n <div class=\"d-block d-inline-flex\" [ngClass]=\"{\n 'mb-2': (!perPageValues() || perPageValues().length < 2) && !enableSearch()\n }\">\n <div class=\"dt-buttons btn-group flex-wrap\">\n @for (action of headerActions(); track action.actionName + $index) {\n <button\n (click)=\"headerAction(action.actionName)\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm {{ action.actionName }} {{ action.btnColor }}\"\n id=\"header-action-{{ action.actionName }}\"\n type=\"button\"\n >\n <span>\n @if (action.faIcon) {\n <i class=\"fa {{ action.faIcon }}\"></i>\n }\n {{ action.label }}\n </span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n @if (enableSearch()) {\n <div class=\"col-md-5 d-flex d-xl-block justify-content-center\">\n <div class=\"table-search\">\n <label\n > {{ translate('SEARCH') }}:\n <input\n (ngModelChange)=\"this.searchUpdate.next($event)\"\n [(ngModel)]=\"search\"\n aria-controls=\"data-table-combine\"\n class=\"form-control form-control-sm\"\n id=\"table-search\"\n placeholder=\"\"\n type=\"search\"\n /></label>\n </div>\n </div>\n }\n </div>\n <div class=\"table-responsive\" [ngClass]=\"{\n\t\tloading: loading()\n\t}\">\n <table\n [ngClass]=\"{\n\t\t\t\t'table-striped': striped(),\n\t\t\t\t'table-bordered': bordered(),\n\t\t\t\t'table-hover': hovered()\n\t\t\t}\"\n class=\"table table-fixed align-middle {{ tableStyle() }}\"\n >\n <thead [class]=\"headStyle()\">\n <tr>\n @if (rowCounter()) {\n <th class=\"text-end small-column\"> {{ translate('NR') }}</th>\n }\n @for (head of tableHead(); track head.key) {\n @if (!head.hidden) {\n <th\n (click)=\"!head.notSortable && tableSort(head.key)\"\n [ngClass]=\"head.sort\"\n class=\"header {{ head.notSortable ? '' : 'sortable' }} {{ head.cellAlign }}\"\n >\n <div>\n <span [translate]=\"head.key.toUpperCase()\">{{ head.label || head.key }}</span>\n @if (!head.notSortable) {\n <span class=\"fa\"></span>\n }\n </div>\n </th>\n }\n }\n @if (tableHeadStorage() || (rowActions() && rowActions().length)) {\n <th\n class=\"header small-column text-center p-0\" data-width=\"50\">\n @if (tableHeadStorage()) {\n <a\n (click)=\"openTableLayoutModal(tableHeadModal)\"\n aria-controls=\"basic-link-dropdown\"\n class=\"menu-button toggle-white big-toggle dropdown-menu-link\"\n ></a>\n }\n </th>\n }\n </tr>\n </thead>\n\n @if (tableData().length) {\n <tbody>\n @for (row of tableData(); track row['id'] || $index) {\n <tr class=\"{{ row['rowClass'] || '' }}\"\n (click)=\"onRowClick(row, $event)\"\n [className]=\"selectableClickedValue === row[selectableKey()] ? selectableClass() : ''\"\n [attr.data-id]=\"row['id']\">\n @if (rowCounter()) {\n <th class=\"text-end\"> {{ $index + counter }}.</th>\n }\n @for (head of tableHead(); track head.key) {\n @if (!head.hidden) {\n <td [attr.data-column]=\"head.key\" class=\"header text-nowrap {{ head.cellAlign }}\">\n @if (head.type === 'checkbox') {\n @if (row | visibleRowAction: head.visibilityFieldRule : enableLog()) {\n <input class=\"select\" [(ngModel)]=\"row[head.key]\" name=\"checkbox_{{row['id']}}\" type=\"checkbox\"/>\n } @else if (head.visibilityFieldRule?.disabled) {\n <input class=\"select\" [disabled]=\"true\" [(ngModel)]=\"row[head.key]\" name=\"checkbox_{{row['id']}}\" type=\"checkbox\"/>\n }\n }\n @if (!head.type) {\n {{ row[head.key] }}\n }\n @if (head.type === 'html') {\n <span [innerHTML]=\"row[head.key] | safeLimitedHtml\"></span>\n }\n @if (head.type === 'badge') {\n <span class=\"badge {{ row[head.key + 'Badge'] }}\">{{ row[head.key] }}</span>\n }\n @if (head.type === 'date') {\n {{ row[head.key] | date: head.dateFormat ? head.dateFormat : \"dd.MM.yyyy\" }}\n }\n @if (head.type === 'datetime') {\n {{ row[head.key] | date: head.dateFormat ? head.dateFormat : \"dd.MM.yyyy HH:mm:ss\" }}\n }\n @if (head.type === 'image') {\n @if (row[head.key] && row[head.key] !== '') {\n <img alt=\"img\" [attr.src]=\"row[head.key]\"\n width=\"{{head?.imageSize?.width || 50}}\" height=\"{{head?.imageSize?.height || 50}}\"/>\n }\n }\n @if (head.type === 'url') {\n <a [attr.href]=\"row[head.key]\" target=\"{{head?.urlTarget || '_blank'}}\">{{ row[head.key] }}</a>\n }\n @if (head.type === 'slider') {\n <div class=\"form-check form-switch\">\n <input\n (change)=\"sliderClicked.emit(row)\"\n [checked]=\"row[head.key]\"\n class=\"switched\"\n id=\"check-{{ row['id'] }}\"\n type=\"checkbox\"\n value=\"true\"\n />\n <label for=\"check-{{ row['id'] }}\"></label>\n </div>\n }\n\n @if (head.type === 'input') {\n <input [(ngModel)]=\"row[head.key]\" type=\"text\" name=\"input_{{row['id']}}\"/>\n }\n </td>\n }\n }\n @if (tableHeadStorage() || (rowActions() && rowActions().length)) {\n <td class=\"small-column\">\n <div class=\"menu text-end\">\n @for (action of rowActions(); track (action.label || '') + '_' + $index) {\n @if (row | visibleRowAction: action.visibilityRule : enableLog()) {\n <button\n (click)=\"rowAction(action.actionName, row, $event)\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n tooltip=\"{{ action.label }}\"\n type=\"button\"\n >\n <span><i class=\"fa {{ action.faIcon }}\"></i></span>\n </button>\n } @else if (action.visibilityRule?.disabled) {\n <button\n [disabled]=\"true\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n tooltip=\"{{ action.label }}\"\n type=\"button\"\n >\n <span><i class=\"fa {{ action.faIcon }}\"></i></span>\n </button>\n }\n }\n </div>\n </td>\n }\n </tr>\n }\n @if (inputTypeKey || checkboxTypeKey) {\n <tr>\n <td\n [colSpan]=\"tableHead().length - 1 + (rowCounter() ? 1 : 0) + ((tableHeadStorage() || (rowActions() && rowActions().length) ) ? 1 : 0)\">\n <button (click)=\"pushInputValues()\" class=\"btn buttons-copy buttons-html5 btn-sm ms-2 btn-secondary\">\n {{ translate(formSubmitLabel()) }}\n </button>\n </td>\n </tr>\n }\n </tbody>\n } @else {\n <tbody>\n <tr>\n <td\n [colSpan]=\"tableHead().length - 1 + (rowCounter() ? 1 : 0) + ((tableHeadStorage() || (rowActions() && rowActions().length) ) ? 1 : 0)\">\n <div class=\"alert alert-light\" role=\"alert\">\n <i class=\"fa fa-exclamation-triangle\"></i> {{ translate('NO_DATA_FOUND') }}\n </div>\n </td>\n </tr>\n </tbody>\n }\n </table>\n\n </div>\n @if (totalPages > 1) {\n <as-lib-pagination\n (pageChange)=\"pageChange($event)\"\n [align]=\"paginationAlignment()\"\n [enableLog]=\"enableLog()\"\n [first]=\"page() === 0\"\n [last]=\"page() === totalPages - 1\"\n [page]=\"page()\"\n [totalPages]=\"totalPages\"\n ></as-lib-pagination>\n }\n <ng-template #tableHeadModal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ translate('EDIT_TABLE_HEADER') }}</h4>\n <button (click)=\"modalClose()\" aria-label=\"Close\" class=\"btn-close close pull-right\" type=\"button\">\n <span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n @for (td of tableHead(); track td.key) {\n <div class=\"form-check form-switch\">\n <input\n (change)=\"handleTHchange(td.key)\"\n [checked]=\"!td.hidden\"\n [disabled]=\"td.mandatory\"\n [readOnly]=\"td.mandatory\"\n class=\"form-check-input\"\n id=\"{{ td.key }}\"\n role=\"switch\"\n type=\"checkbox\"\n value=\"true\"\n />\n <label class=\"form-check-label\" for=\"{{ td.key }}\">{{ td.label }} {{ td.mandatory ? \"*\" : \"\" }}</label>\n </div>\n }\n <small class=\"small text-muted pt-2\">* {{ translate('MANDATORY_FIELDS') }}</small>\n </div>\n <div class=\"modal-footer\">\n <button (click)=\"resetValues()\" class=\"btn btn-outline-secondary me-auto\" type=\"button\">{{ translate('RESET') }}\n </button>\n <button (click)=\"modalClose()\" class=\"btn btn-primary\" type=\"button\">{{ translate('SAVE') }}</button>\n </div>\n </ng-template>\n</div>\n", styles: [".dropdown-holder{min-height:20px}.dynamic-table,.dynamic-table button,span.badge{font-size:12px;font-weight:400}.table-length label{display:inline-block;white-space:nowrap}.table-length select{display:inline-block;width:auto}.table-search{text-align:right}.table-search label{display:inline-block;white-space:nowrap}.table-search input{display:inline-block;width:auto}th.sortable div{display:flex;align-items:center;cursor:pointer}th.sortable div span:not(.fa){flex:1}th.sortable div span.fa{display:block}th.sortable div span.fa:after{content:\"\\f0dc\";opacity:.25}th.sortable.headerSortDown span.fa.fa:after{color:#348fe2;content:\"\\f0dd\";opacity:1}th.sortable.headerSortUp span.fa.fa:after{color:#348fe2;content:\"\\f0de\";opacity:1}.menu-button{border-radius:50%;width:24px;height:24px;display:inline-block;position:relative;cursor:pointer}.menu-button:after{content:\"\";background-image:radial-gradient(circle,black 2px,transparent 2px);background-size:100% 33.33%;width:18px;height:18px;display:block;top:3px;left:3px;position:absolute}.menu-button:hover{background:#4e4e4e26}.menu-button.menu-horizontal:after{background-size:33.33% 100%}.small-column{white-space:nowrap;width:1%}.loading{opacity:.3}\n"] }]
586
605
  }], ctorParameters: () => [{ type: i3.Observable, decorators: [{
587
606
  type: Optional
588
607
  }, {
589
608
  type: Inject,
590
609
  args: [LANG_TABLE]
591
- }] }] });
610
+ }] }], propDecorators: { loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], striped: [{ type: i0.Input, args: [{ isSignal: true, alias: "striped", required: false }] }], bordered: [{ type: i0.Input, args: [{ isSignal: true, alias: "bordered", required: false }] }], hovered: [{ type: i0.Input, args: [{ isSignal: true, alias: "hovered", required: false }] }], enableSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableSearch", required: false }] }], rowCounter: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowCounter", required: false }] }], enableLog: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableLog", required: false }] }], perPage: [{ type: i0.Input, args: [{ isSignal: true, alias: "perPage", required: false }] }], tableHead: [{ type: i0.Input, args: [{ isSignal: true, alias: "tableHead", required: false }] }], tableData: [{ type: i0.Input, args: [{ isSignal: true, alias: "tableData", required: false }] }], tableHeadStorage: [{ type: i0.Input, args: [{ isSignal: true, alias: "tableHeadStorage", required: false }] }], perPageValues: [{ type: i0.Input, args: [{ isSignal: true, alias: "perPageValues", required: false }] }], headerActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerActions", required: false }] }], rowActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowActions", required: false }] }], tableStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "tableStyle", required: false }] }], headStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "headStyle", required: false }] }], paginationAlignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "paginationAlignment", required: false }] }], totalItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalItems", required: false }] }], page: [{ type: i0.Input, args: [{ isSignal: true, alias: "page", required: false }] }], selectableKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectableKey", required: false }] }], selectableClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectableClass", required: false }] }], searchString: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchString", required: false }] }], sort: [{ type: i0.Input, args: [{ isSignal: true, alias: "sort", required: false }] }], order: [{ type: i0.Input, args: [{ isSignal: true, alias: "order", required: false }] }], formSubmitLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "formSubmitLabel", required: false }] }], filterParamsChanged: [{ type: i0.Output, args: ["filterParamsChanged"] }], editRow: [{ type: i0.Output, args: ["editRow"] }], sliderClicked: [{ type: i0.Output, args: ["sliderClicked"] }], headerActionClicked: [{ type: i0.Output, args: ["headerActionClicked"] }], rowActionClicked: [{ type: i0.Output, args: ["rowActionClicked"] }], tableHeadChanged: [{ type: i0.Output, args: ["tableHeadChanged"] }], pushedInputValues: [{ type: i0.Output, args: ["pushedInputValues"] }] } });
592
611
 
593
612
  /*
594
613
  * Public API Surface of as-lib-generic-table
@@ -1 +1 @@
1
- {"version":3,"file":"agentsmith.bgd-as-lib-generic-table.mjs","sources":["../../../projects/as-lib-generic-table/src/lib/as-lib-generic-table.service.ts","../../../projects/as-lib-generic-table/src/lib/directives/component/tooltip.component.ts","../../../projects/as-lib-generic-table/src/lib/directives/component/tooltip.component.html","../../../projects/as-lib-generic-table/src/lib/directives/tooltip/tooltip.directive.ts","../../../projects/as-lib-generic-table/src/lib/pipes/row-action-visible/visible-row-action.pipe.ts","../../../projects/as-lib-generic-table/src/lib/pipes/safe-limited-html/safe-limited-html.pipe.ts","../../../projects/as-lib-generic-table/src/lib/directives/unwraptag-tag/unwraptag-tag.directive.ts","../../../projects/as-lib-generic-table/src/lib/i18n/en.ts","../../../projects/as-lib-generic-table/src/lib/i18n/cn.ts","../../../projects/as-lib-generic-table/src/lib/i18n/ja.ts","../../../projects/as-lib-generic-table/src/lib/i18n/de.ts","../../../projects/as-lib-generic-table/src/lib/as-lib-generic-table.component.ts","../../../projects/as-lib-generic-table/src/lib/as-lib-generic-table.component.html","../../../projects/as-lib-generic-table/src/public-api.ts","../../../projects/as-lib-generic-table/src/agentsmith.bgd-as-lib-generic-table.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AsLibGenericTableService {\n\n constructor() { }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n\tselector: 'tooltip',\n standalone: true,\n\ttemplateUrl: './tooltip.component.html',\n\tstyleUrls: ['./tooltip.component.scss'],\n})\nexport class TooltipComponent implements OnInit {\n\ttooltip: string = '';\n\tleft: number = 0;\n\ttop: number = 0;\n\n\tconstructor() {}\n\n\tngOnInit(): void {}\n}\n","<div [style.left]=\"left + 'px'\" [style.top]=\"top + 'px'\" class=\"my-tooltip\">\n\t{{ tooltip }}\n</div>\n","import {\n ApplicationRef,\n ComponentRef,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n HostListener,\n Injector,\n Input,\n ViewContainerRef,\n} from '@angular/core';\nimport { TooltipComponent } from '../component/tooltip.component';\n\n@Directive({\n selector: '[tooltip]',\n standalone: true\n})\nexport class TooltipDirective {\n @Input() tooltip = '';\n\n private componentRef: ComponentRef<any> | null = null;\n\n constructor(\n private elementRef: ElementRef,\n private appRef: ApplicationRef,\n private viewContainerRef: ViewContainerRef\n ) {\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.componentRef === null) {\n this.componentRef = this.viewContainerRef.createComponent(TooltipComponent);\n this.componentRef.instance.text = this.tooltip;\n this.setTooltipComponentProperties();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.destroy();\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n destroy(): void {\n if (this.componentRef !== null) {\n this.appRef.detachView(this.componentRef.hostView);\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n\n private setTooltipComponentProperties() {\n if (this.componentRef !== null) {\n this.componentRef.instance.tooltip = this.tooltip;\n const {left, right, bottom} = this.elementRef.nativeElement.getBoundingClientRect();\n this.componentRef.instance.left = (right - left) / 2 + left;\n this.componentRef.instance.top = bottom;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'visibleRowAction'\n})\nexport class VisibleRowActionPipe implements PipeTransform {\n transform(row: any, visibilityRule: any, enableLog: boolean): boolean {\n if (!visibilityRule || !visibilityRule.key) {\n return true;\n }\n const targetValue = row[visibilityRule.key];\n if (enableLog) {\n console.log('AS Dynamic Table -> Visibility targetValue', targetValue, visibilityRule.rule, visibilityRule.value)\n }\n return this.shouldApplyRule(targetValue, visibilityRule.rule, visibilityRule.value);\n }\n\n shouldApplyRule(targetValue: any, rule: string, value: any): boolean {\n // Your existing logic for applying rules\n switch (rule) {\n case '>':\n return targetValue > value;\n case '<':\n return targetValue < value;\n case '=':\n return targetValue === value;\n case '<>':\n return targetValue !== value;\n case 'in':\n if (Array.isArray(targetValue)) {\n return targetValue.includes(value);\n }\n if (typeof targetValue === 'string') {\n return targetValue.includes(value);\n }\n return false;\n default:\n return false;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({name: 'safeLimitedHtml'})\nexport class SafeLimitedHtmlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {\n }\n\n transform(value: string): SafeHtml {\n if (!value) return '';\n\n // List of allowed tags\n const allowedTags = ['br', 'span', 'p', 'strong', 'em', 'ul', 'ol', 'li'];\n\n // Create regex pattern to remove all tags except allowed ones\n const pattern = new RegExp(\n `<(?!\\/?(${allowedTags.join('|')})\\s*\\/?)[^>]+>`,\n 'gi'\n );\n\n const sanitized = value.replace(pattern, '');\n return this.sanitizer.bypassSecurityTrustHtml(sanitized);\n }\n}\n","import { AfterViewInit, Directive, ElementRef, Input } from '@angular/core';\n\n@Directive({\n selector: '[appUnwraptag]',\n standalone: true\n})\nexport class UnwrapTagDirective implements AfterViewInit {\n\t@Input() appUnwraptag = true;\n\n\tconstructor(private el: ElementRef) {}\n\n\tngAfterViewInit() {\n\t\tif (!this.appUnwraptag) {\n\t\t\treturn;\n\t\t}\n\t\t// get the element's parent node\n\t\tconst parent = this.el.nativeElement.parentNode;\n\n\t\t// move all children out of the element\n\t\twhile (this.el.nativeElement.firstChild) {\n\t\t\tparent.insertBefore(this.el.nativeElement.firstChild, this.el.nativeElement);\n\t\t}\n\t\t// remove the empty element\n\t\tparent.removeChild(this.el.nativeElement);\n\t}\n}\n\n/*\nExample of use:\n<app-store-widget appUnwraptag [widgetStore]=\"storeInstance\"></app-store-widget>\nthe result will be the inner html of app-store-widget.\n*/\n","export const EN_TRANSLATIONS: Record<string, string> = {\n\tNR: 'Nr.',\n\tNO_DATA_FOUND: 'No data found',\n\tSEARCH: 'Search',\n\tSHOW: 'Show',\n\tENTRIES: 'Entries',\n\tEDIT_TABLE_HEADER: 'Edit table header',\n\tMANDATORY_FIELDS: 'Mandatory field for the view',\n\tRESET: 'Reset',\n\tCLOSE: 'Close',\n\tSAVE: 'Save',\n};\n","export const CN_TRANSLATIONS: Record<string, string> = {\n NR: '序号',\n NO_DATA_FOUND: '未找到数据',\n SEARCH: '搜索',\n SHOW: '显示',\n ENTRIES: '条目',\n EDIT_TABLE_HEADER: '编辑表头',\n MANDATORY_FIELDS: '视图必填字段',\n RESET: '重置',\n CLOSE: '关闭',\n SAVE: '保存',\n};\n","export const JA_TRANSLATIONS: Record<string, string> = {\n NR: '番号',\n NO_DATA_FOUND: 'データが見つかりません',\n SEARCH: '検索',\n SHOW: '表示',\n ENTRIES: '件',\n EDIT_TABLE_HEADER: 'テーブルヘッダーを編集',\n MANDATORY_FIELDS: 'ビューに必須のフィールド',\n RESET: 'リセット',\n CLOSE: '閉じる',\n SAVE: '保存',\n};\n","export const DE_TRANSLATIONS: Record<string, string> = {\n NR: 'Nr.',\n NO_DATA_FOUND: 'Keine Daten gefunden',\n SEARCH: 'Suchen',\n SHOW: 'Anzeigen',\n ENTRIES: 'Einträge',\n EDIT_TABLE_HEADER: 'Tabellenkopf bearbeiten',\n MANDATORY_FIELDS: 'Pflichtfeld für die Ansicht',\n RESET: 'Zurücksetzen',\n CLOSE: 'Schließen',\n SAVE: 'Speichern',\n};\n","import {Component, effect, Inject, inject, InjectionToken, input, Optional, output, TemplateRef} from '@angular/core';\nimport {IActionButton, IFilterParams, ITableHead} from \"./exports\";\nimport {debounceTime, distinctUntilChanged, Observable, of, Subject} from \"rxjs\";\nimport {BsModalRef, BsModalService} from \"ngx-bootstrap/modal\";\nimport {CommonModule} from \"@angular/common\";\nimport {FormsModule} from \"@angular/forms\";\nimport {TooltipDirective} from \"./directives/tooltip/tooltip.directive\";\nimport {AsLibPaginationComponent} from \"@agentsmith.bgd/as-lib-pagination\";\nimport {VisibleRowActionPipe} from \"./pipes/row-action-visible/visible-row-action.pipe\";\nimport {SafeLimitedHtmlPipe} from \"./pipes/safe-limited-html/safe-limited-html.pipe\";\nimport {UnwrapTagDirective} from \"./directives/unwraptag-tag/unwraptag-tag.directive\";\nimport {EN_TRANSLATIONS} from \"./i18n/en\";\nimport {CN_TRANSLATIONS} from \"./i18n/cn\";\nimport {JA_TRANSLATIONS} from \"./i18n/ja\";\nimport {DE_TRANSLATIONS} from \"./i18n/de\";\n\nexport const LANG_TABLE = new InjectionToken('env.LANG_TABLE');\n\n@Component({\n selector: 'as-lib-generic-table',\n imports: [\n CommonModule,\n FormsModule,\n TooltipDirective,\n AsLibPaginationComponent,\n VisibleRowActionPipe,\n SafeLimitedHtmlPipe,\n UnwrapTagDirective\n ],\n providers: [BsModalService],\n templateUrl: './as-lib-generic-table.component.html',\n styleUrl: './as-lib-generic-table.component.scss',\n standalone: true\n})\nexport class AsLibGenericTableComponent {\n\n\n loading = input(false);\n striped = input(false);\n bordered = input(false);\n hovered = input(false);\n enableSearch = input(true);\n rowCounter = input(false);\n enableLog = input(false);\n perPage = input(10);\n tableHead = input<ITableHead[]>([]);\n tableData = input<Record<string, never>[]>([]);\n tableHeadStorage = input<string>('');\n perPageValues = input<number[]>([10, 20, 50, 100]);\n headerActions = input<IActionButton[]>([]);\n rowActions = input<IActionButton[]>([]);\n tableStyle = input<'' | 'table-light' | 'table-dark'>('');\n headStyle = input<\n | 'table-default'\n | 'table-primary'\n | 'table-secondary'\n | 'table-success'\n | 'table-danger'\n | 'table-warning'\n | 'table-info'\n | 'table-light'\n | 'table-dark'>('table-default');\n paginationAlignment = input<'' | 'justify-content-center' | 'justify-content-end'>('justify-content-end');\n totalItems = input(0);\n\n page = input(0);\n\n selectableKey = input<string>('');\n selectableClass = input<\n | 'table-primary'\n | 'table-secondary'\n | 'table-success'\n | 'table-danger'\n | 'table-warning'\n | 'table-info'\n | 'table-light'>('table-secondary');\n\n searchString = input<string>();\n sort = input<string>('name');\n order = input<'asc' | 'desc'>('asc');\n\n availableTranslations: Record<string, Record<string, string>> = {\n en: EN_TRANSLATIONS,\n cn: CN_TRANSLATIONS,\n ja: JA_TRANSLATIONS,\n de: DE_TRANSLATIONS\n };\n translations: Record<string, string>;\n private currentLanguage = 'en';\n\n filterParamsChanged = output<IFilterParams>();\n editRow = output<Record<string, never>>();\n sliderClicked = output<Record<string, never>>();\n headerActionClicked = output<string>();\n rowActionClicked = output<{ action: string; value: any }>();\n tableHeadChanged = output<string[] | null>();\n pushedInputValues = output<{ id: string, value: string }[]>();\n\n bsModalRef!: BsModalRef;\n searchUpdate: Subject<string> = new Subject();\n search = '';\n totalPages = 0;\n counter = 0;\n private sortKey!: string;\n private sortOrder: 'asc' | 'desc' = 'asc';\n\n selectableClickedValue = '';\n\n //private modalService: BsModalService;// = Inject(BsModalService)\n private modalService = inject(BsModalService);\n\n private deepLinkDone = false;\n inputTypeKey!: string;\n\n\n constructor(@Optional() @Inject(LANG_TABLE) private language$: Observable<string>) {\n this.translations = this.availableTranslations['en'];\n effect(() => {\n const p = this.page();\n const totalItems = this.totalItems();\n const perPage = this.perPage();\n this.counter = p * perPage + 1\n this.log(`The count is totalItems, page, perpage, and counter:`, totalItems, p, perPage, this.counter);\n this.calculatePages();\n this.badgeClassRules();\n this.rowClassRules();\n this.init();\n this.deepLink();\n this.inputTypeKey = this.tableHead().find(t => t.type === 'input')?.key || '';\n (language$ || of('en')).subscribe((language) => {\n this.currentLanguage = language;\n this.log('Language changed to:', language);\n this.translations = this.availableTranslations[language] || this.availableTranslations['en'];\n });\n });\n\n\n }\n\n init(): void {\n if (this.tableHeadStorage()) {\n const storage = localStorage.getItem(this.tableHeadStorage());\n if (storage) {\n const hidden: string[] = (JSON.parse(storage) as string[]) || [];\n this.tableHead().forEach(t => (t.hidden = hidden.includes(t.key)));\n } else {\n localStorage.setItem(this.tableHeadStorage(), JSON.stringify(this.tableHead().filter(t => t.hidden).map(t => t.key)));\n }\n }\n\n this.sortKey = this.tableHead().find(h => h.key === this.sort())?.key || this.tableHead()[0].key;\n this.log('totalPages', this.totalPages);\n this.log('Table head', this.tableHead());\n this.log('Table data', this.tableData());\n this.log('Row actions', this.rowActions());\n // this.log('rows', rows);\n this.searchUpdate.pipe(debounceTime(500), distinctUntilChanged()).subscribe(_ => {\n this.log('search', this.search);\n const emitValue: IFilterParams = {\n page: 0,\n sort: this.sortKey,\n order: this.sortOrder,\n perPage: this.perPage(),\n searchString: this.search,\n };\n this.log('Search value change, sortKey values: ', emitValue);\n this.filterParamsChanged.emit(emitValue);\n });\n\n if (!this.perPageValues().includes(this.perPage())) {\n throw new Error('Per page value invalid: ' + this.perPage());\n }\n this.log('Loading', this.loading());\n }\n\n private badgeClassRules() {\n this.applyRules(\n 'badgeClassRules',\n (key) => `${key}Badge`\n );\n }\n\n private rowClassRules() {\n this.applyRules(\n 'rowClassRules',\n () => 'rowClass'\n );\n }\n\n private applyRules(\n ruleKey: 'badgeClassRules' | 'rowClassRules',\n targetKeyFn: (key: string) => string\n ) {\n const tableData = this.tableData();\n\n this.tableHead().forEach(head => {\n const rules = head[ruleKey] || [];\n rules.forEach(rule => {\n const {key} = head;\n const {rule: condition, value, class: cl} = rule;\n\n tableData.forEach(row => {\n if (this.shouldApplyRule(row[key], condition, value)) {\n row[targetKeyFn(key)] = cl as never;\n }\n });\n });\n });\n }\n\n\n private shouldApplyRule(cellValue: any, condition: string, value: any): boolean {\n switch (condition) {\n case '=':\n return cellValue === value;\n case '<>':\n return cellValue !== value;\n case '>':\n return cellValue > value;\n case '<':\n return cellValue < value;\n case 'in':\n return cellValue.includes(value);\n default:\n return false;\n }\n }\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n openTableLayoutModal(tableHeadModal: TemplateRef<any>): void {\n this.log('Open layout');\n // @ts-ignore\n this.bsModalRef = this.modalService.show(tableHeadModal, {\n animated: true,\n ignoreBackdropClick: true,\n class: 'confirm-modal modal-sm',\n initialState: {},\n });\n }\n\n handleTHchange(key: string): void {\n this.log('change triggered', key);\n this.tableHead().forEach(t => {\n if (t.key === key) {\n t.hidden = !t.hidden;\n this.tableHeadStorage &&\n localStorage.setItem(this.tableHeadStorage(), JSON.stringify(this.tableHead().filter(t => t.hidden).map(t => t.key)));\n }\n });\n }\n\n manualTableSort(key: string, order: string) {\n this.log('Default sort key/order', key, order)\n this.tableHead().forEach(h => {\n if (h.key === key) {\n if (order === 'DESC') {\n this.sortOrder = 'asc';\n h.sort = 'headerSortDown';\n } else {\n this.sortOrder = 'desc';\n h.sort = 'headerSortUp';\n }\n }\n });\n }\n\n tableSort(key: string): void {\n this.log('table sortKey key', key);\n this.sortKey = key;\n this.tableHead().forEach(h => {\n if (h.key === key) {\n if (h.sort === 'headerSortDown') {\n this.sortOrder = 'desc';\n h.sort = 'headerSortUp';\n } else {\n h.sort = 'headerSortDown';\n this.sortOrder = 'asc';\n }\n const emitValue: IFilterParams = {\n page: 0,\n sort: this.sortKey,\n order: this.sortOrder,\n perPage: this.perPage(),\n searchString: this.search,\n };\n this.log('Sort changed, filter values: ', emitValue);\n this.filterParamsChanged.emit(emitValue);\n } else {\n h.sort = '';\n }\n });\n }\n\n changePerPage($event: Event): void {\n const perPage = parseInt(($event.target as HTMLSelectElement).value, 10) || 20;\n //this.perPage = perPage;\n // this.page = 0;\n this.log('changePerPage', perPage);\n this.calculatePages();\n this.filterParamsChanged.emit({\n page: 0,\n sort: this.sortKey,\n order: this.sortOrder,\n perPage: perPage,\n searchString: this.search,\n });\n }\n\n log(value: any, ...rest: any[]): void {\n if (this.enableLog() || localStorage.getItem('loggerEnable')) {\n console.log('%c DEBUG ', 'background: gray; color: white; font-weight: bold;', `AS Dynamic Table -> ${value}`, ...rest);\n }\n }\n\n emitRow(row: Record<string, never>) {\n this.log('edit row', row);\n this.editRow.emit(row);\n }\n\n headerAction(actionName: string) {\n this.log('Header action', actionName);\n this.headerActionClicked.emit(actionName);\n }\n\n rowAction(action: string, value: Record<string, never>, $event: MouseEvent) {\n $event.stopPropagation();\n this.log('Row action', action, value);\n this.rowActionClicked.emit({action, value});\n }\n\n pageChange(page: number) {\n const emitValue: IFilterParams = {\n page,\n sort: this.sortKey,\n order: this.sortOrder,\n perPage: this.perPage(),\n searchString: this.search,\n };\n this.log('Page change, filter values: ', emitValue);\n this.filterParamsChanged.emit(emitValue);\n }\n\n modalClose() {\n const hiddenKeys = this.tableHead().filter(t => t.hidden).map(t => t.key);\n this.log('Modal closed, saved keys', hiddenKeys);\n this.tableHeadChanged.emit(hiddenKeys);\n this.bsModalRef.hide();\n }\n\n //\n resetValues() {\n this.tableHeadChanged.emit(null);\n this.bsModalRef.hide();\n }\n\n //\n private calculatePages() {\n this.totalPages = Math.ceil(this.totalItems() / this.perPage());\n this.log('total items/pages', this.totalItems(), this.totalPages);\n }\n\n\n onRowClick(row: Record<string, never>, event: MouseEvent) {\n\n const columnName = (event.target as HTMLElement).closest('td')?.dataset['column'];\n\n this.log(`onRowTRClick col: ${columnName}`, row)\n this.log('selectableKey', this.selectableKey())\n if (this.selectableKey() !== '') {\n this.selectableClickedValue = row[this.selectableKey()];\n this.log('onRowTRClick', this.selectableClickedValue)\n }\n this.rowActionClicked.emit({\n action: 'rowTRClicked', value: {\n _clickedColumn: columnName,\n ...row\n }\n })\n }\n\n trackByHeadChange(index: number, item: ITableHead): string {\n const rulesSignature = item.rowClassRules?.map(r => `${r.rule}${r.value}${r.class}`).join('|') || '';\n return `${index}-${item.key}-${rulesSignature}`;\n }\n\n private deepLink() {\n if (!this.deepLinkDone) {\n const searchString = this.searchString();\n this.log('deep linking ', this.deepLinkDone, searchString);\n this.deepLinkDone = true;\n if (searchString) {\n this.search = searchString;\n this.searchUpdate.next(searchString)\n }\n this.manualTableSort(this.sort(), this.order())\n }\n }\n\n visibleRowAction(row: Record<string, never>, visibilityRule: {\n rule: '>' | '<' | '=' | '<>' | 'in';\n key: string;\n value: any\n } | undefined) {\n this.log('Visibility row check', row, visibilityRule)\n if (!visibilityRule || !visibilityRule.key) {\n return true;\n }\n const targetValue = row[visibilityRule.key];\n this.log('Visibility targetValue', targetValue, visibilityRule.rule, visibilityRule.value)\n return this.shouldApplyRule(targetValue, visibilityRule.rule, visibilityRule.value);\n }\n\n pushInputValues() {\n const forEmit = this.tableData().map(row => ({\n id: row['id'] as string,\n value: row[this.inputTypeKey] as string\n }));\n\n this.log('for emit', forEmit)\n this.pushedInputValues.emit(forEmit);\n }\n\n protected translate(key: string): string {\n if (this.translations.hasOwnProperty(key) && this.translations[key]) {\n return this.translations[key];\n }\n return key;\n\n }\n}\n","<div\n class=\"dynamic-table\"\n>\n @if (loading()) {\n <p class=\"position-absolute text-center d-block w-100 opacity-100\">\n <i class=\"fa fa-spinner fa-spin fa-3x text-primary mt-5 opacity-100\"></i>\n </p>\n }\n <div class=\"row mb-3 mx-0\"\n [appUnwraptag]=\"(!perPageValues() || perPageValues().length < 2) && (!headerActions() || !headerActions().length) && !enableSearch()\"\n [ngClass]=\"{\n\t\tloading: loading()\n\t}\">\n <div class=\"col-md-7 d-flex d-sm-flex d-md-block justify-content-center mb-2\"\n [appUnwraptag]=\"(!perPageValues() || perPageValues().length < 2) && (!headerActions() || !headerActions().length) && !enableSearch()\">\n @if (perPageValues() && perPageValues().length > 1) {\n <div class=\"d-block d-md-inline-flex me-0 me-md-3\">\n <div class=\"table-length\">\n <label\n >{{ translate('SHOW') }}\n <select\n (change)=\"changePerPage($event)\"\n aria-controls=\"data-table-combine\"\n class=\"form-select form-select-sm\"\n name=\"data-table-combine_length\"\n >\n @for (perp of perPageValues(); track perp) {\n <option [selected]=\"perPage() === perp\"\n value=\"{{ perp }}\">{{ perp }}\n </option>\n }\n </select>\n {{ translate('ENTRIES') }}</label\n >\n </div>\n </div>\n }\n @if (headerActions() && headerActions().length) {\n <div class=\"d-block d-inline-flex\" [ngClass]=\"{\n 'mb-2': (!perPageValues() || perPageValues().length < 2) && !enableSearch()\n }\">\n <div class=\"dt-buttons btn-group flex-wrap\">\n @for (action of headerActions(); track action.actionName + $index) {\n <button\n (click)=\"headerAction(action.actionName)\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm {{ action.actionName }} {{ action.btnColor }}\"\n id=\"header-action-{{ action.actionName }}\"\n type=\"button\"\n >\n <span>\n @if (action.faIcon) {\n <i class=\"fa {{ action.faIcon }}\"></i>\n }\n {{ action.label }}\n </span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n @if (enableSearch()) {\n <div class=\"col-md-5 d-flex d-xl-block justify-content-center\">\n <div class=\"table-search\">\n <label\n > {{ translate('SEARCH') }}:\n <input\n (ngModelChange)=\"this.searchUpdate.next($event)\"\n [(ngModel)]=\"search\"\n aria-controls=\"data-table-combine\"\n class=\"form-control form-control-sm\"\n id=\"table-search\"\n placeholder=\"\"\n type=\"search\"\n /></label>\n </div>\n </div>\n }\n </div>\n <div class=\"table-responsive\" [ngClass]=\"{\n\t\tloading: loading()\n\t}\">\n <table\n [ngClass]=\"{\n\t\t\t\t'table-striped': striped(),\n\t\t\t\t'table-bordered': bordered(),\n\t\t\t\t'table-hover': hovered()\n\t\t\t}\"\n class=\"table table-fixed align-middle {{ tableStyle() }}\"\n >\n <thead [class]=\"headStyle()\">\n <tr>\n @if (rowCounter()) {\n <th class=\"text-end small-column\"> {{ translate('NR') }}</th>\n }\n @for (head of tableHead(); track head.key) {\n @if (!head.hidden) {\n <th\n (click)=\"!head.notSortable && tableSort(head.key)\"\n [ngClass]=\"head.sort\"\n class=\"header {{ head.notSortable ? '' : 'sortable' }} {{ head.cellAlign }}\"\n >\n <div>\n <span [translate]=\"head.key.toUpperCase()\">{{ head.label || head.key }}</span>\n @if (!head.notSortable) {\n <span class=\"fa\"></span>\n }\n </div>\n </th>\n }\n }\n @if (tableHeadStorage() || (rowActions() && rowActions().length)) {\n <th\n class=\"header small-column text-center p-0\" data-width=\"50\">\n @if (tableHeadStorage()) {\n <a\n (click)=\"openTableLayoutModal(tableHeadModal)\"\n aria-controls=\"basic-link-dropdown\"\n class=\"menu-button toggle-white big-toggle dropdown-menu-link\"\n ></a>\n }\n </th>\n }\n </tr>\n </thead>\n\n @if (tableData().length) {\n <tbody>\n @for (row of tableData(); track row['id'] || $index) {\n <tr class=\"{{ row['rowClass'] || '' }}\"\n (click)=\"onRowClick(row, $event)\"\n [className]=\"selectableClickedValue === row[selectableKey()] ? selectableClass() : ''\"\n [attr.data-id]=\"row['id']\">\n @if (rowCounter()) {\n <th class=\"text-end\"> {{ $index + counter }}.</th>\n }\n @for (head of tableHead(); track head.key) {\n @if (!head.hidden) {\n <td [attr.data-column]=\"head.key\" class=\"header text-nowrap {{ head.cellAlign }}\">\n @if (head.type === 'select') {\n <input class=\"select\" type=\"checkbox\"/>\n }\n @if (!head.type) {\n {{ row[head.key] }}\n }\n @if (head.type === 'html') {\n <span [innerHTML]=\"row[head.key] | safeLimitedHtml\"></span>\n }\n @if (head.type === 'badge') {\n <span class=\"badge {{ row[head.key + 'Badge'] }}\">{{ row[head.key] }}</span>\n }\n @if (head.type === 'date') {\n {{ row[head.key] | date: head.dateFormat ? head.dateFormat : \"dd.MM.yyyy\" }}\n }\n @if (head.type === 'datetime') {\n {{ row[head.key] | date: head.dateFormat ? head.dateFormat : \"dd.MM.yyyy HH:mm:ss\" }}\n }\n @if (head.type === 'image') {\n @if (row[head.key] && row[head.key] !== '') {\n <img alt=\"img\" [attr.src]=\"row[head.key]\"\n width=\"{{head?.imageSize?.width || 50}}\" height=\"{{head?.imageSize?.height || 50}}\"/>\n }\n }\n @if (head.type === 'url') {\n <a [attr.href]=\"row[head.key]\" target=\"{{head?.urlTarget || '_blank'}}\">{{ row[head.key] }}</a>\n }\n @if (head.type === 'slider') {\n <div class=\"form-check form-switch\">\n <input\n (change)=\"sliderClicked.emit(row)\"\n [checked]=\"row[head.key]\"\n class=\"switched\"\n id=\"check-{{ row['id'] }}\"\n type=\"checkbox\"\n value=\"true\"\n />\n <label for=\"check-{{ row['id'] }}\"></label>\n </div>\n }\n\n @if (head.type === 'input') {\n <input [(ngModel)]=\"row[head.key]\" type=\"text\" name=\"input_{{row['id']}}\"/>\n }\n </td>\n }\n }\n @if (tableHeadStorage() || (rowActions() && rowActions().length)) {\n <td class=\"small-column\">\n <div class=\"menu text-end\">\n @for (action of rowActions(); track (action.label || '') + '_' + $index) {\n @if (row | visibleRowAction: action.visibilityRule : enableLog()) {\n <button\n (click)=\"rowAction(action.actionName, row, $event)\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n tooltip=\"{{ action.label }}\"\n type=\"button\"\n >\n <span><i class=\"fa {{ action.faIcon }}\"></i></span>\n </button>\n } @else if (action.visibilityRule?.disabled) {\n <button\n [disabled]=\"true\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n tooltip=\"{{ action.label }}\"\n type=\"button\"\n >\n <span><i class=\"fa {{ action.faIcon }}\"></i></span>\n </button>\n }\n }\n </div>\n </td>\n }\n </tr>\n }\n @if (inputTypeKey) {\n <tr>\n <td\n [colSpan]=\"tableHead().length - 1 + (rowCounter() ? 1 : 0) + ((tableHeadStorage() || (rowActions() && rowActions().length) ) ? 1 : 0)\">\n <button (click)=\"pushInputValues()\" class=\"btn buttons-copy buttons-html5 btn-sm ms-2 btn-secondary\">\n Save\n </button>\n </td>\n </tr>\n }\n </tbody>\n } @else {\n <tbody>\n <tr>\n <td\n [colSpan]=\"tableHead().length - 1 + (rowCounter() ? 1 : 0) + ((tableHeadStorage() || (rowActions() && rowActions().length) ) ? 1 : 0)\">\n <div class=\"alert alert-light\" role=\"alert\">\n <i class=\"fa fa-exclamation-triangle\"></i> {{ translate('NO_DATA_FOUND') }}\n </div>\n </td>\n </tr>\n </tbody>\n }\n </table>\n\n </div>\n @if (totalPages > 1) {\n <as-lib-pagination\n (pageChange)=\"pageChange($event)\"\n [align]=\"paginationAlignment()\"\n [enableLog]=\"enableLog()\"\n [first]=\"page() === 0\"\n [last]=\"page() === totalPages - 1\"\n [page]=\"page()\"\n [totalPages]=\"totalPages\"\n ></as-lib-pagination>\n }\n <ng-template #tableHeadModal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ translate('EDIT_TABLE_HEADER') }}</h4>\n <button (click)=\"modalClose()\" aria-label=\"Close\" class=\"btn-close close pull-right\" type=\"button\">\n <span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n @for (td of tableHead(); track td.key) {\n <div class=\"form-check form-switch\">\n <input\n (change)=\"handleTHchange(td.key)\"\n [checked]=\"!td.hidden\"\n [disabled]=\"td.mandatory\"\n [readOnly]=\"td.mandatory\"\n class=\"form-check-input\"\n id=\"{{ td.key }}\"\n role=\"switch\"\n type=\"checkbox\"\n value=\"true\"\n />\n <label class=\"form-check-label\" for=\"{{ td.key }}\">{{ td.label }} {{ td.mandatory ? \"*\" : \"\" }}</label>\n </div>\n }\n <small class=\"small text-muted pt-2\">* {{ translate('MANDATORY_FIELDS') }}</small>\n </div>\n <div class=\"modal-footer\">\n <button (click)=\"resetValues()\" class=\"btn btn-outline-secondary me-auto\" type=\"button\">{{ translate('RESET') }}\n </button>\n <button (click)=\"modalClose()\" class=\"btn btn-primary\" type=\"button\">{{ translate('SAVE') }}</button>\n </div>\n </ng-template>\n</div>\n","/*\n * Public API Surface of as-lib-generic-table\n */\n\nexport * from './lib/as-lib-generic-table.service';\nexport * from './lib/as-lib-generic-table.component';\nexport * from './lib/exports';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"agentsmith.bgd-as-lib-generic-table.mjs","sources":["../../../projects/as-lib-generic-table/src/lib/as-lib-generic-table.service.ts","../../../projects/as-lib-generic-table/src/lib/directives/component/tooltip.component.ts","../../../projects/as-lib-generic-table/src/lib/directives/component/tooltip.component.html","../../../projects/as-lib-generic-table/src/lib/directives/tooltip/tooltip.directive.ts","../../../projects/as-lib-generic-table/src/lib/pipes/row-action-visible/visible-row-action.pipe.ts","../../../projects/as-lib-generic-table/src/lib/pipes/safe-limited-html/safe-limited-html.pipe.ts","../../../projects/as-lib-generic-table/src/lib/directives/unwraptag-tag/unwraptag-tag.directive.ts","../../../projects/as-lib-generic-table/src/lib/i18n/en.ts","../../../projects/as-lib-generic-table/src/lib/i18n/cn.ts","../../../projects/as-lib-generic-table/src/lib/i18n/ja.ts","../../../projects/as-lib-generic-table/src/lib/i18n/de.ts","../../../projects/as-lib-generic-table/src/lib/as-lib-generic-table.component.ts","../../../projects/as-lib-generic-table/src/lib/as-lib-generic-table.component.html","../../../projects/as-lib-generic-table/src/public-api.ts","../../../projects/as-lib-generic-table/src/agentsmith.bgd-as-lib-generic-table.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AsLibGenericTableService {\n\n constructor() { }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n\tselector: 'tooltip',\n standalone: true,\n\ttemplateUrl: './tooltip.component.html',\n\tstyleUrls: ['./tooltip.component.scss'],\n})\nexport class TooltipComponent implements OnInit {\n\ttooltip: string = '';\n\tleft: number = 0;\n\ttop: number = 0;\n\n\tconstructor() {}\n\n\tngOnInit(): void {}\n}\n","<div [style.left]=\"left + 'px'\" [style.top]=\"top + 'px'\" class=\"my-tooltip\">\n\t{{ tooltip }}\n</div>\n","import {\n ApplicationRef,\n ComponentRef,\n Directive,\n ElementRef,\n EmbeddedViewRef,\n HostListener,\n Injector,\n Input,\n ViewContainerRef,\n} from '@angular/core';\nimport { TooltipComponent } from '../component/tooltip.component';\n\n@Directive({\n selector: '[tooltip]',\n standalone: true\n})\nexport class TooltipDirective {\n @Input() tooltip = '';\n\n private componentRef: ComponentRef<any> | null = null;\n\n constructor(\n private elementRef: ElementRef,\n private appRef: ApplicationRef,\n private viewContainerRef: ViewContainerRef\n ) {\n }\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.componentRef === null) {\n this.componentRef = this.viewContainerRef.createComponent(TooltipComponent);\n this.componentRef.instance.text = this.tooltip;\n this.setTooltipComponentProperties();\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.destroy();\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n destroy(): void {\n if (this.componentRef !== null) {\n this.appRef.detachView(this.componentRef.hostView);\n this.componentRef.destroy();\n this.componentRef = null;\n }\n }\n\n private setTooltipComponentProperties() {\n if (this.componentRef !== null) {\n this.componentRef.instance.tooltip = this.tooltip;\n const {left, right, bottom} = this.elementRef.nativeElement.getBoundingClientRect();\n this.componentRef.instance.left = (right - left) / 2 + left;\n this.componentRef.instance.top = bottom;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'visibleRowAction'\n})\nexport class VisibleRowActionPipe implements PipeTransform {\n transform(row: any, visibilityRule: any, enableLog: boolean): boolean {\n if (!visibilityRule || !visibilityRule.key) {\n return true;\n }\n const targetValue = row[visibilityRule.key];\n if (enableLog) {\n console.log('AS Dynamic Table -> Visibility targetValue', targetValue, visibilityRule.rule, visibilityRule.value)\n }\n return this.shouldApplyRule(targetValue, visibilityRule.rule, visibilityRule.value);\n }\n\n shouldApplyRule(targetValue: any, rule: string, value: any): boolean {\n // Your existing logic for applying rules\n switch (rule) {\n case '>':\n return targetValue > value;\n case '<':\n return targetValue < value;\n case '=':\n return targetValue === value;\n case '<>':\n return targetValue !== value;\n case 'in':\n if (Array.isArray(targetValue)) {\n return targetValue.includes(value);\n }\n if (typeof targetValue === 'string') {\n return targetValue.includes(value);\n }\n return false;\n default:\n return false;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({name: 'safeLimitedHtml'})\nexport class SafeLimitedHtmlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {\n }\n\n transform(value: string): SafeHtml {\n if (!value) return '';\n\n // List of allowed tags\n const allowedTags = ['br', 'span', 'p', 'strong', 'em', 'ul', 'ol', 'li'];\n\n // Create regex pattern to remove all tags except allowed ones\n const pattern = new RegExp(\n `<(?!\\/?(${allowedTags.join('|')})\\s*\\/?)[^>]+>`,\n 'gi'\n );\n\n const sanitized = value.replace(pattern, '');\n return this.sanitizer.bypassSecurityTrustHtml(sanitized);\n }\n}\n","import { AfterViewInit, Directive, ElementRef, Input } from '@angular/core';\n\n@Directive({\n selector: '[appUnwraptag]',\n standalone: true\n})\nexport class UnwrapTagDirective implements AfterViewInit {\n\t@Input() appUnwraptag = true;\n\n\tconstructor(private el: ElementRef) {}\n\n\tngAfterViewInit() {\n\t\tif (!this.appUnwraptag) {\n\t\t\treturn;\n\t\t}\n\t\t// get the element's parent node\n\t\tconst parent = this.el.nativeElement.parentNode;\n\n\t\t// move all children out of the element\n\t\twhile (this.el.nativeElement.firstChild) {\n\t\t\tparent.insertBefore(this.el.nativeElement.firstChild, this.el.nativeElement);\n\t\t}\n\t\t// remove the empty element\n\t\tparent.removeChild(this.el.nativeElement);\n\t}\n}\n\n/*\nExample of use:\n<app-store-widget appUnwraptag [widgetStore]=\"storeInstance\"></app-store-widget>\nthe result will be the inner html of app-store-widget.\n*/\n","export const EN_TRANSLATIONS: Record<string, string> = {\n\tNR: 'Nr.',\n\tNO_DATA_FOUND: 'No data found',\n\tSEARCH: 'Search',\n\tSHOW: 'Show',\n\tENTRIES: 'Entries',\n\tEDIT_TABLE_HEADER: 'Edit table header',\n\tMANDATORY_FIELDS: 'Mandatory field for the view',\n\tRESET: 'Reset',\n\tCLOSE: 'Close',\n\tSAVE: 'Save',\n};\n","export const CN_TRANSLATIONS: Record<string, string> = {\n NR: '序号',\n NO_DATA_FOUND: '未找到数据',\n SEARCH: '搜索',\n SHOW: '显示',\n ENTRIES: '条目',\n EDIT_TABLE_HEADER: '编辑表头',\n MANDATORY_FIELDS: '视图必填字段',\n RESET: '重置',\n CLOSE: '关闭',\n SAVE: '保存',\n};\n","export const JA_TRANSLATIONS: Record<string, string> = {\n NR: '番号',\n NO_DATA_FOUND: 'データが見つかりません',\n SEARCH: '検索',\n SHOW: '表示',\n ENTRIES: '件',\n EDIT_TABLE_HEADER: 'テーブルヘッダーを編集',\n MANDATORY_FIELDS: 'ビューに必須のフィールド',\n RESET: 'リセット',\n CLOSE: '閉じる',\n SAVE: '保存',\n};\n","export const DE_TRANSLATIONS: Record<string, string> = {\n NR: 'Nr.',\n NO_DATA_FOUND: 'Keine Daten gefunden',\n SEARCH: 'Suchen',\n SHOW: 'Anzeigen',\n ENTRIES: 'Einträge',\n EDIT_TABLE_HEADER: 'Tabellenkopf bearbeiten',\n MANDATORY_FIELDS: 'Pflichtfeld für die Ansicht',\n RESET: 'Zurücksetzen',\n CLOSE: 'Schließen',\n SAVE: 'Speichern',\n};\n","import {Component, effect, Inject, inject, InjectionToken, input, Optional, output, TemplateRef} from '@angular/core';\nimport {IActionButton, IFilterParams, ITableHead} from \"./exports\";\nimport {debounceTime, distinctUntilChanged, Observable, of, Subject} from \"rxjs\";\nimport {BsModalRef, BsModalService} from \"ngx-bootstrap/modal\";\nimport {CommonModule} from \"@angular/common\";\nimport {FormsModule} from \"@angular/forms\";\nimport {TooltipDirective} from \"./directives/tooltip/tooltip.directive\";\nimport {AsLibPaginationComponent} from \"@agentsmith.bgd/as-lib-pagination\";\nimport {VisibleRowActionPipe} from \"./pipes/row-action-visible/visible-row-action.pipe\";\nimport {SafeLimitedHtmlPipe} from \"./pipes/safe-limited-html/safe-limited-html.pipe\";\nimport {UnwrapTagDirective} from \"./directives/unwraptag-tag/unwraptag-tag.directive\";\nimport {EN_TRANSLATIONS} from \"./i18n/en\";\nimport {CN_TRANSLATIONS} from \"./i18n/cn\";\nimport {JA_TRANSLATIONS} from \"./i18n/ja\";\nimport {DE_TRANSLATIONS} from \"./i18n/de\";\n\nexport const LANG_TABLE = new InjectionToken('env.LANG_TABLE');\n\n@Component({\n selector: 'as-lib-generic-table',\n imports: [\n CommonModule,\n FormsModule,\n TooltipDirective,\n AsLibPaginationComponent,\n VisibleRowActionPipe,\n SafeLimitedHtmlPipe,\n UnwrapTagDirective\n ],\n providers: [BsModalService],\n templateUrl: './as-lib-generic-table.component.html',\n styleUrl: './as-lib-generic-table.component.scss',\n standalone: true\n})\nexport class AsLibGenericTableComponent {\n\n\n loading = input(false);\n striped = input(false);\n bordered = input(false);\n hovered = input(false);\n enableSearch = input(true);\n rowCounter = input(false);\n enableLog = input(false);\n perPage = input(10);\n tableHead = input<ITableHead[]>([]);\n tableData = input<Record<string, never>[]>([]);\n tableHeadStorage = input<string>('');\n perPageValues = input<number[]>([10, 20, 50, 100]);\n headerActions = input<IActionButton[]>([]);\n rowActions = input<IActionButton[]>([]);\n tableStyle = input<'' | 'table-light' | 'table-dark'>('');\n headStyle = input<\n | 'table-default'\n | 'table-primary'\n | 'table-secondary'\n | 'table-success'\n | 'table-danger'\n | 'table-warning'\n | 'table-info'\n | 'table-light'\n | 'table-dark'>('table-default');\n paginationAlignment = input<'' | 'justify-content-center' | 'justify-content-end'>('justify-content-end');\n totalItems = input(0);\n\n page = input(0);\n\n selectableKey = input<string>('');\n selectableClass = input<\n | 'table-primary'\n | 'table-secondary'\n | 'table-success'\n | 'table-danger'\n | 'table-warning'\n | 'table-info'\n | 'table-light'>('table-secondary');\n\n searchString = input<string>();\n sort = input<string>('name');\n order = input<'asc' | 'desc'>('asc');\n formSubmitLabel = input<string>('SAVE');\n\n availableTranslations: Record<string, Record<string, string>> = {\n en: EN_TRANSLATIONS,\n cn: CN_TRANSLATIONS,\n ja: JA_TRANSLATIONS,\n de: DE_TRANSLATIONS\n };\n translations: Record<string, string>;\n private currentLanguage = 'en';\n\n filterParamsChanged = output<IFilterParams>();\n editRow = output<Record<string, never>>();\n sliderClicked = output<Record<string, never>>();\n headerActionClicked = output<string>();\n rowActionClicked = output<{ action: string; value: any }>();\n tableHeadChanged = output<string[] | null>();\n pushedInputValues = output<{ id: string, value: string | boolean, key: string }[]>();\n\n bsModalRef!: BsModalRef;\n searchUpdate: Subject<string> = new Subject();\n search = '';\n totalPages = 0;\n counter = 0;\n private sortKey!: string;\n private sortOrder: 'asc' | 'desc' = 'asc';\n\n selectableClickedValue = '';\n\n //private modalService: BsModalService;// = Inject(BsModalService)\n private modalService = inject(BsModalService);\n\n private deepLinkDone = false;\n inputTypeKey!: string;\n checkboxTypeKey!: string;\n\n\n constructor(@Optional() @Inject(LANG_TABLE) private language$: Observable<string>) {\n this.translations = this.availableTranslations['en'];\n effect(() => {\n const p = this.page();\n const totalItems = this.totalItems();\n const perPage = this.perPage();\n this.counter = p * perPage + 1\n this.log(`The count is totalItems, page, perpage, and counter:`, totalItems, p, perPage, this.counter);\n this.calculatePages();\n this.badgeClassRules();\n this.rowClassRules();\n this.init();\n this.deepLink();\n this.inputTypeKey = this.tableHead().find(t => t.type === 'input')?.key || '';\n this.checkboxTypeKey = this.tableHead().find(t => t.type === 'checkbox')?.key || '';\n (language$ || of('en')).subscribe((language) => {\n this.currentLanguage = language;\n this.log('Language changed to:', language);\n this.translations = this.availableTranslations[language] || this.availableTranslations['en'];\n });\n });\n\n\n }\n\n init(): void {\n if (this.tableHeadStorage()) {\n const storage = localStorage.getItem(this.tableHeadStorage());\n if (storage) {\n const hidden: string[] = (JSON.parse(storage) as string[]) || [];\n this.tableHead().forEach(t => (t.hidden = hidden.includes(t.key)));\n } else {\n localStorage.setItem(this.tableHeadStorage(), JSON.stringify(this.tableHead().filter(t => t.hidden).map(t => t.key)));\n }\n }\n\n this.sortKey = this.tableHead().find(h => h.key === this.sort())?.key || this.tableHead()[0].key;\n this.log('totalPages', this.totalPages);\n this.log('Table head', this.tableHead());\n this.log('Table data', this.tableData());\n this.log('Row actions', this.rowActions());\n // this.log('rows', rows);\n this.searchUpdate.pipe(debounceTime(500), distinctUntilChanged()).subscribe(_ => {\n this.log('search', this.search);\n const emitValue: IFilterParams = {\n page: 0,\n sort: this.sortKey,\n order: this.sortOrder,\n perPage: this.perPage(),\n searchString: this.search,\n };\n this.log('Search value change, sortKey values: ', emitValue);\n this.filterParamsChanged.emit(emitValue);\n });\n\n if (!this.perPageValues().includes(this.perPage())) {\n throw new Error('Per page value invalid: ' + this.perPage());\n }\n this.log('Loading', this.loading());\n }\n\n private badgeClassRules() {\n this.applyRules(\n 'badgeClassRules',\n (key) => `${key}Badge`\n );\n }\n\n private rowClassRules() {\n this.applyRules(\n 'rowClassRules',\n () => 'rowClass'\n );\n }\n\n private applyRules(\n ruleKey: 'badgeClassRules' | 'rowClassRules',\n targetKeyFn: (key: string) => string\n ) {\n const tableData = this.tableData();\n\n this.tableHead().forEach(head => {\n const rules = head[ruleKey] || [];\n rules.forEach(rule => {\n const {key} = head;\n const {rule: condition, value, class: cl} = rule;\n\n tableData.forEach(row => {\n if (this.shouldApplyRule(row[key], condition, value)) {\n row[targetKeyFn(key)] = cl as never;\n }\n });\n });\n });\n }\n\n\n private shouldApplyRule(cellValue: any, condition: string, value: any): boolean {\n switch (condition) {\n case '=':\n return cellValue === value;\n case '<>':\n return cellValue !== value;\n case '>':\n return cellValue > value;\n case '<':\n return cellValue < value;\n case 'in':\n return cellValue.includes(value);\n default:\n return false;\n }\n }\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n openTableLayoutModal(tableHeadModal: TemplateRef<any>): void {\n this.log('Open layout');\n // @ts-ignore\n this.bsModalRef = this.modalService.show(tableHeadModal, {\n animated: true,\n ignoreBackdropClick: true,\n class: 'confirm-modal modal-sm',\n initialState: {},\n });\n }\n\n handleTHchange(key: string): void {\n this.log('change triggered', key);\n this.tableHead().forEach(t => {\n if (t.key === key) {\n t.hidden = !t.hidden;\n this.tableHeadStorage &&\n localStorage.setItem(this.tableHeadStorage(), JSON.stringify(this.tableHead().filter(t => t.hidden).map(t => t.key)));\n }\n });\n }\n\n manualTableSort(key: string, order: string) {\n this.log('Default sort key/order', key, order)\n this.tableHead().forEach(h => {\n if (h.key === key) {\n if (order === 'DESC') {\n this.sortOrder = 'asc';\n h.sort = 'headerSortDown';\n } else {\n this.sortOrder = 'desc';\n h.sort = 'headerSortUp';\n }\n }\n });\n }\n\n tableSort(key: string): void {\n this.log('table sortKey key', key);\n this.sortKey = key;\n this.tableHead().forEach(h => {\n if (h.key === key) {\n if (h.sort === 'headerSortDown') {\n this.sortOrder = 'desc';\n h.sort = 'headerSortUp';\n } else {\n h.sort = 'headerSortDown';\n this.sortOrder = 'asc';\n }\n const emitValue: IFilterParams = {\n page: 0,\n sort: this.sortKey,\n order: this.sortOrder,\n perPage: this.perPage(),\n searchString: this.search,\n };\n this.log('Sort changed, filter values: ', emitValue);\n this.filterParamsChanged.emit(emitValue);\n } else {\n h.sort = '';\n }\n });\n }\n\n changePerPage($event: Event): void {\n const perPage = parseInt(($event.target as HTMLSelectElement).value, 10) || 20;\n //this.perPage = perPage;\n // this.page = 0;\n this.log('changePerPage', perPage);\n this.calculatePages();\n this.filterParamsChanged.emit({\n page: 0,\n sort: this.sortKey,\n order: this.sortOrder,\n perPage: perPage,\n searchString: this.search,\n });\n }\n\n log(value: any, ...rest: any[]): void {\n if (this.enableLog() || localStorage.getItem('loggerEnable')) {\n console.log('%c DEBUG ', 'background: gray; color: white; font-weight: bold;', `AS Dynamic Table -> ${value}`, ...rest);\n }\n }\n\n emitRow(row: Record<string, never>) {\n this.log('edit row', row);\n this.editRow.emit(row);\n }\n\n headerAction(actionName: string) {\n this.log('Header action', actionName);\n this.headerActionClicked.emit(actionName);\n }\n\n rowAction(action: string, value: Record<string, never>, $event: MouseEvent) {\n $event.stopPropagation();\n this.log('Row action', action, value);\n this.rowActionClicked.emit({action, value});\n }\n\n pageChange(page: number) {\n const emitValue: IFilterParams = {\n page,\n sort: this.sortKey,\n order: this.sortOrder,\n perPage: this.perPage(),\n searchString: this.search,\n };\n this.log('Page change, filter values: ', emitValue);\n this.filterParamsChanged.emit(emitValue);\n }\n\n modalClose() {\n const hiddenKeys = this.tableHead().filter(t => t.hidden).map(t => t.key);\n this.log('Modal closed, saved keys', hiddenKeys);\n this.tableHeadChanged.emit(hiddenKeys);\n this.bsModalRef.hide();\n }\n\n //\n resetValues() {\n this.tableHeadChanged.emit(null);\n this.bsModalRef.hide();\n }\n\n //\n private calculatePages() {\n this.totalPages = Math.ceil(this.totalItems() / this.perPage());\n this.log('total items/pages', this.totalItems(), this.totalPages);\n }\n\n\n onRowClick(row: Record<string, never>, event: MouseEvent) {\n\n const columnName = (event.target as HTMLElement).closest('td')?.dataset['column'];\n\n this.log(`onRowTRClick col: ${columnName}`, row)\n this.log('selectableKey', this.selectableKey())\n if (this.selectableKey() !== '') {\n this.selectableClickedValue = row[this.selectableKey()];\n this.log('onRowTRClick', this.selectableClickedValue)\n }\n this.rowActionClicked.emit({\n action: 'rowTRClicked', value: {\n _clickedColumn: columnName,\n ...row\n }\n })\n }\n\n trackByHeadChange(index: number, item: ITableHead): string {\n const rulesSignature = item.rowClassRules?.map(r => `${r.rule}${r.value}${r.class}`).join('|') || '';\n return `${index}-${item.key}-${rulesSignature}`;\n }\n\n private deepLink() {\n if (!this.deepLinkDone) {\n const searchString = this.searchString();\n this.log('deep linking ', this.deepLinkDone, searchString);\n this.deepLinkDone = true;\n if (searchString) {\n this.search = searchString;\n this.searchUpdate.next(searchString)\n }\n this.manualTableSort(this.sort(), this.order())\n }\n }\n\n visibleRowAction(row: Record<string, never>, visibilityRule: {\n rule: '>' | '<' | '=' | '<>' | 'in';\n key: string;\n value: any\n } | undefined) {\n this.log('Visibility row check', row, visibilityRule)\n if (!visibilityRule || !visibilityRule.key) {\n return true;\n }\n const targetValue = row[visibilityRule.key];\n this.log('Visibility targetValue', targetValue, visibilityRule.rule, visibilityRule.value)\n return this.shouldApplyRule(targetValue, visibilityRule.rule, visibilityRule.value);\n }\n\n pushInputValues() {\n let forEmit: { id: string, value: string | boolean, key: string }[] = [];\n if (this.inputTypeKey) {\n const forEmit1 = this.tableData().map(row => ({\n id: row['id'] as string,\n value: row[this.inputTypeKey] as string,\n key: this.inputTypeKey\n }));\n forEmit = [...forEmit1];\n }\n\n if (this.checkboxTypeKey) {\n const forEmit1 = this.tableData().map(row =>\n {\n this.log ('pushInputRow', row)\n return {\n id: row['id'] as string,\n value: !!row[this.checkboxTypeKey],\n key: this.checkboxTypeKey,\n }\n }\n );\n forEmit = [...forEmit, ...forEmit1];\n }\n\n this.log('for emit', forEmit)\n this.pushedInputValues.emit(forEmit);\n }\n\n protected translate(key: string): string {\n if (this.translations.hasOwnProperty(key) && this.translations[key]) {\n return this.translations[key];\n }\n return key;\n\n }\n}\n","<div\n class=\"dynamic-table\"\n>\n @if (loading()) {\n <p class=\"position-absolute text-center d-block w-100 opacity-100\">\n <i class=\"fa fa-spinner fa-spin fa-3x text-primary mt-5 opacity-100\"></i>\n </p>\n }\n <div class=\"row mb-3 mx-0\"\n [appUnwraptag]=\"(!perPageValues() || perPageValues().length < 2) && (!headerActions() || !headerActions().length) && !enableSearch()\"\n [ngClass]=\"{\n\t\tloading: loading()\n\t}\">\n <div class=\"col-md-7 d-flex d-sm-flex d-md-block justify-content-center mb-2\"\n [appUnwraptag]=\"(!perPageValues() || perPageValues().length < 2) && (!headerActions() || !headerActions().length) && !enableSearch()\">\n @if (perPageValues() && perPageValues().length > 1) {\n <div class=\"d-block d-md-inline-flex me-0 me-md-3\">\n <div class=\"table-length\">\n <label\n >{{ translate('SHOW') }}\n <select\n (change)=\"changePerPage($event)\"\n aria-controls=\"data-table-combine\"\n class=\"form-select form-select-sm\"\n name=\"data-table-combine_length\"\n >\n @for (perp of perPageValues(); track perp) {\n <option [selected]=\"perPage() === perp\"\n value=\"{{ perp }}\">{{ perp }}\n </option>\n }\n </select>\n {{ translate('ENTRIES') }}</label\n >\n </div>\n </div>\n }\n @if (headerActions() && headerActions().length) {\n <div class=\"d-block d-inline-flex\" [ngClass]=\"{\n 'mb-2': (!perPageValues() || perPageValues().length < 2) && !enableSearch()\n }\">\n <div class=\"dt-buttons btn-group flex-wrap\">\n @for (action of headerActions(); track action.actionName + $index) {\n <button\n (click)=\"headerAction(action.actionName)\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm {{ action.actionName }} {{ action.btnColor }}\"\n id=\"header-action-{{ action.actionName }}\"\n type=\"button\"\n >\n <span>\n @if (action.faIcon) {\n <i class=\"fa {{ action.faIcon }}\"></i>\n }\n {{ action.label }}\n </span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n @if (enableSearch()) {\n <div class=\"col-md-5 d-flex d-xl-block justify-content-center\">\n <div class=\"table-search\">\n <label\n > {{ translate('SEARCH') }}:\n <input\n (ngModelChange)=\"this.searchUpdate.next($event)\"\n [(ngModel)]=\"search\"\n aria-controls=\"data-table-combine\"\n class=\"form-control form-control-sm\"\n id=\"table-search\"\n placeholder=\"\"\n type=\"search\"\n /></label>\n </div>\n </div>\n }\n </div>\n <div class=\"table-responsive\" [ngClass]=\"{\n\t\tloading: loading()\n\t}\">\n <table\n [ngClass]=\"{\n\t\t\t\t'table-striped': striped(),\n\t\t\t\t'table-bordered': bordered(),\n\t\t\t\t'table-hover': hovered()\n\t\t\t}\"\n class=\"table table-fixed align-middle {{ tableStyle() }}\"\n >\n <thead [class]=\"headStyle()\">\n <tr>\n @if (rowCounter()) {\n <th class=\"text-end small-column\"> {{ translate('NR') }}</th>\n }\n @for (head of tableHead(); track head.key) {\n @if (!head.hidden) {\n <th\n (click)=\"!head.notSortable && tableSort(head.key)\"\n [ngClass]=\"head.sort\"\n class=\"header {{ head.notSortable ? '' : 'sortable' }} {{ head.cellAlign }}\"\n >\n <div>\n <span [translate]=\"head.key.toUpperCase()\">{{ head.label || head.key }}</span>\n @if (!head.notSortable) {\n <span class=\"fa\"></span>\n }\n </div>\n </th>\n }\n }\n @if (tableHeadStorage() || (rowActions() && rowActions().length)) {\n <th\n class=\"header small-column text-center p-0\" data-width=\"50\">\n @if (tableHeadStorage()) {\n <a\n (click)=\"openTableLayoutModal(tableHeadModal)\"\n aria-controls=\"basic-link-dropdown\"\n class=\"menu-button toggle-white big-toggle dropdown-menu-link\"\n ></a>\n }\n </th>\n }\n </tr>\n </thead>\n\n @if (tableData().length) {\n <tbody>\n @for (row of tableData(); track row['id'] || $index) {\n <tr class=\"{{ row['rowClass'] || '' }}\"\n (click)=\"onRowClick(row, $event)\"\n [className]=\"selectableClickedValue === row[selectableKey()] ? selectableClass() : ''\"\n [attr.data-id]=\"row['id']\">\n @if (rowCounter()) {\n <th class=\"text-end\"> {{ $index + counter }}.</th>\n }\n @for (head of tableHead(); track head.key) {\n @if (!head.hidden) {\n <td [attr.data-column]=\"head.key\" class=\"header text-nowrap {{ head.cellAlign }}\">\n @if (head.type === 'checkbox') {\n @if (row | visibleRowAction: head.visibilityFieldRule : enableLog()) {\n <input class=\"select\" [(ngModel)]=\"row[head.key]\" name=\"checkbox_{{row['id']}}\" type=\"checkbox\"/>\n } @else if (head.visibilityFieldRule?.disabled) {\n <input class=\"select\" [disabled]=\"true\" [(ngModel)]=\"row[head.key]\" name=\"checkbox_{{row['id']}}\" type=\"checkbox\"/>\n }\n }\n @if (!head.type) {\n {{ row[head.key] }}\n }\n @if (head.type === 'html') {\n <span [innerHTML]=\"row[head.key] | safeLimitedHtml\"></span>\n }\n @if (head.type === 'badge') {\n <span class=\"badge {{ row[head.key + 'Badge'] }}\">{{ row[head.key] }}</span>\n }\n @if (head.type === 'date') {\n {{ row[head.key] | date: head.dateFormat ? head.dateFormat : \"dd.MM.yyyy\" }}\n }\n @if (head.type === 'datetime') {\n {{ row[head.key] | date: head.dateFormat ? head.dateFormat : \"dd.MM.yyyy HH:mm:ss\" }}\n }\n @if (head.type === 'image') {\n @if (row[head.key] && row[head.key] !== '') {\n <img alt=\"img\" [attr.src]=\"row[head.key]\"\n width=\"{{head?.imageSize?.width || 50}}\" height=\"{{head?.imageSize?.height || 50}}\"/>\n }\n }\n @if (head.type === 'url') {\n <a [attr.href]=\"row[head.key]\" target=\"{{head?.urlTarget || '_blank'}}\">{{ row[head.key] }}</a>\n }\n @if (head.type === 'slider') {\n <div class=\"form-check form-switch\">\n <input\n (change)=\"sliderClicked.emit(row)\"\n [checked]=\"row[head.key]\"\n class=\"switched\"\n id=\"check-{{ row['id'] }}\"\n type=\"checkbox\"\n value=\"true\"\n />\n <label for=\"check-{{ row['id'] }}\"></label>\n </div>\n }\n\n @if (head.type === 'input') {\n <input [(ngModel)]=\"row[head.key]\" type=\"text\" name=\"input_{{row['id']}}\"/>\n }\n </td>\n }\n }\n @if (tableHeadStorage() || (rowActions() && rowActions().length)) {\n <td class=\"small-column\">\n <div class=\"menu text-end\">\n @for (action of rowActions(); track (action.label || '') + '_' + $index) {\n @if (row | visibleRowAction: action.visibilityRule : enableLog()) {\n <button\n (click)=\"rowAction(action.actionName, row, $event)\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n tooltip=\"{{ action.label }}\"\n type=\"button\"\n >\n <span><i class=\"fa {{ action.faIcon }}\"></i></span>\n </button>\n } @else if (action.visibilityRule?.disabled) {\n <button\n [disabled]=\"true\"\n [ngClass]=\"{ 'btn-secondary': !action.btnColor }\"\n class=\"btn buttons-copy buttons-html5 btn-sm ms-2 {{ action.actionName }} {{ action.btnColor }}\"\n tooltip=\"{{ action.label }}\"\n type=\"button\"\n >\n <span><i class=\"fa {{ action.faIcon }}\"></i></span>\n </button>\n }\n }\n </div>\n </td>\n }\n </tr>\n }\n @if (inputTypeKey || checkboxTypeKey) {\n <tr>\n <td\n [colSpan]=\"tableHead().length - 1 + (rowCounter() ? 1 : 0) + ((tableHeadStorage() || (rowActions() && rowActions().length) ) ? 1 : 0)\">\n <button (click)=\"pushInputValues()\" class=\"btn buttons-copy buttons-html5 btn-sm ms-2 btn-secondary\">\n {{ translate(formSubmitLabel()) }}\n </button>\n </td>\n </tr>\n }\n </tbody>\n } @else {\n <tbody>\n <tr>\n <td\n [colSpan]=\"tableHead().length - 1 + (rowCounter() ? 1 : 0) + ((tableHeadStorage() || (rowActions() && rowActions().length) ) ? 1 : 0)\">\n <div class=\"alert alert-light\" role=\"alert\">\n <i class=\"fa fa-exclamation-triangle\"></i> {{ translate('NO_DATA_FOUND') }}\n </div>\n </td>\n </tr>\n </tbody>\n }\n </table>\n\n </div>\n @if (totalPages > 1) {\n <as-lib-pagination\n (pageChange)=\"pageChange($event)\"\n [align]=\"paginationAlignment()\"\n [enableLog]=\"enableLog()\"\n [first]=\"page() === 0\"\n [last]=\"page() === totalPages - 1\"\n [page]=\"page()\"\n [totalPages]=\"totalPages\"\n ></as-lib-pagination>\n }\n <ng-template #tableHeadModal>\n <div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ translate('EDIT_TABLE_HEADER') }}</h4>\n <button (click)=\"modalClose()\" aria-label=\"Close\" class=\"btn-close close pull-right\" type=\"button\">\n <span aria-hidden=\"true\" class=\"visually-hidden\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body\">\n @for (td of tableHead(); track td.key) {\n <div class=\"form-check form-switch\">\n <input\n (change)=\"handleTHchange(td.key)\"\n [checked]=\"!td.hidden\"\n [disabled]=\"td.mandatory\"\n [readOnly]=\"td.mandatory\"\n class=\"form-check-input\"\n id=\"{{ td.key }}\"\n role=\"switch\"\n type=\"checkbox\"\n value=\"true\"\n />\n <label class=\"form-check-label\" for=\"{{ td.key }}\">{{ td.label }} {{ td.mandatory ? \"*\" : \"\" }}</label>\n </div>\n }\n <small class=\"small text-muted pt-2\">* {{ translate('MANDATORY_FIELDS') }}</small>\n </div>\n <div class=\"modal-footer\">\n <button (click)=\"resetValues()\" class=\"btn btn-outline-secondary me-auto\" type=\"button\">{{ translate('RESET') }}\n </button>\n <button (click)=\"modalClose()\" class=\"btn btn-primary\" type=\"button\">{{ translate('SAVE') }}</button>\n </div>\n </ng-template>\n</div>\n","/*\n * Public API Surface of as-lib-generic-table\n */\n\nexport * from './lib/as-lib-generic-table.service';\nexport * from './lib/as-lib-generic-table.component';\nexport * from './lib/exports';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -24,7 +24,7 @@ interface IActionButton {
24
24
  interface ITableHead {
25
25
  hidden?: boolean;
26
26
  key: string;
27
- type?: 'select' | 'date' | 'datetime' | 'slider' | 'input' | 'badge' | 'image' | 'url' | 'html';
27
+ type?: 'checkbox' | 'date' | 'datetime' | 'slider' | 'input' | 'badge' | 'image' | 'url' | 'html';
28
28
  label?: string;
29
29
  sort?: '' | 'headerSortDown' | 'headerSortUp';
30
30
  mandatory?: boolean;
@@ -40,6 +40,12 @@ interface ITableHead {
40
40
  value: any;
41
41
  class: string;
42
42
  })[];
43
+ visibilityFieldRule?: ({
44
+ rule: '>' | '<' | '=' | '<>' | 'in';
45
+ key: string;
46
+ value: any;
47
+ disabled?: boolean;
48
+ });
43
49
  imageSize?: {
44
50
  width: number;
45
51
  height: number;
@@ -82,6 +88,7 @@ declare class AsLibGenericTableComponent {
82
88
  searchString: _angular_core.InputSignal<string | undefined>;
83
89
  sort: _angular_core.InputSignal<string>;
84
90
  order: _angular_core.InputSignal<"asc" | "desc">;
91
+ formSubmitLabel: _angular_core.InputSignal<string>;
85
92
  availableTranslations: Record<string, Record<string, string>>;
86
93
  translations: Record<string, string>;
87
94
  private currentLanguage;
@@ -96,7 +103,8 @@ declare class AsLibGenericTableComponent {
96
103
  tableHeadChanged: _angular_core.OutputEmitterRef<string[] | null>;
97
104
  pushedInputValues: _angular_core.OutputEmitterRef<{
98
105
  id: string;
99
- value: string;
106
+ value: string | boolean;
107
+ key: string;
100
108
  }[]>;
101
109
  bsModalRef: BsModalRef;
102
110
  searchUpdate: Subject<string>;
@@ -109,6 +117,7 @@ declare class AsLibGenericTableComponent {
109
117
  private modalService;
110
118
  private deepLinkDone;
111
119
  inputTypeKey: string;
120
+ checkboxTypeKey: string;
112
121
  constructor(language$: Observable<string>);
113
122
  init(): void;
114
123
  private badgeClassRules;
@@ -139,7 +148,7 @@ declare class AsLibGenericTableComponent {
139
148
  pushInputValues(): void;
140
149
  protected translate(key: string): string;
141
150
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AsLibGenericTableComponent, [{ optional: true; }]>;
142
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AsLibGenericTableComponent, "as-lib-generic-table", never, { "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "striped": { "alias": "striped"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "hovered": { "alias": "hovered"; "required": false; "isSignal": true; }; "enableSearch": { "alias": "enableSearch"; "required": false; "isSignal": true; }; "rowCounter": { "alias": "rowCounter"; "required": false; "isSignal": true; }; "enableLog": { "alias": "enableLog"; "required": false; "isSignal": true; }; "perPage": { "alias": "perPage"; "required": false; "isSignal": true; }; "tableHead": { "alias": "tableHead"; "required": false; "isSignal": true; }; "tableData": { "alias": "tableData"; "required": false; "isSignal": true; }; "tableHeadStorage": { "alias": "tableHeadStorage"; "required": false; "isSignal": true; }; "perPageValues": { "alias": "perPageValues"; "required": false; "isSignal": true; }; "headerActions": { "alias": "headerActions"; "required": false; "isSignal": true; }; "rowActions": { "alias": "rowActions"; "required": false; "isSignal": true; }; "tableStyle": { "alias": "tableStyle"; "required": false; "isSignal": true; }; "headStyle": { "alias": "headStyle"; "required": false; "isSignal": true; }; "paginationAlignment": { "alias": "paginationAlignment"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; "selectableKey": { "alias": "selectableKey"; "required": false; "isSignal": true; }; "selectableClass": { "alias": "selectableClass"; "required": false; "isSignal": true; }; "searchString": { "alias": "searchString"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "order": { "alias": "order"; "required": false; "isSignal": true; }; }, { "filterParamsChanged": "filterParamsChanged"; "editRow": "editRow"; "sliderClicked": "sliderClicked"; "headerActionClicked": "headerActionClicked"; "rowActionClicked": "rowActionClicked"; "tableHeadChanged": "tableHeadChanged"; "pushedInputValues": "pushedInputValues"; }, never, never, true, never>;
151
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AsLibGenericTableComponent, "as-lib-generic-table", never, { "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "striped": { "alias": "striped"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "hovered": { "alias": "hovered"; "required": false; "isSignal": true; }; "enableSearch": { "alias": "enableSearch"; "required": false; "isSignal": true; }; "rowCounter": { "alias": "rowCounter"; "required": false; "isSignal": true; }; "enableLog": { "alias": "enableLog"; "required": false; "isSignal": true; }; "perPage": { "alias": "perPage"; "required": false; "isSignal": true; }; "tableHead": { "alias": "tableHead"; "required": false; "isSignal": true; }; "tableData": { "alias": "tableData"; "required": false; "isSignal": true; }; "tableHeadStorage": { "alias": "tableHeadStorage"; "required": false; "isSignal": true; }; "perPageValues": { "alias": "perPageValues"; "required": false; "isSignal": true; }; "headerActions": { "alias": "headerActions"; "required": false; "isSignal": true; }; "rowActions": { "alias": "rowActions"; "required": false; "isSignal": true; }; "tableStyle": { "alias": "tableStyle"; "required": false; "isSignal": true; }; "headStyle": { "alias": "headStyle"; "required": false; "isSignal": true; }; "paginationAlignment": { "alias": "paginationAlignment"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; "selectableKey": { "alias": "selectableKey"; "required": false; "isSignal": true; }; "selectableClass": { "alias": "selectableClass"; "required": false; "isSignal": true; }; "searchString": { "alias": "searchString"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "order": { "alias": "order"; "required": false; "isSignal": true; }; "formSubmitLabel": { "alias": "formSubmitLabel"; "required": false; "isSignal": true; }; }, { "filterParamsChanged": "filterParamsChanged"; "editRow": "editRow"; "sliderClicked": "sliderClicked"; "headerActionClicked": "headerActionClicked"; "rowActionClicked": "rowActionClicked"; "tableHeadChanged": "tableHeadChanged"; "pushedInputValues": "pushedInputValues"; }, never, never, true, never>;
143
152
  }
144
153
 
145
154
  export { AsLibGenericTableComponent, AsLibGenericTableService, LANG_TABLE };
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@agentsmith.bgd/as-lib-generic-table",
3
- "version": "20.0.8",
3
+ "version": "20.0.10",
4
4
  "peerDependencies": {
5
- "@angular/common": "^20.1.4",
6
- "@angular/core": "^20.1.4",
5
+ "@angular/common": "^20.3.16",
6
+ "@angular/core": "^20.3.16",
7
7
  "@agentsmith.bgd/as-lib-pagination": "^20.0.1",
8
8
  "font-awesome": "^4.7.0",
9
- "ngx-bootstrap": "^20.0.0",
9
+ "ngx-bootstrap": "^20.0.2",
10
10
  "ngx-pipes": "^3.2.2",
11
11
  "rxjs": "~7.8.2"
12
12
  },