@smartbit4all/ng-client 6.0.53 → 6.0.55

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.
Files changed (23) hide show
  1. package/esm2022/lib/smart-client/smart-component-api-client.mjs +4 -1
  2. package/esm2022/lib/smart-component-layout/smart-component-layout-utility.mjs +22 -1
  3. package/esm2022/lib/smart-component-layout/smart-component-layout.component.mjs +25 -23
  4. package/esm2022/lib/smart-component-layout/smart-component-layout.module.mjs +5 -1
  5. package/esm2022/lib/smart-filter-editor/project.mjs +2 -1
  6. package/esm2022/lib/smart-filter-editor/smart-filter-editor-content/smart-filter-editor-content.component.mjs +1 -1
  7. package/esm2022/lib/smart-filter-editor/smart-filter-editor.module.mjs +8 -3
  8. package/esm2022/lib/smart-filter-editor/smart-filter-widget/smart-filter-widget.component.mjs +58 -0
  9. package/esm2022/lib/smart-table/tables/material-table/material-table.component.mjs +7 -9
  10. package/esm2022/lib/smart-table/tables/mobile-table/mobile-table.component.mjs +3 -3
  11. package/esm2022/lib/smart-table/tables/table.mjs +2 -29
  12. package/fesm2022/smartbit4all-ng-client.mjs +868 -813
  13. package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
  14. package/lib/smart-component-layout/smart-component-layout-utility.d.ts +6 -0
  15. package/lib/smart-component-layout/smart-component-layout.component.d.ts +6 -4
  16. package/lib/smart-component-layout/smart-component-layout.module.d.ts +4 -3
  17. package/lib/smart-filter-editor/project.d.ts +1 -0
  18. package/lib/smart-filter-editor/smart-filter-editor.module.d.ts +9 -8
  19. package/lib/smart-filter-editor/smart-filter-widget/smart-filter-widget.component.d.ts +23 -0
  20. package/lib/smart-table/tables/table.d.ts +1 -3
  21. package/package.json +1 -1
  22. package/smartbit4all-ng-client-6.0.55.tgz +0 -0
  23. package/smartbit4all-ng-client-6.0.53.tgz +0 -0
@@ -11986,7 +11986,7 @@ class Table {
11986
11986
  widgetId: gridId,
11987
11987
  };
11988
11988
  }
11989
- getRowMenuActionModelArray(element) {
11989
+ getMenuActions(element) {
11990
11990
  var cacheKey = element.id;
11991
11991
  if (this.rowMenuActionModelArrayCache.has(cacheKey)) {
11992
11992
  return this.rowMenuActionModelArrayCache.get(cacheKey);
@@ -11999,33 +11999,6 @@ class Table {
11999
11999
  shouldShowMenuButton(row) {
12000
12000
  return SmartGridToolbarActionsUtil.showMenu(row, this.smartTable.tableHeaders);
12001
12001
  }
12002
- // OLD STUFF
12003
- getMenuButtons(row, button) {
12004
- let columnActions = row.columnActions ?? {};
12005
- // Filter for columnActions that are in a columnAction, but the column is not in the headers
12006
- let filteredActionColumns = Object.keys(columnActions)
12007
- .filter((key) => this.smartTable.tableHeaders.includes('data.' + key))
12008
- .reduce((acc, key) => {
12009
- acc[key] = columnActions[key];
12010
- return acc;
12011
- }, {});
12012
- let columnCodes = Object.values(filteredActionColumns).flat();
12013
- return (button.menuItemButtons || []).filter((btn) => !columnCodes.includes(btn.code));
12014
- }
12015
- getMenuItemButtonsPropertyName(element, button) {
12016
- let buttons = this.getValue(element, button.menuItemButtonsPropertyName);
12017
- let gridRow = element;
12018
- let columnActions = gridRow.columnActions ?? {};
12019
- // Filter for columnActions that are in a columnAction, but the column is not in the headers
12020
- let filteredActionColumns = Object.keys(columnActions)
12021
- .filter((key) => this.smartTable.tableHeaders.includes('data.' + key))
12022
- .reduce((acc, key) => {
12023
- acc[key] = columnActions[key];
12024
- return acc;
12025
- }, {});
12026
- let columnCodes = Object.values(filteredActionColumns || {}).flat();
12027
- return buttons?.filter((button) => !columnCodes.includes(button.code));
12028
- }
12029
12002
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: Table, deps: [{ token: ComponentFactoryService }], target: i0.ɵɵFactoryTarget.Component }); }
12030
12003
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: Table, selector: "ng-component", inputs: { smartTable: "smartTable" }, viewQueries: [{ propertyName: "myTableChild", first: true, predicate: ["myTable"], descendants: true }, { propertyName: "headerToolbar", first: true, predicate: ["headerToolbar"], descendants: true }, { propertyName: "vcRef", predicate: ["expandedArea"], descendants: true, read: ViewContainerRef }, { propertyName: "defaultActionMenuComponents", predicate: DefaultActionsPopupComponent, descendants: true }, { propertyName: "triggers", predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: '', isInline: true }); }
12031
12004
  }
@@ -12098,7 +12071,7 @@ class MaterialTableComponent extends Table {
12098
12071
  super(cfService);
12099
12072
  }
12100
12073
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MaterialTableComponent, deps: [{ token: ComponentFactoryService }], target: i0.ɵɵFactoryTarget.Component }); }
12101
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: MaterialTableComponent, selector: "lib-material-table", usesInheritance: true, ngImport: i0, template: "<table\n #myTable\n mat-table\n [dataSource]=\"smartTable.tableRows\"\n class=\"full-width\"\n multiTemplateDataRows\n>\n <!-- Column Descriptor -->\n @if (smartTable.title) {\n <caption *ngIf=\"smartTable.title\" class=\"captionTitle\">\n {{ smartTable.title }}\n </caption>\n }\n <ng-container\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\n matColumnDef=\"{{ header }}\"\n >\n <!-- my_menu is the implicit action column present on all tables: -->\n @if ('my_menu' === header) {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\n >\n <smart-ui-action-toolbar\n #headerToolbar\n [id]=\"\n smartTable.getGridId()\n ? smartTable.getGridId() + '_headerToolbar'\n : 'grid_not_initialized'\n \"\n >\n </smart-ui-action-toolbar>\n </th>\n } @else {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\n >\n <div\n *ngIf=\"\n header === 'icon' || header === 'img' || header === 'options' || header === 'button'\n \"\n ></div>\n <div *ngIf=\"header === 'select'\">\n <mat-checkbox\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\n [aria-label]=\"checkboxLabel()\"\n >\n </mat-checkbox>\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\n {{ smartTable.customTableHeaders[i] }}\n </div>\n </div>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'options' &&\n header !== 'button' &&\n header !== 'select' &&\n header !== 'expand' &&\n header !== 'actions'\n \"\n >\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\n <ng-template #sortable>\n <button\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\n mat-button\n class=\"sortableHeaderButton\"\n >\n {{ smartTable.customTableHeaders[i] }}\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"getSortIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortIcon(header)!\"\n ></smart-icon>\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"hasSortNumIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortNumIcon(header)\"\n ></smart-icon>\n </button>\n </ng-template>\n <ng-template #notSortable>\n {{ smartTable.customTableHeaders[i] }}\n </ng-template>\n </div>\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\">\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\n !isDisabled(element)\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n : null\n \"\n [disabled]=\"isDisabled(element)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(element, header)\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(element, header)\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(element, header)\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox [disabled]=\"true\" [checked]=\"getValue(element, header)\"></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(element, i)\"\n [icon]=\"getIcon(getValue(element, header), i)!\"\n [color]=\"getColor(getValue(element, header), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div class=\"smart-table-icon-container\">\n <div *ngFor=\"let ir of getImageResourceIcons(element, header)\">\n <smart-icon [imageResource]=\"ir\"> </smart-icon>\n </div>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <!------ MENU ------>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n\n <!------ GENERIC HAMBURGER ------>\n <!------ TOOLBAR ------>\n <button\n *ngIf=\"showMenuButton(element, button)\"\n mat-button\n [matMenuTriggerFor]=\"menu\"\n (click)=\"customButtonClicked($event, button, element, undefined, true)\"\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n <!-- {{ button.label ?? (button.translator ? button.translator(element).title : '') }} -->\n </button>\n <mat-menu #menu=\"matMenu\">\n <div *ngIf=\"button.menuItemButtons\">\n <button\n *ngFor=\"let btn of getMenuButtons(element, button)\"\n (click)=\"customButtonClicked($event, btn, element, undefined, true)\"\n mat-menu-item\n >\n <smart-icon\n *ngIf=\"btn?.translator(btn)?.icon\"\n [icon]=\"btn!.translator!(btn)!.icon!\"\n ></smart-icon>\n {{ btn?.translator(btn)?.title }}\n </button>\n </div>\n <div *ngIf=\"button.menuItemButtonsPropertyName\">\n <div *ngFor=\"let btn of getMenuItemButtonsPropertyName(element, button)\">\n <button\n *ngIf=\"btn.code !== ACTION_SEPERATOR\"\n (click)=\"customButtonClicked($event, button, element, btn, true)\"\n mat-menu-item\n [disabled]=\"btn.disabled\"\n [smartTooltip]=\"\n btn?.descriptor?.tooltip\n ? btn?.descriptor?.tooltip\n : button.translator!(btn).tooltip\n \"\n >\n <div\n class=\"smart-table-icon-container\"\n [ngClass]=\"\n button.translator!(btn).iconPosition === 'POST' ? 'reversed' : ''\n \"\n ><smart-icon\n *ngIf=\"button.translator!(btn).icon\"\n [icon]=\"button.translator!(btn).icon!\"\n ></smart-icon>\n {{ button.translator!(btn).title }}</div\n >\n </button>\n <mat-divider *ngIf=\"btn.code === ACTION_SEPERATOR\"></mat-divider>\n </div>\n </div>\n </mat-menu>\n </div>\n\n <!------ MENU ------>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\n </div>\n <button\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\n \"\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"onToggle(element, $event)\"\n >\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\n </button>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\n <img\n *ngIf=\"header === 'img'\"\n [src]=\"getValue(element, header)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <!------ TOOLBAR ------>\n <ng-container *ngIf=\"showCellToolbar(element, header)\">\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, header)\"\n ></smart-ui-action-toolbar>\n </ng-container>\n <!------ TOOLBAR ------>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'option' &&\n header !== 'button' &&\n !isImageResource(element, header)\n \"\n [innerHtml]=\"getValue(element, header)\"\n ></div>\n </div>\n </td>\n </ng-container>\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\n <div\n class=\"example-element-detail\"\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\n >\n <ng-template #expandedArea></ng-template>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\n <ng-container *matRowDef=\"let element; columns: smartTable.tableHeaders\">\n <tr\n mat-row\n class=\"example-element-row\"\n [class.example-expanded-row]=\"expandedElement === element\"\n [ngClass]=\"getRowClasses(element)\"\n [ngStyle]=\"getRowStyles(element)\"\n (click)=\"handleOnRowClick(element)\"\n (dblclick)=\"handleOnRowDoubleClick($event, element)\"\n [attr.data-testid]=\"element?.id ?? null\"\n ></tr>\n <lib-default-actions-popup\n *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\"\n #defaultActionMenu\n [buttons]=\"getDefaultActionsForRow(element)!\"\n [row]=\"element\"\n ></lib-default-actions-popup>\n </ng-container>\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\n</table>\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:#f5f5f5}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.reversed{flex-direction:row-reverse;gap:1rem}:host ::ng-deep .mat-mdc-menu-item{line-height:normal!important}.mat-mdc-menu-item[disabled]{cursor:default!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.captionTitle{font-size:1.5rem;align-content:center;padding:.5rem .75rem;text-align:start;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);background:#f5f5f5}\n"], dependencies: [{ kind: "directive", type: SmartTooltipDirective, selector: "[smartTooltip]", inputs: ["smartTooltip"] }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i4$3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i5$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "component", type: DefaultActionsPopupComponent, selector: "lib-default-actions-popup", inputs: ["buttons", "row", "colIdx"] }, { kind: "pipe", type: SmartDateTimePipe, name: "smartDateTime" }, { kind: "pipe", type: SmartDatePipe, name: "smartDate" }, { kind: "pipe", type: SmartTimePipe, name: "smartTime" }], animations: [
12074
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: MaterialTableComponent, selector: "lib-material-table", usesInheritance: true, ngImport: i0, template: "<table\n #myTable\n mat-table\n [dataSource]=\"smartTable.tableRows\"\n class=\"full-width\"\n multiTemplateDataRows\n>\n <!-- Column Descriptor -->\n @if (smartTable.title) {\n <caption *ngIf=\"smartTable.title\" class=\"captionTitle\">\n {{ smartTable.title }}\n </caption>\n }\n <ng-container\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\n matColumnDef=\"{{ header }}\"\n >\n <!-- my_menu is the implicit action column present on all tables: -->\n @if ('my_menu' === header) {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\n >\n <smart-ui-action-toolbar\n #headerToolbar\n [id]=\"\n smartTable.getGridId()\n ? smartTable.getGridId() + '_headerToolbar'\n : 'grid_not_initialized'\n \"\n >\n </smart-ui-action-toolbar>\n </th>\n } @else {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\n >\n <div\n *ngIf=\"\n header === 'icon' || header === 'img' || header === 'options' || header === 'button'\n \"\n ></div>\n <div *ngIf=\"header === 'select'\">\n <mat-checkbox\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\n [aria-label]=\"checkboxLabel()\"\n >\n </mat-checkbox>\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\n {{ smartTable.customTableHeaders[i] }}\n </div>\n </div>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'options' &&\n header !== 'button' &&\n header !== 'select' &&\n header !== 'expand' &&\n header !== 'actions'\n \"\n >\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\n <ng-template #sortable>\n <button\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\n mat-button\n class=\"sortableHeaderButton\"\n >\n {{ smartTable.customTableHeaders[i] }}\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"getSortIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortIcon(header)!\"\n ></smart-icon>\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"hasSortNumIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortNumIcon(header)\"\n ></smart-icon>\n </button>\n </ng-template>\n <ng-template #notSortable>\n {{ smartTable.customTableHeaders[i] }}\n </ng-template>\n </div>\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\">\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\n !isDisabled(element)\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n : null\n \"\n [disabled]=\"isDisabled(element)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(element, header)\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(element, header)\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(element, header)\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox [disabled]=\"true\" [checked]=\"getValue(element, header)\"></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(element, i)\"\n [icon]=\"getIcon(getValue(element, header), i)!\"\n [color]=\"getColor(getValue(element, header), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div class=\"smart-table-icon-container\">\n <div *ngFor=\"let ir of getImageResourceIcons(element, header)\">\n <smart-icon [imageResource]=\"ir\"> </smart-icon>\n </div>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <!------ MENU ------>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n <!------ GENERIC HAMBURGER ------>\n <!------ TOOLBAR ------>\n @if (shouldShowMenuButton(element)) {\n <smart-ui-action-toolbar\n [uiActionModels]=\"getMenuActions(element)\"\n ></smart-ui-action-toolbar>\n }\n </div>\n <!------ MENU ------>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\n </div>\n <button\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\n \"\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"onToggle(element, $event)\"\n >\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\n </button>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\n <img\n *ngIf=\"header === 'img'\"\n [src]=\"getValue(element, header)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <!------ TOOLBAR ------>\n <ng-container *ngIf=\"showCellToolbar(element, header)\">\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, header)\"\n ></smart-ui-action-toolbar>\n </ng-container>\n <!------ TOOLBAR ------>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'option' &&\n header !== 'button' &&\n !isImageResource(element, header)\n \"\n [innerHtml]=\"getValue(element, header)\"\n ></div>\n </div>\n </td>\n </ng-container>\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\n <div\n class=\"example-element-detail\"\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\n >\n <ng-template #expandedArea></ng-template>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\n <ng-container *matRowDef=\"let element; columns: smartTable.tableHeaders\">\n <tr\n mat-row\n class=\"example-element-row\"\n [class.example-expanded-row]=\"expandedElement === element\"\n [ngClass]=\"getRowClasses(element)\"\n [ngStyle]=\"getRowStyles(element)\"\n (click)=\"handleOnRowClick(element)\"\n (dblclick)=\"handleOnRowDoubleClick($event, element)\"\n [attr.data-testid]=\"element?.id ?? null\"\n ></tr>\n <lib-default-actions-popup\n *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\"\n #defaultActionMenu\n [buttons]=\"getDefaultActionsForRow(element)!\"\n [row]=\"element\"\n ></lib-default-actions-popup>\n </ng-container>\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\n</table>\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:#f5f5f5}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.reversed{flex-direction:row-reverse;gap:1rem}:host ::ng-deep .mat-mdc-menu-item{line-height:normal!important}.mat-mdc-menu-item[disabled]{cursor:default!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.captionTitle{font-size:1.5rem;align-content:center;padding:.5rem .75rem;text-align:start;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);background:#f5f5f5}\n"], dependencies: [{ kind: "directive", type: SmartTooltipDirective, selector: "[smartTooltip]", inputs: ["smartTooltip"] }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i4$3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "component", type: DefaultActionsPopupComponent, selector: "lib-default-actions-popup", inputs: ["buttons", "row", "colIdx"] }, { kind: "pipe", type: SmartDateTimePipe, name: "smartDateTime" }, { kind: "pipe", type: SmartDatePipe, name: "smartDate" }, { kind: "pipe", type: SmartTimePipe, name: "smartTime" }], animations: [
12102
12075
  trigger('detailExpand', [
12103
12076
  state('collapsed', style({ height: '0px', minHeight: '0' })),
12104
12077
  state('expanded', style({ height: '*' })),
@@ -12114,7 +12087,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
12114
12087
  state('expanded', style({ height: '*' })),
12115
12088
  transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
12116
12089
  ]),
12117
- ], template: "<table\n #myTable\n mat-table\n [dataSource]=\"smartTable.tableRows\"\n class=\"full-width\"\n multiTemplateDataRows\n>\n <!-- Column Descriptor -->\n @if (smartTable.title) {\n <caption *ngIf=\"smartTable.title\" class=\"captionTitle\">\n {{ smartTable.title }}\n </caption>\n }\n <ng-container\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\n matColumnDef=\"{{ header }}\"\n >\n <!-- my_menu is the implicit action column present on all tables: -->\n @if ('my_menu' === header) {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\n >\n <smart-ui-action-toolbar\n #headerToolbar\n [id]=\"\n smartTable.getGridId()\n ? smartTable.getGridId() + '_headerToolbar'\n : 'grid_not_initialized'\n \"\n >\n </smart-ui-action-toolbar>\n </th>\n } @else {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\n >\n <div\n *ngIf=\"\n header === 'icon' || header === 'img' || header === 'options' || header === 'button'\n \"\n ></div>\n <div *ngIf=\"header === 'select'\">\n <mat-checkbox\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\n [aria-label]=\"checkboxLabel()\"\n >\n </mat-checkbox>\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\n {{ smartTable.customTableHeaders[i] }}\n </div>\n </div>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'options' &&\n header !== 'button' &&\n header !== 'select' &&\n header !== 'expand' &&\n header !== 'actions'\n \"\n >\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\n <ng-template #sortable>\n <button\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\n mat-button\n class=\"sortableHeaderButton\"\n >\n {{ smartTable.customTableHeaders[i] }}\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"getSortIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortIcon(header)!\"\n ></smart-icon>\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"hasSortNumIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortNumIcon(header)\"\n ></smart-icon>\n </button>\n </ng-template>\n <ng-template #notSortable>\n {{ smartTable.customTableHeaders[i] }}\n </ng-template>\n </div>\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\">\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\n !isDisabled(element)\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n : null\n \"\n [disabled]=\"isDisabled(element)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(element, header)\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(element, header)\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(element, header)\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox [disabled]=\"true\" [checked]=\"getValue(element, header)\"></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(element, i)\"\n [icon]=\"getIcon(getValue(element, header), i)!\"\n [color]=\"getColor(getValue(element, header), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div class=\"smart-table-icon-container\">\n <div *ngFor=\"let ir of getImageResourceIcons(element, header)\">\n <smart-icon [imageResource]=\"ir\"> </smart-icon>\n </div>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <!------ MENU ------>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n\n <!------ GENERIC HAMBURGER ------>\n <!------ TOOLBAR ------>\n <button\n *ngIf=\"showMenuButton(element, button)\"\n mat-button\n [matMenuTriggerFor]=\"menu\"\n (click)=\"customButtonClicked($event, button, element, undefined, true)\"\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n <!-- {{ button.label ?? (button.translator ? button.translator(element).title : '') }} -->\n </button>\n <mat-menu #menu=\"matMenu\">\n <div *ngIf=\"button.menuItemButtons\">\n <button\n *ngFor=\"let btn of getMenuButtons(element, button)\"\n (click)=\"customButtonClicked($event, btn, element, undefined, true)\"\n mat-menu-item\n >\n <smart-icon\n *ngIf=\"btn?.translator(btn)?.icon\"\n [icon]=\"btn!.translator!(btn)!.icon!\"\n ></smart-icon>\n {{ btn?.translator(btn)?.title }}\n </button>\n </div>\n <div *ngIf=\"button.menuItemButtonsPropertyName\">\n <div *ngFor=\"let btn of getMenuItemButtonsPropertyName(element, button)\">\n <button\n *ngIf=\"btn.code !== ACTION_SEPERATOR\"\n (click)=\"customButtonClicked($event, button, element, btn, true)\"\n mat-menu-item\n [disabled]=\"btn.disabled\"\n [smartTooltip]=\"\n btn?.descriptor?.tooltip\n ? btn?.descriptor?.tooltip\n : button.translator!(btn).tooltip\n \"\n >\n <div\n class=\"smart-table-icon-container\"\n [ngClass]=\"\n button.translator!(btn).iconPosition === 'POST' ? 'reversed' : ''\n \"\n ><smart-icon\n *ngIf=\"button.translator!(btn).icon\"\n [icon]=\"button.translator!(btn).icon!\"\n ></smart-icon>\n {{ button.translator!(btn).title }}</div\n >\n </button>\n <mat-divider *ngIf=\"btn.code === ACTION_SEPERATOR\"></mat-divider>\n </div>\n </div>\n </mat-menu>\n </div>\n\n <!------ MENU ------>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\n </div>\n <button\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\n \"\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"onToggle(element, $event)\"\n >\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\n </button>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\n <img\n *ngIf=\"header === 'img'\"\n [src]=\"getValue(element, header)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <!------ TOOLBAR ------>\n <ng-container *ngIf=\"showCellToolbar(element, header)\">\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, header)\"\n ></smart-ui-action-toolbar>\n </ng-container>\n <!------ TOOLBAR ------>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'option' &&\n header !== 'button' &&\n !isImageResource(element, header)\n \"\n [innerHtml]=\"getValue(element, header)\"\n ></div>\n </div>\n </td>\n </ng-container>\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\n <div\n class=\"example-element-detail\"\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\n >\n <ng-template #expandedArea></ng-template>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\n <ng-container *matRowDef=\"let element; columns: smartTable.tableHeaders\">\n <tr\n mat-row\n class=\"example-element-row\"\n [class.example-expanded-row]=\"expandedElement === element\"\n [ngClass]=\"getRowClasses(element)\"\n [ngStyle]=\"getRowStyles(element)\"\n (click)=\"handleOnRowClick(element)\"\n (dblclick)=\"handleOnRowDoubleClick($event, element)\"\n [attr.data-testid]=\"element?.id ?? null\"\n ></tr>\n <lib-default-actions-popup\n *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\"\n #defaultActionMenu\n [buttons]=\"getDefaultActionsForRow(element)!\"\n [row]=\"element\"\n ></lib-default-actions-popup>\n </ng-container>\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\n</table>\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:#f5f5f5}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.reversed{flex-direction:row-reverse;gap:1rem}:host ::ng-deep .mat-mdc-menu-item{line-height:normal!important}.mat-mdc-menu-item[disabled]{cursor:default!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.captionTitle{font-size:1.5rem;align-content:center;padding:.5rem .75rem;text-align:start;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);background:#f5f5f5}\n"] }]
12090
+ ], template: "<table\n #myTable\n mat-table\n [dataSource]=\"smartTable.tableRows\"\n class=\"full-width\"\n multiTemplateDataRows\n>\n <!-- Column Descriptor -->\n @if (smartTable.title) {\n <caption *ngIf=\"smartTable.title\" class=\"captionTitle\">\n {{ smartTable.title }}\n </caption>\n }\n <ng-container\n *ngFor=\"let header of smartTable.tableHeaders; let i = index\"\n matColumnDef=\"{{ header }}\"\n >\n <!-- my_menu is the implicit action column present on all tables: -->\n @if ('my_menu' === header) {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\n >\n <smart-ui-action-toolbar\n #headerToolbar\n [id]=\"\n smartTable.getGridId()\n ? smartTable.getGridId() + '_headerToolbar'\n : 'grid_not_initialized'\n \"\n >\n </smart-ui-action-toolbar>\n </th>\n } @else {\n <th\n mat-header-cell\n *matHeaderCellDef\n [ngClass]=\"getColumnClasses(smartTable.customSmartTableHeaders![i])\"\n [ngStyle]=\"getColumnStyles(smartTable.customSmartTableHeaders![i])\"\n [attr.data-testid]=\"smartTable.customSmartTableHeaders![i].propertyName\"\n >\n <div\n *ngIf=\"\n header === 'icon' || header === 'img' || header === 'options' || header === 'button'\n \"\n ></div>\n <div *ngIf=\"header === 'select'\">\n <mat-checkbox\n *ngIf=\"smartTable.customSmartTableHeaders![i].showCheckboxInHeader\"\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"smartTable.selection!.hasValue() && isAllSelected()\"\n [indeterminate]=\"smartTable.selection!.hasValue() && !isAllSelected()\"\n [aria-label]=\"checkboxLabel()\"\n >\n </mat-checkbox>\n <div *ngIf=\"!smartTable.customSmartTableHeaders![i].showCheckboxInHeader\">\n {{ smartTable.customTableHeaders[i] }}\n </div>\n </div>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'options' &&\n header !== 'button' &&\n header !== 'select' &&\n header !== 'expand' &&\n header !== 'actions'\n \"\n >\n <div *ngIf=\"smartTable.sortable; then sortable; else notSortable\"></div>\n <ng-template #sortable>\n <button\n (click)=\"sortButtonClicked($event, smartTable.customSmartTableHeaders![i])\"\n *ngIf=\"smartTable.sortable && isSortable(smartTable.customSmartTableHeaders![i])\"\n mat-button\n class=\"sortableHeaderButton\"\n >\n {{ smartTable.customTableHeaders[i] }}\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"getSortIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortIcon(header)!\"\n ></smart-icon>\n <smart-icon\n class=\"sortableHeaderButtonIcon\"\n *ngIf=\"hasSortNumIcon(header)\"\n title=\"sort\"\n [icon]=\"getSortNumIcon(header)\"\n ></smart-icon>\n </button>\n </ng-template>\n <ng-template #notSortable>\n {{ smartTable.customTableHeaders[i] }}\n </ng-template>\n </div>\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" [ngClass]=\"isDisabled(element) ? 'disabledRow' : ''\">\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select' &&\n !isDisabled(element)\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n : null\n \"\n [disabled]=\"isDisabled(element)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(element, smartTable.selectionProperty)\n : element\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(element, header)\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(element, header)\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(element, header)\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox [disabled]=\"true\" [checked]=\"getValue(element, header)\"></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(element, i)\"\n [icon]=\"getIcon(getValue(element, header), i)!\"\n [color]=\"getColor(getValue(element, header), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div class=\"smart-table-icon-container\">\n <div *ngFor=\"let ir of getImageResourceIcons(element, header)\">\n <smart-icon [imageResource]=\"ir\"> </smart-icon>\n </div>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, element)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, element)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label ?? (button.translator ? button.translator(element).title : '') }}\n </button>\n <!------ MENU ------>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n <!------ GENERIC HAMBURGER ------>\n <!------ TOOLBAR ------>\n @if (shouldShowMenuButton(element)) {\n <smart-ui-action-toolbar\n [uiActionModels]=\"getMenuActions(element)\"\n ></smart-ui-action-toolbar>\n }\n </div>\n <!------ MENU ------>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(element, header)) }}\n </div>\n <button\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'expand'\n \"\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"onToggle(element, $event)\"\n >\n <smart-icon *ngIf=\"expandedElement !== element\" [icon]=\"'keyboard_arrow_down'\"></smart-icon>\n <smart-icon *ngIf=\"expandedElement === element\" [icon]=\"'keyboard_arrow_up'\"></smart-icon>\n </button>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon *ngIf=\"header === 'icon'\" [icon]=\"getValue(element, header)!\"> </smart-icon>\n <img\n *ngIf=\"header === 'img'\"\n [src]=\"getValue(element, header)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <!------ TOOLBAR ------>\n <ng-container *ngIf=\"showCellToolbar(element, header)\">\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, header)\"\n ></smart-ui-action-toolbar>\n </ng-container>\n <!------ TOOLBAR ------>\n <div\n *ngIf=\"\n header !== 'icon' &&\n header !== 'img' &&\n header !== 'option' &&\n header !== 'button' &&\n !isImageResource(element, header)\n \"\n [innerHtml]=\"getValue(element, header)\"\n ></div>\n </div>\n </td>\n </ng-container>\n\n <!-- Expanded Content Column - The detail row is made up of this one column that spans across all columns -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"smartTable.tableHeaders.length\">\n <div\n class=\"example-element-detail\"\n [@detailExpand]=\"element == expandedElement ? 'expanded' : 'collapsed'\"\n >\n <ng-template #expandedArea></ng-template>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"smartTable.tableHeaders; sticky: true\"></tr>\n <ng-container *matRowDef=\"let element; columns: smartTable.tableHeaders\">\n <tr\n mat-row\n class=\"example-element-row\"\n [class.example-expanded-row]=\"expandedElement === element\"\n [ngClass]=\"getRowClasses(element)\"\n [ngStyle]=\"getRowStyles(element)\"\n (click)=\"handleOnRowClick(element)\"\n (dblclick)=\"handleOnRowDoubleClick($event, element)\"\n [attr.data-testid]=\"element?.id ?? null\"\n ></tr>\n <lib-default-actions-popup\n *ngIf=\"smartTable.defaultActionCodes && smartTable.defaultActionCodes.length > 0\"\n #defaultActionMenu\n [buttons]=\"getDefaultActionsForRow(element)!\"\n [row]=\"element\"\n ></lib-default-actions-popup>\n </ng-container>\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"example-detail-row\"></tr>\n</table>\n", styles: [".full-width{width:100%}.smarttableImg{width:25px}.smartTableRowHover:hover{cursor:pointer}tr.example-detail-row{height:0}tr.example-element-row:not(.example-expanded-row):hover{background:#f5f5f5}tr.example-element-row:not(.example-expanded-row):active{background:#efefef}.example-element-row td{border-bottom-width:0}.example-element-detail{overflow:hidden;display:flex;flex-direction:column}.example-element-diagram{min-width:80px;border:2px solid black;padding:8px;font-weight:lighter;margin:8px 0;height:104px}.example-element-symbol{font-weight:700;font-size:40px;line-height:normal}.example-element-description{padding:16px}.example-element-description-attribution{opacity:.5}.disabledRow{color:var(--disabled)}.disabledRow:hover{cursor:default}.smart-table-buttons-col{display:flex;flex-direction:row;justify-content:flex-end}.sortableHeaderButton{margin:0!important;padding:0!important;text-align:left!important}.selected{background-color:var(--primary-light-color)}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.reversed{flex-direction:row-reverse;gap:1rem}:host ::ng-deep .mat-mdc-menu-item{line-height:normal!important}.mat-mdc-menu-item[disabled]{cursor:default!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.captionTitle{font-size:1.5rem;align-content:center;padding:.5rem .75rem;text-align:start;border-top:1px solid rgba(0,0,0,.12);border-bottom:1px solid rgba(0,0,0,.12);background:#f5f5f5}\n"] }]
12118
12091
  }], ctorParameters: () => [{ type: ComponentFactoryService }] });
12119
12092
 
12120
12093
  class MobileTableComponent extends Table {
@@ -12122,11 +12095,11 @@ class MobileTableComponent extends Table {
12122
12095
  super(cfService);
12123
12096
  }
12124
12097
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MobileTableComponent, deps: [{ token: ComponentFactoryService }], target: i0.ɵɵFactoryTarget.Component }); }
12125
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: MobileTableComponent, selector: "lib-mobile-table", usesInheritance: true, ngImport: i0, template: "<div class=\"mobileTable\">\n <div\n class=\"mobileTableRow\"\n *ngFor=\"let row of smartTable.tableRows\"\n [ngClass]=\"getRowClasses(row)\"\n [ngStyle]=\"getRowStyles(row)\"\n [attr.data-testid]=\"row?.id ?? null\"\n >\n <div\n class=\"mobileTableCell\"\n *ngFor=\"let header of smartTable.customSmartTableHeaders; let i = index\"\n (click)=\"handleOnRowClick(row)\"\n (dblclick)=\"handleOnRowDoubleClick($event, row)\"\n >\n <div class=\"mobileTableCellHeader\" [attr.data-testid]=\"header.propertyName\">\n {{ header.label }}\n </div>\n\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select'\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n : null\n \"\n [disabled]=\"isDisabled(row)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(row, header.propertyName)\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(row, header.propertyName)\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(row, header.propertyName)\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox\n [disabled]=\"true\"\n [checked]=\"getValue(row, header.propertyName)\"\n ></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(row, i)\"\n [icon]=\"getIcon(getValue(row, header.propertyName), i)!\"\n [color]=\"getColor(getValue(row, header.propertyName), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div *ngIf=\"isImageResource(row, header.propertyName)\">\n <smart-icon\n [icon]=\"getImageResourceIcon(row, header.propertyName)\"\n [color]=\"getImageResourceColor(row, header.propertyName)\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, row)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label }}\n </button>\n <!------ MENU ------>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n\n <!------ GENERIC HAMBURGER ------>\n @if (shouldShowMenuButton(element)) {\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowMenuActionModelArray(element)\"\n ></smart-ui-action-toolbar>\n }\n <!------ MENU ------>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(row, header.propertyName)) }}\n </div>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon\n *ngIf=\"header.propertyName === 'icon'\"\n [icon]=\"getValue(row, header.propertyName)!\"\n >\n </smart-icon>\n <img\n *ngIf=\"header.propertyName === 'img'\"\n [src]=\"getValue(row, header.propertyName)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <div\n *ngIf=\"\n header.propertyName !== 'icon' &&\n header.propertyName !== 'img' &&\n header.propertyName !== 'option' &&\n header.propertyName !== 'button'\n \"\n [innerHtml]=\"getValue(row, header.propertyName)\"\n ></div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".mobileTable{display:flex;flex-direction:column}.mobileTableRow{display:flex;flex-direction:column;border-bottom:1px solid #ccc;padding:.5rem;gap:.5rem}.mobileTableCell{display:flex;flex-direction:column;gap:.25rem}.mobileTableCellHeader{font-weight:700;color:var(--primary-color)}.selected{background-color:var(--primary-light-color)}.mat-mdc-menu-item[disabled]{cursor:default!important}\n"], dependencies: [{ kind: "directive", type: SmartTooltipDirective, selector: "[smartTooltip]", inputs: ["smartTooltip"] }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i4$3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "pipe", type: SmartDateTimePipe, name: "smartDateTime" }, { kind: "pipe", type: SmartDatePipe, name: "smartDate" }, { kind: "pipe", type: SmartTimePipe, name: "smartTime" }] }); }
12098
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: MobileTableComponent, selector: "lib-mobile-table", usesInheritance: true, ngImport: i0, template: "<div class=\"mobileTable\">\n <div\n class=\"mobileTableRow\"\n *ngFor=\"let row of smartTable.tableRows\"\n [ngClass]=\"getRowClasses(row)\"\n [ngStyle]=\"getRowStyles(row)\"\n [attr.data-testid]=\"row?.id ?? null\"\n >\n <div\n class=\"mobileTableCell\"\n *ngFor=\"let header of smartTable.customSmartTableHeaders; let i = index\"\n (click)=\"handleOnRowClick(row)\"\n (dblclick)=\"handleOnRowDoubleClick($event, row)\"\n >\n <div class=\"mobileTableCellHeader\" [attr.data-testid]=\"header.propertyName\">\n {{ header.label }}\n </div>\n\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select'\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n : null\n \"\n [disabled]=\"isDisabled(row)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(row, header.propertyName)\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(row, header.propertyName)\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(row, header.propertyName)\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox\n [disabled]=\"true\"\n [checked]=\"getValue(row, header.propertyName)\"\n ></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(row, i)\"\n [icon]=\"getIcon(getValue(row, header.propertyName), i)!\"\n [color]=\"getColor(getValue(row, header.propertyName), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div *ngIf=\"isImageResource(row, header.propertyName)\">\n <smart-icon\n [icon]=\"getImageResourceIcon(row, header.propertyName)\"\n [color]=\"getImageResourceColor(row, header.propertyName)\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, row)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label }}\n </button>\n <!------ MENU ------>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n\n <!------ GENERIC HAMBURGER ------>\n @if (shouldShowMenuButton(element)) {\n <smart-ui-action-toolbar\n [uiActionModels]=\"getMenuActions(element)\"\n ></smart-ui-action-toolbar>\n }\n <!------ MENU ------>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(row, header.propertyName)) }}\n </div>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon\n *ngIf=\"header.propertyName === 'icon'\"\n [icon]=\"getValue(row, header.propertyName)!\"\n >\n </smart-icon>\n <img\n *ngIf=\"header.propertyName === 'img'\"\n [src]=\"getValue(row, header.propertyName)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <div\n *ngIf=\"\n header.propertyName !== 'icon' &&\n header.propertyName !== 'img' &&\n header.propertyName !== 'option' &&\n header.propertyName !== 'button'\n \"\n [innerHtml]=\"getValue(row, header.propertyName)\"\n ></div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".mobileTable{display:flex;flex-direction:column}.mobileTableRow{display:flex;flex-direction:column;border-bottom:1px solid #ccc;padding:.5rem;gap:.5rem}.mobileTableCell{display:flex;flex-direction:column;gap:.25rem}.mobileTableCellHeader{font-weight:700;color:var(--primary-color)}.selected{background-color:var(--primary-light-color)}.mat-mdc-menu-item[disabled]{cursor:default!important}\n"], dependencies: [{ kind: "directive", type: SmartTooltipDirective, selector: "[smartTooltip]", inputs: ["smartTooltip"] }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i4$3.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "pipe", type: SmartDateTimePipe, name: "smartDateTime" }, { kind: "pipe", type: SmartDatePipe, name: "smartDate" }, { kind: "pipe", type: SmartTimePipe, name: "smartTime" }] }); }
12126
12099
  }
12127
12100
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: MobileTableComponent, decorators: [{
12128
12101
  type: Component,
12129
- args: [{ selector: 'lib-mobile-table', template: "<div class=\"mobileTable\">\n <div\n class=\"mobileTableRow\"\n *ngFor=\"let row of smartTable.tableRows\"\n [ngClass]=\"getRowClasses(row)\"\n [ngStyle]=\"getRowStyles(row)\"\n [attr.data-testid]=\"row?.id ?? null\"\n >\n <div\n class=\"mobileTableCell\"\n *ngFor=\"let header of smartTable.customSmartTableHeaders; let i = index\"\n (click)=\"handleOnRowClick(row)\"\n (dblclick)=\"handleOnRowDoubleClick($event, row)\"\n >\n <div class=\"mobileTableCellHeader\" [attr.data-testid]=\"header.propertyName\">\n {{ header.label }}\n </div>\n\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select'\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n : null\n \"\n [disabled]=\"isDisabled(row)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(row, header.propertyName)\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(row, header.propertyName)\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(row, header.propertyName)\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox\n [disabled]=\"true\"\n [checked]=\"getValue(row, header.propertyName)\"\n ></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(row, i)\"\n [icon]=\"getIcon(getValue(row, header.propertyName), i)!\"\n [color]=\"getColor(getValue(row, header.propertyName), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div *ngIf=\"isImageResource(row, header.propertyName)\">\n <smart-icon\n [icon]=\"getImageResourceIcon(row, header.propertyName)\"\n [color]=\"getImageResourceColor(row, header.propertyName)\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, row)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label }}\n </button>\n <!------ MENU ------>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n\n <!------ GENERIC HAMBURGER ------>\n @if (shouldShowMenuButton(element)) {\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowMenuActionModelArray(element)\"\n ></smart-ui-action-toolbar>\n }\n <!------ MENU ------>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(row, header.propertyName)) }}\n </div>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon\n *ngIf=\"header.propertyName === 'icon'\"\n [icon]=\"getValue(row, header.propertyName)!\"\n >\n </smart-icon>\n <img\n *ngIf=\"header.propertyName === 'img'\"\n [src]=\"getValue(row, header.propertyName)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <div\n *ngIf=\"\n header.propertyName !== 'icon' &&\n header.propertyName !== 'img' &&\n header.propertyName !== 'option' &&\n header.propertyName !== 'button'\n \"\n [innerHtml]=\"getValue(row, header.propertyName)\"\n ></div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".mobileTable{display:flex;flex-direction:column}.mobileTableRow{display:flex;flex-direction:column;border-bottom:1px solid #ccc;padding:.5rem;gap:.5rem}.mobileTableCell{display:flex;flex-direction:column;gap:.25rem}.mobileTableCellHeader{font-weight:700;color:var(--primary-color)}.selected{background-color:var(--primary-light-color)}.mat-mdc-menu-item[disabled]{cursor:default!important}\n"] }]
12102
+ args: [{ selector: 'lib-mobile-table', template: "<div class=\"mobileTable\">\n <div\n class=\"mobileTableRow\"\n *ngFor=\"let row of smartTable.tableRows\"\n [ngClass]=\"getRowClasses(row)\"\n [ngStyle]=\"getRowStyles(row)\"\n [attr.data-testid]=\"row?.id ?? null\"\n >\n <div\n class=\"mobileTableCell\"\n *ngFor=\"let header of smartTable.customSmartTableHeaders; let i = index\"\n (click)=\"handleOnRowClick(row)\"\n (dblclick)=\"handleOnRowDoubleClick($event, row)\"\n >\n <div class=\"mobileTableCellHeader\" [attr.data-testid]=\"header.propertyName\">\n {{ header.label }}\n </div>\n\n <mat-checkbox\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].propertyName === 'select'\n \"\n (click)=\"$event.stopPropagation()\"\n (change)=\"\n $event\n ? setSelection(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n : null\n \"\n [disabled]=\"isDisabled(row)\"\n [checked]=\"\n smartTable.selection!.isSelected(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n \"\n [aria-label]=\"\n checkboxLabel(\n smartTable.selectionProperty\n ? smartTable.getValueDeeply(row, smartTable.selectionProperty)\n : row\n )\n \"\n >\n </mat-checkbox>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].properties\n \"\n >\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATETIME\">\n {{\n getValue(row, header.propertyName)\n | smartDateTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().DATE\">\n {{\n getValue(row, header.propertyName)\n | smartDate: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().TIME\">\n {{\n getValue(row, header.propertyName)\n | smartTime: smartTable.customSmartTableHeaders[i].properties?.dateFormat\n }}\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders[i].properties?.type === type().CHECKBOX\">\n <mat-checkbox\n [disabled]=\"true\"\n [checked]=\"getValue(row, header.propertyName)\"\n ></mat-checkbox>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders[i].properties?.type === type().ICON &&\n smartTable.customSmartTableHeaders[i].properties?.icons?.length\n \"\n >\n <smart-icon\n [smartTooltip]=\"getToolTip(row, i)\"\n [icon]=\"getIcon(getValue(row, header.propertyName), i)!\"\n [color]=\"getColor(getValue(row, header.propertyName), i)\"\n >\n </smart-icon>\n </div>\n </div>\n <div *ngIf=\"isImageResource(row, header.propertyName)\">\n <smart-icon\n [icon]=\"getImageResourceIcon(row, header.propertyName)\"\n [color]=\"getImageResourceColor(row, header.propertyName)\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].buttons\"\n class=\"smart-table-buttons-col\"\n >\n <div *ngFor=\"let button of smartTable.customSmartTableHeaders[i].buttons\">\n <div *ngIf=\"showButton(button, row)\" [ngSwitch]=\"button.type\">\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.ICON\"\n mat-icon-button\n color=\"{{ button.color }}\"\n >\n <smart-icon title=\"{{ button.label }}\" [icon]=\"button.icon!\"></smart-icon>\n </button>\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.NORMAL\"\n mat-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label }}\n </button>\n <button\n (click)=\"customButtonClicked($event, button, row)\"\n *ngSwitchCase=\"smartTableButtonType.RAISED\"\n mat-raised-button\n color=\"{{ button.color }}\"\n >\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon>\n {{ button.label }}\n </button>\n <!------ MENU ------>\n <div *ngSwitchCase=\"smartTableButtonType.MENU\" class=\"menu-button\">\n <!------ DEFAULT_ACTION_COLUMN ID TOOLBAR ------>\n <smart-ui-action-toolbar\n [uiActionModels]=\"getRowColumnAction(element, defaultActionToolbarId)\"\n ></smart-ui-action-toolbar>\n\n <!------ GENERIC HAMBURGER ------>\n @if (shouldShowMenuButton(element)) {\n <smart-ui-action-toolbar\n [uiActionModels]=\"getMenuActions(element)\"\n ></smart-ui-action-toolbar>\n }\n <!------ MENU ------>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"smartTable.customSmartTableHeaders && smartTable.customSmartTableHeaders[i].icon\">\n <smart-icon\n *ngIf=\"smartTable.customSmartTableHeaders[i].icon?.icon\"\n [ngClass]=\"smartTable.customSmartTableHeaders[i].icon?.cssClass ?? ''\"\n [color]=\"smartTable.customSmartTableHeaders[i].icon?.color\"\n [icon]=\"smartTable.customSmartTableHeaders[i].icon!.icon\"\n >\n </smart-icon>\n </div>\n <div\n *ngIf=\"\n smartTable.customSmartTableHeaders &&\n smartTable.customSmartTableHeaders[i].translator !== undefined\n \"\n >\n {{ smartTable.customSmartTableHeaders[i].translator!(getValue(row, header.propertyName)) }}\n </div>\n <div\n *ngIf=\"\n !smartTable.customSmartTableHeaders ||\n (smartTable.customSmartTableHeaders &&\n !smartTable.customSmartTableHeaders[i].properties &&\n !smartTable.customSmartTableHeaders[i].icon &&\n !smartTable.customSmartTableHeaders[i].buttons &&\n !smartTable.customSmartTableHeaders[i].translator &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'select') &&\n !(smartTable.customSmartTableHeaders[i].propertyName === 'expand'))\n \"\n >\n <smart-icon\n *ngIf=\"header.propertyName === 'icon'\"\n [icon]=\"getValue(row, header.propertyName)!\"\n >\n </smart-icon>\n <img\n *ngIf=\"header.propertyName === 'img'\"\n [src]=\"getValue(row, header.propertyName)\"\n alt=\"\"\n class=\"smarttableImg\"\n />\n <div\n *ngIf=\"\n header.propertyName !== 'icon' &&\n header.propertyName !== 'img' &&\n header.propertyName !== 'option' &&\n header.propertyName !== 'button'\n \"\n [innerHtml]=\"getValue(row, header.propertyName)\"\n ></div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".mobileTable{display:flex;flex-direction:column}.mobileTableRow{display:flex;flex-direction:column;border-bottom:1px solid #ccc;padding:.5rem;gap:.5rem}.mobileTableCell{display:flex;flex-direction:column;gap:.25rem}.mobileTableCellHeader{font-weight:700;color:var(--primary-color)}.selected{background-color:var(--primary-light-color)}.mat-mdc-menu-item[disabled]{cursor:default!important}\n"] }]
12130
12103
  }], ctorParameters: () => [{ type: ComponentFactoryService }] });
12131
12104
 
12132
12105
  class SmarttableComponent {
@@ -21274,6 +21247,27 @@ class SmartComponentLayoutUtility {
21274
21247
  }
21275
21248
  return result;
21276
21249
  }
21250
+ /**
21251
+ * The editors of the filter widgets in the layout tree. A widget whose builder model has not
21252
+ * arrived yet has no editor and is left out until it does.
21253
+ */
21254
+ static getFilters(comp) {
21255
+ const result = [];
21256
+ if (comp.components) {
21257
+ const children = comp.components
21258
+ .map((c) => SmartComponentLayoutUtility.getFilters(c))
21259
+ .reduce((acc, value) => acc.concat(value), []);
21260
+ result.push(...children);
21261
+ }
21262
+ const expandable = this.getExpandableComponent(comp);
21263
+ if (expandable) {
21264
+ result.push(...this.getFilters(expandable));
21265
+ }
21266
+ if (comp.smartFilterComponent?.contentComponent) {
21267
+ result.push(comp.smartFilterComponent.contentComponent);
21268
+ }
21269
+ return result;
21270
+ }
21277
21271
  static getTrees(comp) {
21278
21272
  let result = [];
21279
21273
  if (comp.components) {
@@ -22367,501 +22361,389 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
22367
22361
  type: Output
22368
22362
  }] } });
22369
22363
 
22370
- class SmartComponentLayoutComponent {
22371
- get testId() {
22372
- return this.smartComponentLayout?.identifier ?? null;
22373
- }
22374
- get isHorizontal() {
22375
- return (this.smartComponentLayout?.type === this.type().CONTAINER &&
22376
- this.smartComponentLayout?.direction === 'horizontal');
22364
+ /**
22365
+ * Custom HttpParameterCodec
22366
+ * Workaround for https://github.com/angular/angular/issues/18261
22367
+ */
22368
+ class CustomHttpParameterCodec {
22369
+ encodeKey(k) {
22370
+ return encodeURIComponent(k);
22377
22371
  }
22378
- get isVertical() {
22379
- return (this.smartComponentLayout?.type === this.type().CONTAINER &&
22380
- (this.smartComponentLayout?.direction ?? 'vertical') === 'vertical');
22372
+ encodeValue(v) {
22373
+ return encodeURIComponent(v);
22381
22374
  }
22382
- set embeddedSlotVcRefSetter(vcRef) {
22383
- this._embeddedSlotVcRef = vcRef;
22384
- if (vcRef) {
22385
- this.tryRegisterEmbeddedSlot();
22386
- }
22375
+ decodeKey(k) {
22376
+ return decodeURIComponent(k);
22387
22377
  }
22388
- constructor(layoutService, viewContext, element, renderer) {
22389
- this.layoutService = layoutService;
22390
- this.viewContext = viewContext;
22391
- this.element = element;
22392
- this.renderer = renderer;
22393
- this._destroy$ = new Subject();
22394
- this.appRef = inject(ApplicationRef);
22395
- this.formRef = viewChild(SmartformComponent);
22396
- this.onFormChange = effect(() => {
22397
- const form = this.formRef();
22398
- if (this.smartForm && form && this.parentSmartComponent) {
22399
- this.parentSmartComponent.handleDataChangeSubscriptions(form);
22400
- this.parentSmartComponent.handleUploadCallback(form);
22401
- form.markAllWidgetsForChangeDetection();
22402
- }
22403
- });
22404
- this.pendingOrphanCleanup = false;
22405
- this.embeddedSlotActive = false;
22378
+ decodeValue(v) {
22379
+ return decodeURIComponent(v);
22406
22380
  }
22407
- ngAfterViewInit() {
22408
- if (this.smartFormList?.first) {
22409
- this.setFormComponent(this.smartFormList?.first);
22410
- }
22411
- this.smartFormList.changes
22412
- .pipe(takeUntil(this._destroy$))
22413
- .subscribe((list) => {
22414
- this.setFormComponent(list.first);
22415
- });
22416
- if (this.smartGridList?.first) {
22417
- this.setGridComponent(this.smartGridList?.first);
22381
+ }
22382
+
22383
+ const BASE_PATH = new InjectionToken('basePath');
22384
+ const COLLECTION_FORMATS = {
22385
+ 'csv': ',',
22386
+ 'tsv': ' ',
22387
+ 'ssv': ' ',
22388
+ 'pipes': '|'
22389
+ };
22390
+
22391
+ class Configuration {
22392
+ constructor(configurationParameters = {}) {
22393
+ this.apiKeys = configurationParameters.apiKeys;
22394
+ this.username = configurationParameters.username;
22395
+ this.password = configurationParameters.password;
22396
+ this.accessToken = configurationParameters.accessToken;
22397
+ this.basePath = configurationParameters.basePath;
22398
+ this.withCredentials = configurationParameters.withCredentials;
22399
+ this.encoder = configurationParameters.encoder;
22400
+ if (configurationParameters.encodeParam) {
22401
+ this.encodeParam = configurationParameters.encodeParam;
22418
22402
  }
22419
- this.smartGridList.changes
22420
- .pipe(takeUntil(this._destroy$))
22421
- .subscribe((list) => {
22422
- this.setGridComponent(list.first);
22423
- });
22424
- if (this.smartMapList?.first) {
22425
- this.setMapComponent(this.smartMapList?.first);
22403
+ else {
22404
+ this.encodeParam = param => this.defaultEncodeParam(param);
22426
22405
  }
22427
- this.smartMapList.changes.pipe(takeUntil(this._destroy$)).subscribe((maps) => {
22428
- this.setMapComponent(maps.first);
22429
- });
22430
- if (this.smartDiagramList?.first) {
22431
- this.setDiagramComponent(this.smartDiagramList?.first);
22406
+ if (configurationParameters.credentials) {
22407
+ this.credentials = configurationParameters.credentials;
22432
22408
  }
22433
- this.smartDiagramList.changes.pipe(takeUntil(this._destroy$)).subscribe((diagrams) => {
22434
- this.setDiagramComponent(diagrams.first);
22435
- });
22436
- this.smartFilterList.changes
22437
- .pipe(takeUntil(this._destroy$))
22438
- .subscribe((list) => {
22439
- if (!this.smartFilterComponent) {
22440
- this.smartFilterComponent = list.first;
22441
- this.bindFilter();
22442
- }
22443
- });
22444
- if (this.toolbarList?.first) {
22445
- this.setToolbarComponent(this.toolbarList?.first);
22409
+ else {
22410
+ this.credentials = {};
22446
22411
  }
22447
- this.toolbarList.changes
22448
- .pipe(takeUntil(this._destroy$))
22449
- .subscribe((list) => {
22450
- this.setToolbarComponent(list.first);
22451
- });
22452
- this.setUp();
22453
22412
  }
22454
- ngAfterViewChecked() {
22455
- if (this.pendingOrphanCleanup) {
22456
- this.pendingOrphanCleanup = false;
22457
- this.viewContext.cleanupOrphanedEmbeddedViews(this.uuid);
22413
+ /**
22414
+ * Select the correct content-type to use for a request.
22415
+ * Uses {@link Configuration#isJsonMime} to determine the correct content-type.
22416
+ * If no content type is found return the first found type if the contentTypes is not empty
22417
+ * @param contentTypes - the array of content types that are available for selection
22418
+ * @returns the selected content-type or <code>undefined</code> if no selection could be made.
22419
+ */
22420
+ selectHeaderContentType(contentTypes) {
22421
+ if (contentTypes.length === 0) {
22422
+ return undefined;
22423
+ }
22424
+ const type = contentTypes.find((x) => this.isJsonMime(x));
22425
+ if (type === undefined) {
22426
+ return contentTypes[0];
22458
22427
  }
22428
+ return type;
22459
22429
  }
22460
- ngOnDestroy() {
22461
- if (this.embeddedSlotContainerId && this.uuid) {
22462
- this.viewContext.unregisterEmbeddedSlot(this.uuid, this.embeddedSlotContainerId);
22430
+ /**
22431
+ * Select the correct accept content-type to use for a request.
22432
+ * Uses {@link Configuration#isJsonMime} to determine the correct accept content-type.
22433
+ * If no content type is found return the first found type if the contentTypes is not empty
22434
+ * @param accepts - the array of content types that are available for selection.
22435
+ * @returns the selected content-type or <code>undefined</code> if no selection could be made.
22436
+ */
22437
+ selectHeaderAccept(accepts) {
22438
+ if (accepts.length === 0) {
22439
+ return undefined;
22463
22440
  }
22464
- this._destroy$.next();
22465
- this._destroy$.complete();
22441
+ const type = accepts.find((x) => this.isJsonMime(x));
22442
+ if (type === undefined) {
22443
+ return accepts[0];
22444
+ }
22445
+ return type;
22466
22446
  }
22467
- ngOnChanges(changes) {
22468
- this.setUp();
22447
+ /**
22448
+ * Check if the given MIME is a JSON MIME.
22449
+ * JSON MIME examples:
22450
+ * application/json
22451
+ * application/json; charset=UTF8
22452
+ * APPLICATION/JSON
22453
+ * application/vnd.company+json
22454
+ * @param mime - MIME (Multipurpose Internet Mail Extensions)
22455
+ * @return True if the given MIME is JSON, false otherwise.
22456
+ */
22457
+ isJsonMime(mime) {
22458
+ const jsonMime = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
22459
+ return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
22469
22460
  }
22470
- setUp() {
22471
- if (!this.parentSmartComponent || !this.smartComponentLayout) {
22472
- return;
22473
- }
22474
- if (deepEqual(this.smartComponentLayout, this.currentLayout)) {
22475
- // no layout change, keep current state
22476
- this.smartComponentLayout = this.currentLayout;
22477
- return;
22461
+ lookupCredential(key) {
22462
+ const value = this.credentials[key];
22463
+ return typeof value === 'function'
22464
+ ? value()
22465
+ : value;
22466
+ }
22467
+ defaultEncodeParam(param) {
22468
+ // This implementation exists as fallback for missing configuration
22469
+ // and for backwards compatibility to older typescript-angular generator versions.
22470
+ // It only works for the 'simple' parameter style.
22471
+ // Date-handling only works for the 'date-time' format.
22472
+ // All other styles and Date-formats are probably handled incorrectly.
22473
+ //
22474
+ // But: if that's all you need (i.e.: the most common use-case): no need for customization!
22475
+ const value = param.dataFormat === 'date-time' && param.value instanceof Date
22476
+ ? param.value.toISOString()
22477
+ : param.value;
22478
+ return encodeURIComponent(String(value));
22479
+ }
22480
+ }
22481
+
22482
+ /**
22483
+ * Filter API 2
22484
+ * Filter API 2
22485
+ *
22486
+ * The version of the OpenAPI document: 1.0.0
22487
+ * Contact: info@it4all.hu
22488
+ *
22489
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
22490
+ * https://openapi-generator.tech
22491
+ * Do not edit the class manually.
22492
+ */
22493
+ /* tslint:disable:no-unused-variable member-ordering */
22494
+ class FilterService {
22495
+ constructor(httpClient, basePath, configuration) {
22496
+ this.httpClient = httpClient;
22497
+ this.basePath = 'http://localhost';
22498
+ this.defaultHeaders = new HttpHeaders();
22499
+ this.configuration = new Configuration();
22500
+ if (configuration) {
22501
+ this.configuration = configuration;
22478
22502
  }
22479
- // layout changed, render, but save current
22480
- // this.currentLayout = JSON.parse(JSON.stringify(this.smartComponentLayout));
22481
- SmartComponentLayoutUtility.clearFormHandlers(this);
22482
- this.currentLayout = this.smartComponentLayout;
22483
- this.uuid = this.parentSmartComponent.uuid;
22484
- this.treeService = this.parentSmartComponent.smartTreeService;
22485
- // Top-level layout: detach embedded views before the tree is re-rendered,
22486
- // so they survive *ngFor component destruction
22487
- if (!this.parentLayoutComponent && this.uuid) {
22488
- this.viewContext.detachAllEmbeddedViews(this.uuid);
22489
- this.pendingOrphanCleanup = true;
22503
+ if (typeof this.configuration.basePath !== 'string') {
22504
+ if (Array.isArray(basePath) && basePath.length > 0) {
22505
+ basePath = basePath[0];
22506
+ }
22507
+ if (typeof basePath !== 'string') {
22508
+ basePath = this.basePath;
22509
+ }
22510
+ this.configuration.basePath = basePath;
22490
22511
  }
22491
- this.smartComponentLayout?.direction;
22492
- // the nature of the layout might have changed (e.g. from GRID to FORM), we null out every
22493
- // template-related element, so no stale data is left on screen:
22494
- this.expandableSection = undefined;
22495
- this.smartForm = undefined;
22496
- this.smartFormComponent = undefined;
22497
- this.smartGrid = undefined;
22498
- this.smartGridComponent = undefined;
22499
- this.smartFilter = undefined;
22500
- this.smartFilterComponent = undefined;
22501
- this.smartGrid = undefined;
22502
- this.toolbarId = undefined;
22503
- this.toolbar = undefined;
22504
- // null out toolbar?
22505
- this.mapId = undefined;
22506
- this.smartDiagramId = undefined;
22507
- if (this.embeddedSlotContainerId && this.uuid) {
22508
- this.viewContext.unregisterEmbeddedSlot(this.uuid, this.embeddedSlotContainerId);
22512
+ this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
22513
+ }
22514
+ // @ts-ignore
22515
+ addToHttpParams(httpParams, value, key) {
22516
+ if (typeof value === "object" && value instanceof Date === false) {
22517
+ httpParams = this.addToHttpParamsRecursive(httpParams, value);
22509
22518
  }
22510
- this.embeddedSlotActive = false;
22511
- this.embeddedSlotContainerId = undefined;
22512
- if (this.smartComponentLayout?.expandable) {
22513
- this.constructExpandableSection();
22519
+ else {
22520
+ httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
22514
22521
  }
22515
- else if (this.smartComponentLayout?.type === ComponentType.FORM) {
22516
- this.constructForm();
22522
+ return httpParams;
22523
+ }
22524
+ addToHttpParamsRecursive(httpParams, value, key) {
22525
+ if (value == null) {
22526
+ return httpParams;
22517
22527
  }
22518
- else if (this.smartComponentLayout?.type === ComponentType.WIDGET) {
22519
- if (this.smartComponentLayout.widget?.type === ComponentWidgetType.GRID) {
22520
- this.constructGrid();
22521
- }
22522
- else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.FILTER) {
22523
- console.warn('ComponentWidgetType.FILTER is not supported');
22524
- // this.constructFilter();
22525
- }
22526
- else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.TREE) {
22527
- this.constructTree();
22528
- }
22529
- else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.TOOLBAR) {
22530
- this.constructToolbar();
22531
- }
22532
- else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.MAP) {
22533
- this.constructMap();
22534
- }
22535
- else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.DIAGRAM) {
22536
- this.construcDiagram();
22528
+ if (typeof value === "object") {
22529
+ if (Array.isArray(value)) {
22530
+ value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
22537
22531
  }
22538
- else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.EMBEDDED_SLOT) {
22539
- this.constructEmbeddedSlot();
22532
+ else if (value instanceof Date) {
22533
+ if (key != null) {
22534
+ httpParams = httpParams.append(key, value.toISOString().substr(0, 10));
22535
+ }
22536
+ else {
22537
+ throw Error("key may not be null if value is Date");
22538
+ }
22540
22539
  }
22541
- if (!this.parentLayoutComponent) {
22542
- // only top level component should call init actions
22543
- this.parentSmartComponent.initActions();
22540
+ else {
22541
+ Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
22544
22542
  }
22545
22543
  }
22546
- SmartStyleUtility.applyStyle(this.smartComponentLayout.style, this.element, this.renderer);
22547
- }
22548
- type() {
22549
- return ComponentType;
22550
- }
22551
- constructExpandableSection() {
22552
- let data = { ...this.smartComponentLayout };
22553
- data.expandable = false;
22554
- this.expandableSection = {
22555
- title: this.smartComponentLayout?.expandableSectionLabel ?? '',
22556
- inputs: new Map([
22557
- ['smartComponentLayout', data],
22558
- ['parentSmartComponent', this.parentSmartComponent],
22559
- ['parentLayoutComponent', this.parentLayoutComponent],
22560
- ]),
22561
- headerToolbarId: this.smartComponentLayout?.expandableSectionHeaderToolbarId,
22562
- customComponent: SmartComponentLayoutComponent,
22563
- };
22564
- }
22565
- constructForm() {
22566
- const widgets = this.layoutService.render({
22567
- layoutDefinitions: this.smartComponentLayout?.form,
22568
- });
22569
- if (this.gridRow && !this.gridRow.valueSets && this.parentSmartComponent?.model) {
22570
- this.gridRow.valueSets = this.parentSmartComponent.model.valueSets;
22544
+ else if (key != null) {
22545
+ httpParams = httpParams.append(key, value);
22571
22546
  }
22572
- this.smartForm = {
22573
- direction: this.getFormLayout(),
22574
- componentModel: this.gridRow ? this.gridRow : this.parentSmartComponent?.model,
22575
- widgets,
22576
- };
22577
- this.bindForm();
22578
- }
22579
- getFormLayout() {
22580
- if (this.smartComponentLayout?.direction) {
22581
- return this.smartComponentLayout?.direction === LayoutDirection.HORIZONTAL
22582
- ? SmartFormWidgetDirection.ROW
22583
- : SmartFormWidgetDirection.COL;
22547
+ else {
22548
+ throw Error("key may not be null if value is not object or array");
22584
22549
  }
22585
- return SmartFormWidgetDirection.COL;
22550
+ return httpParams;
22586
22551
  }
22587
- setFormComponent(comp) {
22588
- if (!this.smartFormComponent) {
22589
- this.smartFormComponent = comp;
22590
- this.bindForm();
22552
+ load(uuid, filterIdentifier, observe = 'body', reportProgress = false, options) {
22553
+ if (uuid === null || uuid === undefined) {
22554
+ throw new Error('Required parameter uuid was null or undefined when calling load.');
22591
22555
  }
22592
- }
22593
- bindForm() {
22594
- if (this.parentSmartComponent?.useQueryLists) {
22595
- return;
22556
+ if (filterIdentifier === null || filterIdentifier === undefined) {
22557
+ throw new Error('Required parameter filterIdentifier was null or undefined when calling load.');
22596
22558
  }
22597
- if (this.smartForm && this.smartFormComponent) {
22598
- this.parentSmartComponent?.addForm(
22599
- // unique identifier for the form
22600
- `form_${this.makeid(5)}`, this.smartForm, this.smartFormComponent);
22559
+ let localVarHeaders = this.defaultHeaders;
22560
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
22561
+ if (localVarHttpHeaderAcceptSelected === undefined) {
22562
+ // to determine the Accept header
22563
+ const httpHeaderAccepts = [
22564
+ 'application/json'
22565
+ ];
22566
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
22601
22567
  }
22602
- }
22603
- makeid(length) {
22604
- let result = '';
22605
- const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
22606
- const charactersLength = characters.length;
22607
- let counter = 0;
22608
- while (counter < length) {
22609
- result += characters.charAt(Math.floor(Math.random() * charactersLength));
22610
- counter += 1;
22568
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
22569
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
22611
22570
  }
22612
- return result;
22613
- }
22614
- constructGrid() {
22615
- this.smartGrid = {
22616
- gridIdentifier: this.smartComponentLayout?.widget?.identifier,
22617
- gridModel: {
22618
- page: {},
22619
- },
22620
- options: {
22621
- rowUiActionType: GridUiActionType.POPUP_MENU,
22622
- },
22623
- layoutDef: SmartLayoutDef.TABLE,
22624
- paginator: false,
22625
- layoutComponent: SmartComponentLayoutComponent,
22626
- layoutUtility: SmartComponentLayoutUtility,
22627
- };
22628
- this.bindGrid();
22629
- }
22630
- setGridComponent(comp) {
22631
- if (!this.smartGridComponent) {
22632
- this.smartGridComponent = comp;
22633
- this.bindGrid();
22571
+ let localVarHttpContext = options && options.context;
22572
+ if (localVarHttpContext === undefined) {
22573
+ localVarHttpContext = new HttpContext();
22634
22574
  }
22635
- }
22636
- bindGrid() {
22637
- if (this.parentSmartComponent?.useQueryLists) {
22638
- if (this.smartGrid && this.smartGridComponent && this.parentSmartComponent) {
22639
- this.parentSmartComponent.setupGridServices(this.smartGridComponent);
22575
+ let responseType_ = 'json';
22576
+ if (localVarHttpHeaderAcceptSelected) {
22577
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
22578
+ responseType_ = 'text';
22579
+ }
22580
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
22581
+ responseType_ = 'json';
22582
+ }
22583
+ else {
22584
+ responseType_ = 'blob';
22640
22585
  }
22641
- return;
22642
- }
22643
- if (this.smartGrid && this.smartGridComponent) {
22644
- this.smartGrid = this.parentSmartComponent?.addGrid(this.smartGrid, {
22645
- rowUiActionType: GridUiActionType.POPUP_MENU,
22646
- }, false, this.smartGridComponent);
22647
22586
  }
22587
+ let localVarPath = `/filter/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/${this.configuration.encodeParam({ name: "filterIdentifier", value: filterIdentifier, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/load`;
22588
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
22589
+ context: localVarHttpContext,
22590
+ responseType: responseType_,
22591
+ withCredentials: this.configuration.withCredentials,
22592
+ headers: localVarHeaders,
22593
+ observe: observe,
22594
+ reportProgress: reportProgress
22595
+ });
22648
22596
  }
22649
- constructMap() {
22650
- this.mapId = this.smartComponentLayout?.widget?.identifier;
22651
- this.bindMap();
22652
- }
22653
- construcDiagram() {
22654
- this.smartDiagramId = this.smartComponentLayout?.widget?.identifier;
22655
- this.bindDiagram();
22656
- }
22657
- setMapComponent(comp) {
22658
- if (!this.smartMapComponent) {
22659
- this.smartMapComponent = comp;
22660
- this.bindMap();
22597
+ performWidgetAction(uuid, filterIdentifier, body, observe = 'body', reportProgress = false, options) {
22598
+ if (uuid === null || uuid === undefined) {
22599
+ throw new Error('Required parameter uuid was null or undefined when calling performWidgetAction.');
22661
22600
  }
22662
- }
22663
- setDiagramComponent(comp) {
22664
- if (!this.smartDiagramComponent) {
22665
- this.smartDiagramComponent = comp;
22666
- this.bindDiagram();
22601
+ if (filterIdentifier === null || filterIdentifier === undefined) {
22602
+ throw new Error('Required parameter filterIdentifier was null or undefined when calling performWidgetAction.');
22667
22603
  }
22668
- }
22669
- bindMap() {
22670
- if (this.parentSmartComponent.useQueryLists) {
22671
- return;
22604
+ if (body === null || body === undefined) {
22605
+ throw new Error('Required parameter body was null or undefined when calling performWidgetAction.');
22672
22606
  }
22673
- console.warn('Map components are only supported through QueryLists!');
22674
- }
22675
- bindDiagram() {
22676
- if (this.parentSmartComponent.useQueryLists) {
22677
- return;
22607
+ let localVarHeaders = this.defaultHeaders;
22608
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
22609
+ if (localVarHttpHeaderAcceptSelected === undefined) {
22610
+ // to determine the Accept header
22611
+ const httpHeaderAccepts = [
22612
+ 'application/json'
22613
+ ];
22614
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
22678
22615
  }
22679
- console.warn('Diagram components are only supported through QueryLists!');
22680
- }
22681
- setToolbarComponent(comp) {
22682
- this.toolbar = comp;
22683
- }
22684
- // NOT USED, DOESN'T WORK
22685
- // constructFilter(): void {
22686
- // this.smartFilter = (this.smartComponentLayout!.parentComponent as any).addFilter(
22687
- // `filter_${this.makeid(5)}`,
22688
- // this.smartComponentLayout?.widget?.filterExpressionFieldList,
22689
- // this.smartComponentLayout?.widget?.filterType,
22690
- // this.smartFilterComponent
22691
- // );
22692
- // }
22693
- bindFilter() {
22694
- // TODO
22695
- }
22696
- constructTree() {
22697
- if (this.parentSmartComponent?.useQueryLists) {
22698
- return;
22616
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
22617
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
22699
22618
  }
22700
- this.parentSmartComponent.setUpDefaultTree(this.smartComponentLayout?.widget?.identifier);
22701
- this.treeService?.initialize();
22702
- }
22703
- constructToolbar() {
22704
- let toolbarId = this.smartComponentLayout?.widget?.identifier;
22705
- if (this.toolbarId !== toolbarId) {
22706
- this.toolbarId = toolbarId;
22619
+ let localVarHttpContext = options && options.context;
22620
+ if (localVarHttpContext === undefined) {
22621
+ localVarHttpContext = new HttpContext();
22707
22622
  }
22708
- let properties = this.smartComponentLayout?.widget?.properties;
22709
- if (properties && properties['toolbar_properties']) {
22710
- this.toolbarPropertes = properties['toolbar_properties'];
22623
+ // to determine the Content-Type header
22624
+ const consumes = [
22625
+ 'application/json'
22626
+ ];
22627
+ const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
22628
+ if (httpContentTypeSelected !== undefined) {
22629
+ localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
22630
+ }
22631
+ let responseType_ = 'json';
22632
+ if (localVarHttpHeaderAcceptSelected) {
22633
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
22634
+ responseType_ = 'text';
22635
+ }
22636
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
22637
+ responseType_ = 'json';
22638
+ }
22639
+ else {
22640
+ responseType_ = 'blob';
22641
+ }
22711
22642
  }
22643
+ let localVarPath = `/filter/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/${this.configuration.encodeParam({ name: "filterIdentifier", value: filterIdentifier, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/performWidgetAction`;
22644
+ return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
22645
+ context: localVarHttpContext,
22646
+ body: body,
22647
+ responseType: responseType_,
22648
+ withCredentials: this.configuration.withCredentials,
22649
+ headers: localVarHeaders,
22650
+ observe: observe,
22651
+ reportProgress: reportProgress
22652
+ });
22712
22653
  }
22713
- constructEmbeddedSlot() {
22714
- this.embeddedSlotContainerId = this.smartComponentLayout?.widget?.identifier;
22715
- this.embeddedSlotActive = true;
22716
- this.tryRegisterEmbeddedSlot();
22654
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FilterService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
22655
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FilterService, providedIn: 'root' }); }
22656
+ }
22657
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FilterService, decorators: [{
22658
+ type: Injectable,
22659
+ args: [{
22660
+ providedIn: 'root'
22661
+ }]
22662
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
22663
+ type: Optional
22664
+ }, {
22665
+ type: Inject,
22666
+ args: [BASE_PATH]
22667
+ }] }, { type: Configuration, decorators: [{
22668
+ type: Optional
22669
+ }] }] });
22670
+
22671
+ class SmartFilterEditorService {
22672
+ constructor(service, viewCtxService) {
22673
+ this.service = service;
22674
+ this.viewCtxService = viewCtxService;
22675
+ this.modelChanged = new Subject();
22676
+ this.submit = new Subject();
22677
+ this.itemSelected = new Subject();
22678
+ this.toolbars = [];
22717
22679
  }
22718
- tryRegisterEmbeddedSlot() {
22719
- if (this.embeddedSlotContainerId && this.uuid && this._embeddedSlotVcRef) {
22720
- // An EMBEDDED_SLOT widget slot is LAYOUT-kind: it lives inside the re-rendering
22721
- // layout *ngFor, so its child must be detached before a top-level re-render and
22722
- // reattaches when this slot re-registers. (#28870)
22723
- this.viewContext.registerEmbeddedSlot(this.uuid, this.embeddedSlotContainerId, this._embeddedSlotVcRef, 'layout');
22680
+ submitForm(validate) {
22681
+ // NOPE
22682
+ }
22683
+ getInvalidFields() {
22684
+ return { invalidFieldKeys: [], invalidFieldNames: [] };
22685
+ }
22686
+ getComplexToolbars() {
22687
+ return [...this.toolbars];
22688
+ }
22689
+ setComplexToolbars(toolbars) {
22690
+ this.toolbars = [...toolbars];
22691
+ this.parentSmartComponent?.initActions();
22692
+ }
22693
+ async load() {
22694
+ if (this.config.uuid) {
22695
+ this.model = await this.service.load(this.config.uuid, this.config.identifier).toPromise();
22696
+ this.modelChanged.next();
22724
22697
  }
22725
22698
  }
22726
- updateUuid(newUuid) {
22727
- const oldUuid = this.uuid;
22728
- this.uuid = newUuid;
22729
- if (oldUuid !== newUuid && this.embeddedSlotContainerId) {
22730
- if (oldUuid) {
22731
- this.viewContext.unregisterEmbeddedSlot(oldUuid, this.embeddedSlotContainerId);
22699
+ async peformWidgetAction(request) {
22700
+ if (this.config.uuid) {
22701
+ let filterView = this.viewCtxService
22702
+ .getCurrentViewContext()
22703
+ ?.views.find((view) => view.uuid == this.config.uuid);
22704
+ if (filterView && filterView.state != ViewState.CLOSED) {
22705
+ this.model = await this.service
22706
+ .performWidgetAction(this.config.uuid, this.config.identifier, request)
22707
+ .toPromise();
22708
+ this.modelChanged.next();
22732
22709
  }
22733
- this.tryRegisterEmbeddedSlot();
22734
22710
  }
22735
22711
  }
22736
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutComponent, deps: [{ token: SmartformLayoutDefinitionService }, { token: SmartViewContextService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
22737
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: { smartComponentLayout: "smartComponentLayout", parentLayoutComponent: "parentLayoutComponent", parentSmartComponent: "parentSmartComponent", gridRow: "gridRow" }, host: { properties: { "attr.data-testid": "this.testId", "class.horizontal": "this.isHorizontal", "class.vertical": "this.isVertical" } }, viewQueries: [{ propertyName: "formRef", first: true, predicate: SmartformComponent, descendants: true, isSignal: true }, { propertyName: "embeddedSlotVcRefSetter", first: true, predicate: ["embeddedSlot"], descendants: true, read: ViewContainerRef }, { propertyName: "smartFormList", predicate: ["form"], descendants: true }, { propertyName: "smartGridList", predicate: ["grid"], descendants: true }, { propertyName: "smartMapList", predicate: ["map"], descendants: true }, { propertyName: "smartDiagramList", predicate: ["diagram"], descendants: true }, { propertyName: "smartFilterList", predicate: ["filter"], descendants: true }, { propertyName: "toolbarList", predicate: ["toolbar"], descendants: true }, { propertyName: "expandableComponents", predicate: ExpandableSectionComponent, descendants: true }, { propertyName: "components", predicate: SmartComponentLayoutComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\n\n<ng-template #expandable>\n <smart-expandable-section\n *ngIf=\"expandableSection\"\n [data]=\"expandableSection\"\n ></smart-expandable-section>\n</ng-template>\n\n<ng-template #normal>\n @if (smartComponentLayout?.type === type().CONTAINER) {\n <smart-component-layout\n *ngFor=\"let layout of smartComponentLayout?.components\"\n [parentSmartComponent]=\"parentSmartComponent\"\n [parentLayoutComponent]=\"this\"\n [smartComponentLayout]=\"layout\"\n [gridRow]=\"gridRow\"\n ></smart-component-layout>\n }\n <smartform *ngIf=\"smartForm\" #form [smartForm]=\"smartForm\"></smartform>\n <smart-grid\n *ngIf=\"smartGrid\"\n #grid\n [smartGrid]=\"smartGrid\"\n [uuid]=\"uuid!\"\n [parentLayoutComponent]=\"this\"\n [parent]=\"parentSmartComponent\"\n ></smart-grid>\n <smart-map\n *ngIf=\"!!uuid && !!mapId\"\n #map\n [uuid]=\"uuid\"\n [identifier]=\"mapId\"\n [parent]=\"parentSmartComponent\"\n ></smart-map>\n <smart-diagram\n *ngIf=\"!!uuid && !!smartDiagramId\"\n #diagram\n [uuid]=\"uuid\"\n [identifier]=\"smartDiagramId\"\n [parent]=\"parentSmartComponent\"\n ></smart-diagram>\n <!-- <smart-filter #filter [filter]=\"smartFilter\"></smart-filter> -->\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\n <smart-ui-action-toolbar\n *ngIf=\"!!toolbarId\"\n #toolbar\n [id]=\"toolbarId\"\n [toolbarPropertes]=\"toolbarPropertes\"\n ></smart-ui-action-toolbar>\n <ng-container *ngIf=\"embeddedSlotActive\" #embeddedSlot></ng-container>\n</ng-template>\n", styles: [":host(.horizontal){display:flex;flex-direction:row}:host(.vertical){display:flex;flex-direction:column}:host(.horizontal) smart-component-layout{display:flex}:host(.horizontal) smartform{flex:1;display:flex}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SmartGridComponent, selector: "smart-grid", inputs: ["smartGrid", "uuid", "parent", "parentLayoutComponent", "dev"] }, { kind: "component", type: ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { kind: "component", type: SmartTreeComponent, selector: "smart-tree", inputs: ["treeStyle", "treeService"] }, { kind: "component", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "component", type: SmartformComponent, selector: "smartform", inputs: ["smartForm"] }, { kind: "component", type: SmartMapComponent, selector: "smart-map", inputs: ["uuid", "identifier", "parent"] }, { kind: "component", type: SmartDiagramComponent, selector: "smart-diagram", inputs: ["uuid", "identifier", "parent", "diagramModel", "options", "plugins"], outputs: ["elementSelect", "canvasClick", "dataClick"] }, { kind: "component", type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: ["smartComponentLayout", "parentLayoutComponent", "parentSmartComponent", "gridRow"] }] }); }
22738
- }
22739
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutComponent, decorators: [{
22740
- type: Component,
22741
- args: [{ selector: 'smart-component-layout', template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\n\n<ng-template #expandable>\n <smart-expandable-section\n *ngIf=\"expandableSection\"\n [data]=\"expandableSection\"\n ></smart-expandable-section>\n</ng-template>\n\n<ng-template #normal>\n @if (smartComponentLayout?.type === type().CONTAINER) {\n <smart-component-layout\n *ngFor=\"let layout of smartComponentLayout?.components\"\n [parentSmartComponent]=\"parentSmartComponent\"\n [parentLayoutComponent]=\"this\"\n [smartComponentLayout]=\"layout\"\n [gridRow]=\"gridRow\"\n ></smart-component-layout>\n }\n <smartform *ngIf=\"smartForm\" #form [smartForm]=\"smartForm\"></smartform>\n <smart-grid\n *ngIf=\"smartGrid\"\n #grid\n [smartGrid]=\"smartGrid\"\n [uuid]=\"uuid!\"\n [parentLayoutComponent]=\"this\"\n [parent]=\"parentSmartComponent\"\n ></smart-grid>\n <smart-map\n *ngIf=\"!!uuid && !!mapId\"\n #map\n [uuid]=\"uuid\"\n [identifier]=\"mapId\"\n [parent]=\"parentSmartComponent\"\n ></smart-map>\n <smart-diagram\n *ngIf=\"!!uuid && !!smartDiagramId\"\n #diagram\n [uuid]=\"uuid\"\n [identifier]=\"smartDiagramId\"\n [parent]=\"parentSmartComponent\"\n ></smart-diagram>\n <!-- <smart-filter #filter [filter]=\"smartFilter\"></smart-filter> -->\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\n <smart-ui-action-toolbar\n *ngIf=\"!!toolbarId\"\n #toolbar\n [id]=\"toolbarId\"\n [toolbarPropertes]=\"toolbarPropertes\"\n ></smart-ui-action-toolbar>\n <ng-container *ngIf=\"embeddedSlotActive\" #embeddedSlot></ng-container>\n</ng-template>\n", styles: [":host(.horizontal){display:flex;flex-direction:row}:host(.vertical){display:flex;flex-direction:column}:host(.horizontal) smart-component-layout{display:flex}:host(.horizontal) smartform{flex:1;display:flex}\n"] }]
22742
- }], ctorParameters: () => [{ type: SmartformLayoutDefinitionService }, { type: SmartViewContextService }, { type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { smartComponentLayout: [{
22743
- type: Input
22744
- }], parentLayoutComponent: [{
22745
- type: Input
22746
- }], parentSmartComponent: [{
22747
- type: Input
22748
- }], gridRow: [{
22749
- type: Input
22750
- }], testId: [{
22751
- type: HostBinding,
22752
- args: ['attr.data-testid']
22753
- }], isHorizontal: [{
22754
- type: HostBinding,
22755
- args: ['class.horizontal']
22756
- }], isVertical: [{
22757
- type: HostBinding,
22758
- args: ['class.vertical']
22759
- }], smartFormList: [{
22760
- type: ViewChildren,
22761
- args: ['form']
22762
- }], smartGridList: [{
22763
- type: ViewChildren,
22764
- args: ['grid']
22765
- }], smartMapList: [{
22766
- type: ViewChildren,
22767
- args: ['map']
22768
- }], smartDiagramList: [{
22769
- type: ViewChildren,
22770
- args: ['diagram']
22771
- }], smartFilterList: [{
22772
- type: ViewChildren,
22773
- args: ['filter']
22774
- }], toolbarList: [{
22775
- type: ViewChildren,
22776
- args: ['toolbar']
22777
- }], embeddedSlotVcRefSetter: [{
22778
- type: ViewChild,
22779
- args: ['embeddedSlot', { read: ViewContainerRef, static: false }]
22780
- }], expandableComponents: [{
22781
- type: ViewChildren,
22782
- args: [ExpandableSectionComponent]
22783
- }], components: [{
22784
- type: ViewChildren,
22785
- args: [SmartComponentLayoutComponent]
22786
- }] } });
22787
-
22788
- const DEFAULT_PROVIDERS = [
22789
- DefaultChartOptionsProvider,
22790
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: barChart, multi: true },
22791
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: scatterChart, multi: true },
22792
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: bubbleChart, multi: true },
22793
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: horizontalBarChart, multi: true },
22794
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: stackedBarChart, multi: true },
22795
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: horizontalStackedBarChart, multi: true },
22796
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: multiAxisLineChart, multi: true },
22797
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: polarAreaChart, multi: true },
22798
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: radarChart, multi: true },
22799
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: doughnutChart, multi: true },
22800
- { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: pieChart, multi: true },
22801
- ];
22802
- class SmartDiagramModule {
22803
- static forRoot(providers) {
22712
+ getModel() {
22713
+ return this.model;
22714
+ }
22715
+ async performUiActionRequest(uiActionRequest, widgetId, nodeId) {
22716
+ await this.peformWidgetAction(uiActionRequest);
22717
+ }
22718
+ async handleSpecificDemandsAsynchronously(uiAction, uiActionRequest) {
22804
22719
  return {
22805
- ngModule: SmartDiagramModule,
22806
- providers: [...DEFAULT_PROVIDERS, ...providers],
22720
+ shouldPerformAction: true,
22721
+ uiActionRequest: uiActionRequest,
22807
22722
  };
22808
22723
  }
22809
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
22810
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, declarations: [SmartDiagramComponent], imports: [BrowserModule, ChartModule], exports: [SmartDiagramComponent] }); }
22811
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, imports: [BrowserModule, ChartModule] }); }
22812
- }
22813
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, decorators: [{
22814
- type: NgModule,
22815
- args: [{
22816
- declarations: [SmartDiagramComponent],
22817
- imports: [BrowserModule, ChartModule],
22818
- exports: [SmartDiagramComponent],
22819
- }]
22820
- }] });
22821
-
22822
- class SmartComponentLayoutModule {
22823
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
22824
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, declarations: [SmartComponentLayoutComponent], imports: [BrowserModule,
22825
- MatCommonModule,
22826
- SmartGridModule,
22827
- SmartExpandableSectionModule,
22828
- SmarttreeModule,
22829
- SmartViewContextModule,
22830
- SmartMapModule,
22831
- SmartDiagramModule,
22832
- InputGroupModule,
22833
- InputGroupAddonModule], exports: [SmartComponentLayoutComponent] }); }
22834
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, imports: [BrowserModule,
22835
- MatCommonModule,
22836
- SmartGridModule,
22837
- SmartExpandableSectionModule,
22838
- SmarttreeModule,
22839
- SmartViewContextModule,
22840
- SmartMapModule,
22841
- SmartDiagramModule,
22842
- InputGroupModule,
22843
- InputGroupAddonModule] }); }
22724
+ getAdditionalParams(uiAction) {
22725
+ throw new Error('Method not implemented.');
22726
+ }
22727
+ async bulkUpdateFilterExpression(operationType, item) {
22728
+ if (!this.model?.readOnly) {
22729
+ if (item) {
22730
+ item.expressionData.boolOperator = operationType;
22731
+ }
22732
+ await this.peformWidgetAction({
22733
+ code: 'BULK_UPDATE_FILTER_EXPRESSION',
22734
+ params: {
22735
+ model: item,
22736
+ operator: operationType,
22737
+ },
22738
+ });
22739
+ }
22740
+ }
22741
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorService, deps: [{ token: FilterService }, { token: SmartViewContextService }], target: i0.ɵɵFactoryTarget.Injectable }); }
22742
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorService }); }
22844
22743
  }
22845
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, decorators: [{
22846
- type: NgModule,
22847
- args: [{
22848
- declarations: [SmartComponentLayoutComponent],
22849
- imports: [
22850
- BrowserModule,
22851
- MatCommonModule,
22852
- SmartGridModule,
22853
- SmartExpandableSectionModule,
22854
- SmarttreeModule,
22855
- SmartViewContextModule,
22856
- SmartMapModule,
22857
- SmartDiagramModule,
22858
- InputGroupModule,
22859
- InputGroupAddonModule,
22860
- ],
22861
- exports: [SmartComponentLayoutComponent],
22862
- providers: [],
22863
- }]
22864
- }] });
22744
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorService, decorators: [{
22745
+ type: Injectable
22746
+ }], ctorParameters: () => [{ type: FilterService }, { type: SmartViewContextService }] });
22865
22747
 
22866
22748
  class SmartFilterParamComponent {
22867
22749
  constructor() { }
@@ -23495,397 +23377,516 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
23495
23377
  type: Optional
23496
23378
  }] }], propDecorators: { service: [{
23497
23379
  type: Input
23498
- }], vcRef: [{
23499
- type: ViewChild,
23500
- args: ['form', { read: ViewContainerRef }]
23501
- }], simpleFilterVcRef: [{
23380
+ }], vcRef: [{
23381
+ type: ViewChild,
23382
+ args: ['form', { read: ViewContainerRef }]
23383
+ }], simpleFilterVcRef: [{
23384
+ type: ViewChild,
23385
+ args: ['simpleFilterFromChild', { read: ViewContainerRef }]
23386
+ }] } });
23387
+
23388
+ /**
23389
+ * A filter builder placed in a component layout. The identifier is the builder's filterId in the
23390
+ * view: the widget loads the builder by it, and the client above the layout finds the widget by it
23391
+ * for push updates and toolbar collection. Each widget owns its own SmartFilterEditorService.
23392
+ */
23393
+ class SmartFilterWidgetComponent {
23394
+ // A template reference instead of the class token: a value import of the editor would pull
23395
+ // the library's module cycle into this file. The editor subscribes to modelChanged in its own
23396
+ // ngAfterViewInit, which runs before this setter fires, so the action refresh below always
23397
+ // follows the editor's toolbar rebuild.
23398
+ set contentComponentSetter(comp) {
23399
+ if (comp && !this.contentComponent) {
23400
+ this.service.modelChanged
23401
+ .pipe(takeUntil(this._destroy$))
23402
+ .subscribe(() => this.parent?.initActions());
23403
+ }
23404
+ this.contentComponent = comp;
23405
+ }
23406
+ constructor(service) {
23407
+ this.service = service;
23408
+ this._destroy$ = new Subject();
23409
+ }
23410
+ ngOnChanges() {
23411
+ this.service.config = { uuid: this.uuid, identifier: this.identifier };
23412
+ this.service.parentSmartComponent = this.parent;
23413
+ if (this.uuid) {
23414
+ this.service.load();
23415
+ }
23416
+ }
23417
+ ngOnDestroy() {
23418
+ this._destroy$.next();
23419
+ this._destroy$.complete();
23420
+ }
23421
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterWidgetComponent, deps: [{ token: SmartFilterEditorService }], target: i0.ɵɵFactoryTarget.Component }); }
23422
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartFilterWidgetComponent, selector: "smart-filter-widget", inputs: { uuid: "uuid", identifier: "identifier", parent: "parent" }, providers: [SmartFilterEditorService], viewQueries: [{ propertyName: "contentComponentSetter", first: true, predicate: ["editor"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"filter-widget-container\" *ngIf=\"service.model\">\n <smart-filter-group-params [service]=\"service\"></smart-filter-group-params>\n <smart-filter-expression-editor #editor [service]=\"service\"></smart-filter-expression-editor>\n</div>\n", styles: [".filter-widget-container{display:flex;flex-direction:row}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SmartFilterParamsComponent, selector: "smart-filter-group-params", inputs: ["service"] }, { kind: "component", type: SmartFilterEditorContentComponent, selector: "smart-filter-expression-editor", inputs: ["service"] }] }); }
23423
+ }
23424
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterWidgetComponent, decorators: [{
23425
+ type: Component,
23426
+ args: [{ selector: 'smart-filter-widget', providers: [SmartFilterEditorService], template: "<div class=\"filter-widget-container\" *ngIf=\"service.model\">\n <smart-filter-group-params [service]=\"service\"></smart-filter-group-params>\n <smart-filter-expression-editor #editor [service]=\"service\"></smart-filter-expression-editor>\n</div>\n", styles: [".filter-widget-container{display:flex;flex-direction:row}\n"] }]
23427
+ }], ctorParameters: () => [{ type: SmartFilterEditorService }], propDecorators: { uuid: [{
23428
+ type: Input
23429
+ }], identifier: [{
23430
+ type: Input
23431
+ }], parent: [{
23432
+ type: Input
23433
+ }], contentComponentSetter: [{
23502
23434
  type: ViewChild,
23503
- args: ['simpleFilterFromChild', { read: ViewContainerRef }]
23435
+ args: ['editor']
23504
23436
  }] } });
23505
23437
 
23506
- /**
23507
- * Custom HttpParameterCodec
23508
- * Workaround for https://github.com/angular/angular/issues/18261
23509
- */
23510
- class CustomHttpParameterCodec {
23511
- encodeKey(k) {
23512
- return encodeURIComponent(k);
23438
+ class SmartComponentLayoutComponent {
23439
+ get testId() {
23440
+ return this.smartComponentLayout?.identifier ?? null;
23513
23441
  }
23514
- encodeValue(v) {
23515
- return encodeURIComponent(v);
23442
+ get isHorizontal() {
23443
+ return (this.smartComponentLayout?.type === this.type().CONTAINER &&
23444
+ this.smartComponentLayout?.direction === 'horizontal');
23516
23445
  }
23517
- decodeKey(k) {
23518
- return decodeURIComponent(k);
23446
+ get isVertical() {
23447
+ return (this.smartComponentLayout?.type === this.type().CONTAINER &&
23448
+ (this.smartComponentLayout?.direction ?? 'vertical') === 'vertical');
23519
23449
  }
23520
- decodeValue(v) {
23521
- return decodeURIComponent(v);
23450
+ set embeddedSlotVcRefSetter(vcRef) {
23451
+ this._embeddedSlotVcRef = vcRef;
23452
+ if (vcRef) {
23453
+ this.tryRegisterEmbeddedSlot();
23454
+ }
23522
23455
  }
23523
- }
23524
-
23525
- const BASE_PATH = new InjectionToken('basePath');
23526
- const COLLECTION_FORMATS = {
23527
- 'csv': ',',
23528
- 'tsv': ' ',
23529
- 'ssv': ' ',
23530
- 'pipes': '|'
23531
- };
23532
-
23533
- class Configuration {
23534
- constructor(configurationParameters = {}) {
23535
- this.apiKeys = configurationParameters.apiKeys;
23536
- this.username = configurationParameters.username;
23537
- this.password = configurationParameters.password;
23538
- this.accessToken = configurationParameters.accessToken;
23539
- this.basePath = configurationParameters.basePath;
23540
- this.withCredentials = configurationParameters.withCredentials;
23541
- this.encoder = configurationParameters.encoder;
23542
- if (configurationParameters.encodeParam) {
23543
- this.encodeParam = configurationParameters.encodeParam;
23456
+ constructor(layoutService, viewContext, element, renderer) {
23457
+ this.layoutService = layoutService;
23458
+ this.viewContext = viewContext;
23459
+ this.element = element;
23460
+ this.renderer = renderer;
23461
+ this._destroy$ = new Subject();
23462
+ this.appRef = inject(ApplicationRef);
23463
+ this.formRef = viewChild(SmartformComponent);
23464
+ this.onFormChange = effect(() => {
23465
+ const form = this.formRef();
23466
+ if (this.smartForm && form && this.parentSmartComponent) {
23467
+ this.parentSmartComponent.handleDataChangeSubscriptions(form);
23468
+ this.parentSmartComponent.handleUploadCallback(form);
23469
+ form.markAllWidgetsForChangeDetection();
23470
+ }
23471
+ });
23472
+ this.pendingOrphanCleanup = false;
23473
+ this.embeddedSlotActive = false;
23474
+ }
23475
+ ngAfterViewInit() {
23476
+ if (this.smartFormList?.first) {
23477
+ this.setFormComponent(this.smartFormList?.first);
23544
23478
  }
23545
- else {
23546
- this.encodeParam = param => this.defaultEncodeParam(param);
23479
+ this.smartFormList.changes
23480
+ .pipe(takeUntil(this._destroy$))
23481
+ .subscribe((list) => {
23482
+ this.setFormComponent(list.first);
23483
+ });
23484
+ if (this.smartGridList?.first) {
23485
+ this.setGridComponent(this.smartGridList?.first);
23547
23486
  }
23548
- if (configurationParameters.credentials) {
23549
- this.credentials = configurationParameters.credentials;
23487
+ this.smartGridList.changes
23488
+ .pipe(takeUntil(this._destroy$))
23489
+ .subscribe((list) => {
23490
+ this.setGridComponent(list.first);
23491
+ });
23492
+ if (this.smartMapList?.first) {
23493
+ this.setMapComponent(this.smartMapList?.first);
23550
23494
  }
23551
- else {
23552
- this.credentials = {};
23495
+ this.smartMapList.changes.pipe(takeUntil(this._destroy$)).subscribe((maps) => {
23496
+ this.setMapComponent(maps.first);
23497
+ });
23498
+ if (this.smartDiagramList?.first) {
23499
+ this.setDiagramComponent(this.smartDiagramList?.first);
23553
23500
  }
23554
- }
23555
- /**
23556
- * Select the correct content-type to use for a request.
23557
- * Uses {@link Configuration#isJsonMime} to determine the correct content-type.
23558
- * If no content type is found return the first found type if the contentTypes is not empty
23559
- * @param contentTypes - the array of content types that are available for selection
23560
- * @returns the selected content-type or <code>undefined</code> if no selection could be made.
23561
- */
23562
- selectHeaderContentType(contentTypes) {
23563
- if (contentTypes.length === 0) {
23564
- return undefined;
23501
+ this.smartDiagramList.changes.pipe(takeUntil(this._destroy$)).subscribe((diagrams) => {
23502
+ this.setDiagramComponent(diagrams.first);
23503
+ });
23504
+ if (this.smartFilterList?.first) {
23505
+ this.setFilterComponent(this.smartFilterList?.first);
23565
23506
  }
23566
- const type = contentTypes.find((x) => this.isJsonMime(x));
23567
- if (type === undefined) {
23568
- return contentTypes[0];
23507
+ this.smartFilterList.changes.pipe(takeUntil(this._destroy$)).subscribe((filters) => {
23508
+ this.setFilterComponent(filters.first);
23509
+ });
23510
+ if (this.toolbarList?.first) {
23511
+ this.setToolbarComponent(this.toolbarList?.first);
23569
23512
  }
23570
- return type;
23513
+ this.toolbarList.changes
23514
+ .pipe(takeUntil(this._destroy$))
23515
+ .subscribe((list) => {
23516
+ this.setToolbarComponent(list.first);
23517
+ });
23518
+ this.setUp();
23571
23519
  }
23572
- /**
23573
- * Select the correct accept content-type to use for a request.
23574
- * Uses {@link Configuration#isJsonMime} to determine the correct accept content-type.
23575
- * If no content type is found return the first found type if the contentTypes is not empty
23576
- * @param accepts - the array of content types that are available for selection.
23577
- * @returns the selected content-type or <code>undefined</code> if no selection could be made.
23578
- */
23579
- selectHeaderAccept(accepts) {
23580
- if (accepts.length === 0) {
23581
- return undefined;
23582
- }
23583
- const type = accepts.find((x) => this.isJsonMime(x));
23584
- if (type === undefined) {
23585
- return accepts[0];
23520
+ ngAfterViewChecked() {
23521
+ if (this.pendingOrphanCleanup) {
23522
+ this.pendingOrphanCleanup = false;
23523
+ this.viewContext.cleanupOrphanedEmbeddedViews(this.uuid);
23586
23524
  }
23587
- return type;
23588
- }
23589
- /**
23590
- * Check if the given MIME is a JSON MIME.
23591
- * JSON MIME examples:
23592
- * application/json
23593
- * application/json; charset=UTF8
23594
- * APPLICATION/JSON
23595
- * application/vnd.company+json
23596
- * @param mime - MIME (Multipurpose Internet Mail Extensions)
23597
- * @return True if the given MIME is JSON, false otherwise.
23598
- */
23599
- isJsonMime(mime) {
23600
- const jsonMime = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
23601
- return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
23602
23525
  }
23603
- lookupCredential(key) {
23604
- const value = this.credentials[key];
23605
- return typeof value === 'function'
23606
- ? value()
23607
- : value;
23526
+ ngOnDestroy() {
23527
+ if (this.embeddedSlotContainerId && this.uuid) {
23528
+ this.viewContext.unregisterEmbeddedSlot(this.uuid, this.embeddedSlotContainerId);
23529
+ }
23530
+ this._destroy$.next();
23531
+ this._destroy$.complete();
23608
23532
  }
23609
- defaultEncodeParam(param) {
23610
- // This implementation exists as fallback for missing configuration
23611
- // and for backwards compatibility to older typescript-angular generator versions.
23612
- // It only works for the 'simple' parameter style.
23613
- // Date-handling only works for the 'date-time' format.
23614
- // All other styles and Date-formats are probably handled incorrectly.
23615
- //
23616
- // But: if that's all you need (i.e.: the most common use-case): no need for customization!
23617
- const value = param.dataFormat === 'date-time' && param.value instanceof Date
23618
- ? param.value.toISOString()
23619
- : param.value;
23620
- return encodeURIComponent(String(value));
23533
+ ngOnChanges(changes) {
23534
+ this.setUp();
23621
23535
  }
23622
- }
23623
-
23624
- /**
23625
- * Filter API 2
23626
- * Filter API 2
23627
- *
23628
- * The version of the OpenAPI document: 1.0.0
23629
- * Contact: info@it4all.hu
23630
- *
23631
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
23632
- * https://openapi-generator.tech
23633
- * Do not edit the class manually.
23634
- */
23635
- /* tslint:disable:no-unused-variable member-ordering */
23636
- class FilterService {
23637
- constructor(httpClient, basePath, configuration) {
23638
- this.httpClient = httpClient;
23639
- this.basePath = 'http://localhost';
23640
- this.defaultHeaders = new HttpHeaders();
23641
- this.configuration = new Configuration();
23642
- if (configuration) {
23643
- this.configuration = configuration;
23536
+ setUp() {
23537
+ if (!this.parentSmartComponent || !this.smartComponentLayout) {
23538
+ return;
23644
23539
  }
23645
- if (typeof this.configuration.basePath !== 'string') {
23646
- if (Array.isArray(basePath) && basePath.length > 0) {
23647
- basePath = basePath[0];
23648
- }
23649
- if (typeof basePath !== 'string') {
23650
- basePath = this.basePath;
23651
- }
23652
- this.configuration.basePath = basePath;
23540
+ if (deepEqual(this.smartComponentLayout, this.currentLayout)) {
23541
+ // no layout change, keep current state
23542
+ this.smartComponentLayout = this.currentLayout;
23543
+ return;
23653
23544
  }
23654
- this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
23655
- }
23656
- // @ts-ignore
23657
- addToHttpParams(httpParams, value, key) {
23658
- if (typeof value === "object" && value instanceof Date === false) {
23659
- httpParams = this.addToHttpParamsRecursive(httpParams, value);
23545
+ // layout changed, render, but save current
23546
+ // this.currentLayout = JSON.parse(JSON.stringify(this.smartComponentLayout));
23547
+ SmartComponentLayoutUtility.clearFormHandlers(this);
23548
+ this.currentLayout = this.smartComponentLayout;
23549
+ this.uuid = this.parentSmartComponent.uuid;
23550
+ this.treeService = this.parentSmartComponent.smartTreeService;
23551
+ // Top-level layout: detach embedded views before the tree is re-rendered,
23552
+ // so they survive *ngFor component destruction
23553
+ if (!this.parentLayoutComponent && this.uuid) {
23554
+ this.viewContext.detachAllEmbeddedViews(this.uuid);
23555
+ this.pendingOrphanCleanup = true;
23556
+ }
23557
+ this.smartComponentLayout?.direction;
23558
+ // the nature of the layout might have changed (e.g. from GRID to FORM), we null out every
23559
+ // template-related element, so no stale data is left on screen:
23560
+ this.expandableSection = undefined;
23561
+ this.smartForm = undefined;
23562
+ this.smartFormComponent = undefined;
23563
+ this.smartGrid = undefined;
23564
+ this.smartGridComponent = undefined;
23565
+ this.filterId = undefined;
23566
+ this.smartFilterComponent = undefined;
23567
+ this.smartGrid = undefined;
23568
+ this.toolbarId = undefined;
23569
+ this.toolbar = undefined;
23570
+ // null out toolbar?
23571
+ this.mapId = undefined;
23572
+ this.smartDiagramId = undefined;
23573
+ if (this.embeddedSlotContainerId && this.uuid) {
23574
+ this.viewContext.unregisterEmbeddedSlot(this.uuid, this.embeddedSlotContainerId);
23660
23575
  }
23661
- else {
23662
- httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
23576
+ this.embeddedSlotActive = false;
23577
+ this.embeddedSlotContainerId = undefined;
23578
+ if (this.smartComponentLayout?.expandable) {
23579
+ this.constructExpandableSection();
23663
23580
  }
23664
- return httpParams;
23665
- }
23666
- addToHttpParamsRecursive(httpParams, value, key) {
23667
- if (value == null) {
23668
- return httpParams;
23581
+ else if (this.smartComponentLayout?.type === ComponentType.FORM) {
23582
+ this.constructForm();
23669
23583
  }
23670
- if (typeof value === "object") {
23671
- if (Array.isArray(value)) {
23672
- value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
23584
+ else if (this.smartComponentLayout?.type === ComponentType.WIDGET) {
23585
+ if (this.smartComponentLayout.widget?.type === ComponentWidgetType.GRID) {
23586
+ this.constructGrid();
23673
23587
  }
23674
- else if (value instanceof Date) {
23675
- if (key != null) {
23676
- httpParams = httpParams.append(key, value.toISOString().substr(0, 10));
23677
- }
23678
- else {
23679
- throw Error("key may not be null if value is Date");
23680
- }
23588
+ else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.FILTER) {
23589
+ this.constructFilter();
23681
23590
  }
23682
- else {
23683
- Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
23591
+ else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.TREE) {
23592
+ this.constructTree();
23684
23593
  }
23685
- }
23686
- else if (key != null) {
23687
- httpParams = httpParams.append(key, value);
23688
- }
23689
- else {
23690
- throw Error("key may not be null if value is not object or array");
23691
- }
23692
- return httpParams;
23693
- }
23694
- load(uuid, filterIdentifier, observe = 'body', reportProgress = false, options) {
23695
- if (uuid === null || uuid === undefined) {
23696
- throw new Error('Required parameter uuid was null or undefined when calling load.');
23697
- }
23698
- if (filterIdentifier === null || filterIdentifier === undefined) {
23699
- throw new Error('Required parameter filterIdentifier was null or undefined when calling load.');
23700
- }
23701
- let localVarHeaders = this.defaultHeaders;
23702
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
23703
- if (localVarHttpHeaderAcceptSelected === undefined) {
23704
- // to determine the Accept header
23705
- const httpHeaderAccepts = [
23706
- 'application/json'
23707
- ];
23708
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
23709
- }
23710
- if (localVarHttpHeaderAcceptSelected !== undefined) {
23711
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
23712
- }
23713
- let localVarHttpContext = options && options.context;
23714
- if (localVarHttpContext === undefined) {
23715
- localVarHttpContext = new HttpContext();
23716
- }
23717
- let responseType_ = 'json';
23718
- if (localVarHttpHeaderAcceptSelected) {
23719
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
23720
- responseType_ = 'text';
23594
+ else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.TOOLBAR) {
23595
+ this.constructToolbar();
23721
23596
  }
23722
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
23723
- responseType_ = 'json';
23597
+ else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.MAP) {
23598
+ this.constructMap();
23724
23599
  }
23725
- else {
23726
- responseType_ = 'blob';
23600
+ else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.DIAGRAM) {
23601
+ this.construcDiagram();
23602
+ }
23603
+ else if (this.smartComponentLayout.widget?.type === ComponentWidgetType.EMBEDDED_SLOT) {
23604
+ this.constructEmbeddedSlot();
23605
+ }
23606
+ if (!this.parentLayoutComponent) {
23607
+ // only top level component should call init actions
23608
+ this.parentSmartComponent.initActions();
23727
23609
  }
23728
23610
  }
23729
- let localVarPath = `/filter/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/${this.configuration.encodeParam({ name: "filterIdentifier", value: filterIdentifier, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/load`;
23730
- return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
23731
- context: localVarHttpContext,
23732
- responseType: responseType_,
23733
- withCredentials: this.configuration.withCredentials,
23734
- headers: localVarHeaders,
23735
- observe: observe,
23736
- reportProgress: reportProgress
23737
- });
23611
+ SmartStyleUtility.applyStyle(this.smartComponentLayout.style, this.element, this.renderer);
23738
23612
  }
23739
- performWidgetAction(uuid, filterIdentifier, body, observe = 'body', reportProgress = false, options) {
23740
- if (uuid === null || uuid === undefined) {
23741
- throw new Error('Required parameter uuid was null or undefined when calling performWidgetAction.');
23742
- }
23743
- if (filterIdentifier === null || filterIdentifier === undefined) {
23744
- throw new Error('Required parameter filterIdentifier was null or undefined when calling performWidgetAction.');
23613
+ type() {
23614
+ return ComponentType;
23615
+ }
23616
+ constructExpandableSection() {
23617
+ let data = { ...this.smartComponentLayout };
23618
+ data.expandable = false;
23619
+ this.expandableSection = {
23620
+ title: this.smartComponentLayout?.expandableSectionLabel ?? '',
23621
+ inputs: new Map([
23622
+ ['smartComponentLayout', data],
23623
+ ['parentSmartComponent', this.parentSmartComponent],
23624
+ ['parentLayoutComponent', this.parentLayoutComponent],
23625
+ ]),
23626
+ headerToolbarId: this.smartComponentLayout?.expandableSectionHeaderToolbarId,
23627
+ customComponent: SmartComponentLayoutComponent,
23628
+ };
23629
+ }
23630
+ constructForm() {
23631
+ const widgets = this.layoutService.render({
23632
+ layoutDefinitions: this.smartComponentLayout?.form,
23633
+ });
23634
+ if (this.gridRow && !this.gridRow.valueSets && this.parentSmartComponent?.model) {
23635
+ this.gridRow.valueSets = this.parentSmartComponent.model.valueSets;
23745
23636
  }
23746
- if (body === null || body === undefined) {
23747
- throw new Error('Required parameter body was null or undefined when calling performWidgetAction.');
23637
+ this.smartForm = {
23638
+ direction: this.getFormLayout(),
23639
+ componentModel: this.gridRow ? this.gridRow : this.parentSmartComponent?.model,
23640
+ widgets,
23641
+ };
23642
+ this.bindForm();
23643
+ }
23644
+ getFormLayout() {
23645
+ if (this.smartComponentLayout?.direction) {
23646
+ return this.smartComponentLayout?.direction === LayoutDirection.HORIZONTAL
23647
+ ? SmartFormWidgetDirection.ROW
23648
+ : SmartFormWidgetDirection.COL;
23748
23649
  }
23749
- let localVarHeaders = this.defaultHeaders;
23750
- let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
23751
- if (localVarHttpHeaderAcceptSelected === undefined) {
23752
- // to determine the Accept header
23753
- const httpHeaderAccepts = [
23754
- 'application/json'
23755
- ];
23756
- localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
23650
+ return SmartFormWidgetDirection.COL;
23651
+ }
23652
+ setFormComponent(comp) {
23653
+ if (!this.smartFormComponent) {
23654
+ this.smartFormComponent = comp;
23655
+ this.bindForm();
23757
23656
  }
23758
- if (localVarHttpHeaderAcceptSelected !== undefined) {
23759
- localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
23657
+ }
23658
+ bindForm() {
23659
+ if (this.parentSmartComponent?.useQueryLists) {
23660
+ return;
23760
23661
  }
23761
- let localVarHttpContext = options && options.context;
23762
- if (localVarHttpContext === undefined) {
23763
- localVarHttpContext = new HttpContext();
23662
+ if (this.smartForm && this.smartFormComponent) {
23663
+ this.parentSmartComponent?.addForm(
23664
+ // unique identifier for the form
23665
+ `form_${this.makeid(5)}`, this.smartForm, this.smartFormComponent);
23764
23666
  }
23765
- // to determine the Content-Type header
23766
- const consumes = [
23767
- 'application/json'
23768
- ];
23769
- const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
23770
- if (httpContentTypeSelected !== undefined) {
23771
- localVarHeaders = localVarHeaders.set('Content-Type', httpContentTypeSelected);
23667
+ }
23668
+ makeid(length) {
23669
+ let result = '';
23670
+ const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
23671
+ const charactersLength = characters.length;
23672
+ let counter = 0;
23673
+ while (counter < length) {
23674
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
23675
+ counter += 1;
23772
23676
  }
23773
- let responseType_ = 'json';
23774
- if (localVarHttpHeaderAcceptSelected) {
23775
- if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
23776
- responseType_ = 'text';
23777
- }
23778
- else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
23779
- responseType_ = 'json';
23780
- }
23781
- else {
23782
- responseType_ = 'blob';
23783
- }
23677
+ return result;
23678
+ }
23679
+ constructGrid() {
23680
+ this.smartGrid = {
23681
+ gridIdentifier: this.smartComponentLayout?.widget?.identifier,
23682
+ gridModel: {
23683
+ page: {},
23684
+ },
23685
+ options: {
23686
+ rowUiActionType: GridUiActionType.POPUP_MENU,
23687
+ },
23688
+ layoutDef: SmartLayoutDef.TABLE,
23689
+ paginator: false,
23690
+ layoutComponent: SmartComponentLayoutComponent,
23691
+ layoutUtility: SmartComponentLayoutUtility,
23692
+ };
23693
+ this.bindGrid();
23694
+ }
23695
+ setGridComponent(comp) {
23696
+ if (!this.smartGridComponent) {
23697
+ this.smartGridComponent = comp;
23698
+ this.bindGrid();
23784
23699
  }
23785
- let localVarPath = `/filter/${this.configuration.encodeParam({ name: "uuid", value: uuid, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: "uuid" })}/${this.configuration.encodeParam({ name: "filterIdentifier", value: filterIdentifier, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}/performWidgetAction`;
23786
- return this.httpClient.request('post', `${this.configuration.basePath}${localVarPath}`, {
23787
- context: localVarHttpContext,
23788
- body: body,
23789
- responseType: responseType_,
23790
- withCredentials: this.configuration.withCredentials,
23791
- headers: localVarHeaders,
23792
- observe: observe,
23793
- reportProgress: reportProgress
23794
- });
23795
23700
  }
23796
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FilterService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
23797
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FilterService, providedIn: 'root' }); }
23798
- }
23799
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FilterService, decorators: [{
23800
- type: Injectable,
23801
- args: [{
23802
- providedIn: 'root'
23803
- }]
23804
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
23805
- type: Optional
23806
- }, {
23807
- type: Inject,
23808
- args: [BASE_PATH]
23809
- }] }, { type: Configuration, decorators: [{
23810
- type: Optional
23811
- }] }] });
23812
-
23813
- class SmartFilterEditorService {
23814
- constructor(service, viewCtxService) {
23815
- this.service = service;
23816
- this.viewCtxService = viewCtxService;
23817
- this.modelChanged = new Subject();
23818
- this.submit = new Subject();
23819
- this.itemSelected = new Subject();
23820
- this.toolbars = [];
23701
+ bindGrid() {
23702
+ if (this.parentSmartComponent?.useQueryLists) {
23703
+ if (this.smartGrid && this.smartGridComponent && this.parentSmartComponent) {
23704
+ this.parentSmartComponent.setupGridServices(this.smartGridComponent);
23705
+ }
23706
+ return;
23707
+ }
23708
+ if (this.smartGrid && this.smartGridComponent) {
23709
+ this.smartGrid = this.parentSmartComponent?.addGrid(this.smartGrid, {
23710
+ rowUiActionType: GridUiActionType.POPUP_MENU,
23711
+ }, false, this.smartGridComponent);
23712
+ }
23821
23713
  }
23822
- submitForm(validate) {
23823
- // NOPE
23714
+ constructMap() {
23715
+ this.mapId = this.smartComponentLayout?.widget?.identifier;
23716
+ this.bindMap();
23824
23717
  }
23825
- getInvalidFields() {
23826
- return { invalidFieldKeys: [], invalidFieldNames: [] };
23718
+ construcDiagram() {
23719
+ this.smartDiagramId = this.smartComponentLayout?.widget?.identifier;
23720
+ this.bindDiagram();
23827
23721
  }
23828
- getComplexToolbars() {
23829
- return [...this.toolbars];
23722
+ setMapComponent(comp) {
23723
+ if (!this.smartMapComponent) {
23724
+ this.smartMapComponent = comp;
23725
+ this.bindMap();
23726
+ }
23830
23727
  }
23831
- setComplexToolbars(toolbars) {
23832
- this.toolbars = [...toolbars];
23833
- this.parentSmartComponent?.initActions();
23728
+ setDiagramComponent(comp) {
23729
+ if (!this.smartDiagramComponent) {
23730
+ this.smartDiagramComponent = comp;
23731
+ this.bindDiagram();
23732
+ }
23834
23733
  }
23835
- async load() {
23836
- if (this.config.uuid) {
23837
- this.model = await this.service.load(this.config.uuid, this.config.identifier).toPromise();
23838
- this.modelChanged.next();
23734
+ setFilterComponent(comp) {
23735
+ if (!this.smartFilterComponent) {
23736
+ this.smartFilterComponent = comp;
23737
+ this.bindFilter();
23839
23738
  }
23840
23739
  }
23841
- async peformWidgetAction(request) {
23842
- if (this.config.uuid) {
23843
- let filterView = this.viewCtxService
23844
- .getCurrentViewContext()
23845
- ?.views.find((view) => view.uuid == this.config.uuid);
23846
- if (filterView && filterView.state != ViewState.CLOSED) {
23847
- this.model = await this.service
23848
- .performWidgetAction(this.config.uuid, this.config.identifier, request)
23849
- .toPromise();
23850
- this.modelChanged.next();
23851
- }
23740
+ bindMap() {
23741
+ if (this.parentSmartComponent.useQueryLists) {
23742
+ return;
23852
23743
  }
23744
+ console.warn('Map components are only supported through QueryLists!');
23853
23745
  }
23854
- getModel() {
23855
- return this.model;
23746
+ bindDiagram() {
23747
+ if (this.parentSmartComponent.useQueryLists) {
23748
+ return;
23749
+ }
23750
+ console.warn('Diagram components are only supported through QueryLists!');
23856
23751
  }
23857
- async performUiActionRequest(uiActionRequest, widgetId, nodeId) {
23858
- await this.peformWidgetAction(uiActionRequest);
23752
+ setToolbarComponent(comp) {
23753
+ this.toolbar = comp;
23859
23754
  }
23860
- async handleSpecificDemandsAsynchronously(uiAction, uiActionRequest) {
23861
- return {
23862
- shouldPerformAction: true,
23863
- uiActionRequest: uiActionRequest,
23864
- };
23755
+ constructFilter() {
23756
+ this.filterId = this.smartComponentLayout?.widget?.identifier;
23757
+ this.bindFilter();
23865
23758
  }
23866
- getAdditionalParams(uiAction) {
23867
- throw new Error('Method not implemented.');
23759
+ bindFilter() {
23760
+ if (this.parentSmartComponent.useQueryLists) {
23761
+ return;
23762
+ }
23763
+ console.warn('Filter widgets are only supported through QueryLists!');
23868
23764
  }
23869
- async bulkUpdateFilterExpression(operationType, item) {
23870
- if (!this.model?.readOnly) {
23871
- if (item) {
23872
- item.expressionData.boolOperator = operationType;
23765
+ constructTree() {
23766
+ if (this.parentSmartComponent?.useQueryLists) {
23767
+ return;
23768
+ }
23769
+ this.parentSmartComponent.setUpDefaultTree(this.smartComponentLayout?.widget?.identifier);
23770
+ this.treeService?.initialize();
23771
+ }
23772
+ constructToolbar() {
23773
+ let toolbarId = this.smartComponentLayout?.widget?.identifier;
23774
+ if (this.toolbarId !== toolbarId) {
23775
+ this.toolbarId = toolbarId;
23776
+ }
23777
+ let properties = this.smartComponentLayout?.widget?.properties;
23778
+ if (properties && properties['toolbar_properties']) {
23779
+ this.toolbarPropertes = properties['toolbar_properties'];
23780
+ }
23781
+ }
23782
+ constructEmbeddedSlot() {
23783
+ this.embeddedSlotContainerId = this.smartComponentLayout?.widget?.identifier;
23784
+ this.embeddedSlotActive = true;
23785
+ this.tryRegisterEmbeddedSlot();
23786
+ }
23787
+ tryRegisterEmbeddedSlot() {
23788
+ if (this.embeddedSlotContainerId && this.uuid && this._embeddedSlotVcRef) {
23789
+ // An EMBEDDED_SLOT widget slot is LAYOUT-kind: it lives inside the re-rendering
23790
+ // layout *ngFor, so its child must be detached before a top-level re-render and
23791
+ // reattaches when this slot re-registers. (#28870)
23792
+ this.viewContext.registerEmbeddedSlot(this.uuid, this.embeddedSlotContainerId, this._embeddedSlotVcRef, 'layout');
23793
+ }
23794
+ }
23795
+ updateUuid(newUuid) {
23796
+ const oldUuid = this.uuid;
23797
+ this.uuid = newUuid;
23798
+ if (oldUuid !== newUuid && this.embeddedSlotContainerId) {
23799
+ if (oldUuid) {
23800
+ this.viewContext.unregisterEmbeddedSlot(oldUuid, this.embeddedSlotContainerId);
23873
23801
  }
23874
- await this.peformWidgetAction({
23875
- code: 'BULK_UPDATE_FILTER_EXPRESSION',
23876
- params: {
23877
- model: item,
23878
- operator: operationType,
23879
- },
23880
- });
23802
+ this.tryRegisterEmbeddedSlot();
23881
23803
  }
23882
23804
  }
23883
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorService, deps: [{ token: FilterService }, { token: SmartViewContextService }], target: i0.ɵɵFactoryTarget.Injectable }); }
23884
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorService }); }
23805
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutComponent, deps: [{ token: SmartformLayoutDefinitionService }, { token: SmartViewContextService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
23806
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: { smartComponentLayout: "smartComponentLayout", parentLayoutComponent: "parentLayoutComponent", parentSmartComponent: "parentSmartComponent", gridRow: "gridRow" }, host: { properties: { "attr.data-testid": "this.testId", "class.horizontal": "this.isHorizontal", "class.vertical": "this.isVertical" } }, viewQueries: [{ propertyName: "formRef", first: true, predicate: SmartformComponent, descendants: true, isSignal: true }, { propertyName: "embeddedSlotVcRefSetter", first: true, predicate: ["embeddedSlot"], descendants: true, read: ViewContainerRef }, { propertyName: "smartFormList", predicate: ["form"], descendants: true }, { propertyName: "smartGridList", predicate: ["grid"], descendants: true }, { propertyName: "smartMapList", predicate: ["map"], descendants: true }, { propertyName: "smartDiagramList", predicate: ["diagram"], descendants: true }, { propertyName: "smartFilterList", predicate: ["filter"], descendants: true }, { propertyName: "toolbarList", predicate: ["toolbar"], descendants: true }, { propertyName: "expandableComponents", predicate: ExpandableSectionComponent, descendants: true }, { propertyName: "components", predicate: SmartComponentLayoutComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\n\n<ng-template #expandable>\n <smart-expandable-section\n *ngIf=\"expandableSection\"\n [data]=\"expandableSection\"\n ></smart-expandable-section>\n</ng-template>\n\n<ng-template #normal>\n @if (smartComponentLayout?.type === type().CONTAINER) {\n <smart-component-layout\n *ngFor=\"let layout of smartComponentLayout?.components\"\n [parentSmartComponent]=\"parentSmartComponent\"\n [parentLayoutComponent]=\"this\"\n [smartComponentLayout]=\"layout\"\n [gridRow]=\"gridRow\"\n ></smart-component-layout>\n }\n <smartform *ngIf=\"smartForm\" #form [smartForm]=\"smartForm\"></smartform>\n <smart-grid\n *ngIf=\"smartGrid\"\n #grid\n [smartGrid]=\"smartGrid\"\n [uuid]=\"uuid!\"\n [parentLayoutComponent]=\"this\"\n [parent]=\"parentSmartComponent\"\n ></smart-grid>\n <smart-map\n *ngIf=\"!!uuid && !!mapId\"\n #map\n [uuid]=\"uuid\"\n [identifier]=\"mapId\"\n [parent]=\"parentSmartComponent\"\n ></smart-map>\n <smart-diagram\n *ngIf=\"!!uuid && !!smartDiagramId\"\n #diagram\n [uuid]=\"uuid\"\n [identifier]=\"smartDiagramId\"\n [parent]=\"parentSmartComponent\"\n ></smart-diagram>\n <smart-filter-widget\n *ngIf=\"!!uuid && !!filterId\"\n #filter\n [uuid]=\"uuid\"\n [identifier]=\"filterId\"\n [parent]=\"parentSmartComponent\"\n ></smart-filter-widget>\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\n <smart-ui-action-toolbar\n *ngIf=\"!!toolbarId\"\n #toolbar\n [id]=\"toolbarId\"\n [toolbarPropertes]=\"toolbarPropertes\"\n ></smart-ui-action-toolbar>\n <ng-container *ngIf=\"embeddedSlotActive\" #embeddedSlot></ng-container>\n</ng-template>\n", styles: [":host(.horizontal){display:flex;flex-direction:row}:host(.vertical){display:flex;flex-direction:column}:host(.horizontal) smart-component-layout{display:flex}:host(.horizontal) smartform{flex:1;display:flex}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SmartGridComponent, selector: "smart-grid", inputs: ["smartGrid", "uuid", "parent", "parentLayoutComponent", "dev"] }, { kind: "component", type: ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { kind: "component", type: SmartTreeComponent, selector: "smart-tree", inputs: ["treeStyle", "treeService"] }, { kind: "component", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }, { kind: "component", type: SmartformComponent, selector: "smartform", inputs: ["smartForm"] }, { kind: "component", type: SmartMapComponent, selector: "smart-map", inputs: ["uuid", "identifier", "parent"] }, { kind: "component", type: SmartDiagramComponent, selector: "smart-diagram", inputs: ["uuid", "identifier", "parent", "diagramModel", "options", "plugins"], outputs: ["elementSelect", "canvasClick", "dataClick"] }, { kind: "component", type: SmartFilterWidgetComponent, selector: "smart-filter-widget", inputs: ["uuid", "identifier", "parent"] }, { kind: "component", type: SmartComponentLayoutComponent, selector: "smart-component-layout", inputs: ["smartComponentLayout", "parentLayoutComponent", "parentSmartComponent", "gridRow"] }] }); }
23885
23807
  }
23886
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorService, decorators: [{
23887
- type: Injectable
23888
- }], ctorParameters: () => [{ type: FilterService }, { type: SmartViewContextService }] });
23808
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutComponent, decorators: [{
23809
+ type: Component,
23810
+ args: [{ selector: 'smart-component-layout', template: "<div *ngIf=\"smartComponentLayout?.expandable; then expandable; else normal\"> </div>\n\n<ng-template #expandable>\n <smart-expandable-section\n *ngIf=\"expandableSection\"\n [data]=\"expandableSection\"\n ></smart-expandable-section>\n</ng-template>\n\n<ng-template #normal>\n @if (smartComponentLayout?.type === type().CONTAINER) {\n <smart-component-layout\n *ngFor=\"let layout of smartComponentLayout?.components\"\n [parentSmartComponent]=\"parentSmartComponent\"\n [parentLayoutComponent]=\"this\"\n [smartComponentLayout]=\"layout\"\n [gridRow]=\"gridRow\"\n ></smart-component-layout>\n }\n <smartform *ngIf=\"smartForm\" #form [smartForm]=\"smartForm\"></smartform>\n <smart-grid\n *ngIf=\"smartGrid\"\n #grid\n [smartGrid]=\"smartGrid\"\n [uuid]=\"uuid!\"\n [parentLayoutComponent]=\"this\"\n [parent]=\"parentSmartComponent\"\n ></smart-grid>\n <smart-map\n *ngIf=\"!!uuid && !!mapId\"\n #map\n [uuid]=\"uuid\"\n [identifier]=\"mapId\"\n [parent]=\"parentSmartComponent\"\n ></smart-map>\n <smart-diagram\n *ngIf=\"!!uuid && !!smartDiagramId\"\n #diagram\n [uuid]=\"uuid\"\n [identifier]=\"smartDiagramId\"\n [parent]=\"parentSmartComponent\"\n ></smart-diagram>\n <smart-filter-widget\n *ngIf=\"!!uuid && !!filterId\"\n #filter\n [uuid]=\"uuid\"\n [identifier]=\"filterId\"\n [parent]=\"parentSmartComponent\"\n ></smart-filter-widget>\n <smart-tree *ngIf=\"treeService\" [treeService]=\"treeService!\"></smart-tree>\n <smart-ui-action-toolbar\n *ngIf=\"!!toolbarId\"\n #toolbar\n [id]=\"toolbarId\"\n [toolbarPropertes]=\"toolbarPropertes\"\n ></smart-ui-action-toolbar>\n <ng-container *ngIf=\"embeddedSlotActive\" #embeddedSlot></ng-container>\n</ng-template>\n", styles: [":host(.horizontal){display:flex;flex-direction:row}:host(.vertical){display:flex;flex-direction:column}:host(.horizontal) smart-component-layout{display:flex}:host(.horizontal) smartform{flex:1;display:flex}\n"] }]
23811
+ }], ctorParameters: () => [{ type: SmartformLayoutDefinitionService }, { type: SmartViewContextService }, { type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { smartComponentLayout: [{
23812
+ type: Input
23813
+ }], parentLayoutComponent: [{
23814
+ type: Input
23815
+ }], parentSmartComponent: [{
23816
+ type: Input
23817
+ }], gridRow: [{
23818
+ type: Input
23819
+ }], testId: [{
23820
+ type: HostBinding,
23821
+ args: ['attr.data-testid']
23822
+ }], isHorizontal: [{
23823
+ type: HostBinding,
23824
+ args: ['class.horizontal']
23825
+ }], isVertical: [{
23826
+ type: HostBinding,
23827
+ args: ['class.vertical']
23828
+ }], smartFormList: [{
23829
+ type: ViewChildren,
23830
+ args: ['form']
23831
+ }], smartGridList: [{
23832
+ type: ViewChildren,
23833
+ args: ['grid']
23834
+ }], smartMapList: [{
23835
+ type: ViewChildren,
23836
+ args: ['map']
23837
+ }], smartDiagramList: [{
23838
+ type: ViewChildren,
23839
+ args: ['diagram']
23840
+ }], smartFilterList: [{
23841
+ type: ViewChildren,
23842
+ args: ['filter']
23843
+ }], toolbarList: [{
23844
+ type: ViewChildren,
23845
+ args: ['toolbar']
23846
+ }], embeddedSlotVcRefSetter: [{
23847
+ type: ViewChild,
23848
+ args: ['embeddedSlot', { read: ViewContainerRef, static: false }]
23849
+ }], expandableComponents: [{
23850
+ type: ViewChildren,
23851
+ args: [ExpandableSectionComponent]
23852
+ }], components: [{
23853
+ type: ViewChildren,
23854
+ args: [SmartComponentLayoutComponent]
23855
+ }] } });
23856
+
23857
+ const DEFAULT_PROVIDERS = [
23858
+ DefaultChartOptionsProvider,
23859
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: barChart, multi: true },
23860
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: scatterChart, multi: true },
23861
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: bubbleChart, multi: true },
23862
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: horizontalBarChart, multi: true },
23863
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: stackedBarChart, multi: true },
23864
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: horizontalStackedBarChart, multi: true },
23865
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: multiAxisLineChart, multi: true },
23866
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: polarAreaChart, multi: true },
23867
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: radarChart, multi: true },
23868
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: doughnutChart, multi: true },
23869
+ { provide: CUSTOM_DIAGRAM_OPTIONS, useValue: pieChart, multi: true },
23870
+ ];
23871
+ class SmartDiagramModule {
23872
+ static forRoot(providers) {
23873
+ return {
23874
+ ngModule: SmartDiagramModule,
23875
+ providers: [...DEFAULT_PROVIDERS, ...providers],
23876
+ };
23877
+ }
23878
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
23879
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, declarations: [SmartDiagramComponent], imports: [BrowserModule, ChartModule], exports: [SmartDiagramComponent] }); }
23880
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, imports: [BrowserModule, ChartModule] }); }
23881
+ }
23882
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartDiagramModule, decorators: [{
23883
+ type: NgModule,
23884
+ args: [{
23885
+ declarations: [SmartDiagramComponent],
23886
+ imports: [BrowserModule, ChartModule],
23887
+ exports: [SmartDiagramComponent],
23888
+ }]
23889
+ }] });
23889
23890
 
23890
23891
  class SmartFilterEditorModule {
23891
23892
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -23896,7 +23897,8 @@ class SmartFilterEditorModule {
23896
23897
  SmartFilterExpressionItemComponent,
23897
23898
  AdvancedSmartFilterExpressionItemComponent,
23898
23899
  AdvancedRelationButtonComponent,
23899
- ExpressionEditorDialogComponent], imports: [CommonModule,
23900
+ ExpressionEditorDialogComponent,
23901
+ SmartFilterWidgetComponent], imports: [CommonModule,
23900
23902
  SmartIconModule,
23901
23903
  SmartExpandableSectionModule,
23902
23904
  SmartViewContextModule,
@@ -23909,7 +23911,8 @@ class SmartFilterEditorModule {
23909
23911
  SmartFilterExpressionItemComponent,
23910
23912
  AdvancedSmartFilterExpressionItemComponent,
23911
23913
  AdvancedRelationButtonComponent,
23912
- ExpressionEditorDialogComponent] }); }
23914
+ ExpressionEditorDialogComponent,
23915
+ SmartFilterWidgetComponent] }); }
23913
23916
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartFilterEditorModule, imports: [CommonModule,
23914
23917
  SmartIconModule,
23915
23918
  SmartExpandableSectionModule,
@@ -23930,6 +23933,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
23930
23933
  AdvancedSmartFilterExpressionItemComponent,
23931
23934
  AdvancedRelationButtonComponent,
23932
23935
  ExpressionEditorDialogComponent,
23936
+ SmartFilterWidgetComponent,
23933
23937
  ],
23934
23938
  imports: [
23935
23939
  CommonModule,
@@ -23949,7 +23953,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
23949
23953
  AdvancedSmartFilterExpressionItemComponent,
23950
23954
  AdvancedRelationButtonComponent,
23951
23955
  ExpressionEditorDialogComponent,
23956
+ SmartFilterWidgetComponent,
23957
+ ],
23958
+ providers: [],
23959
+ }]
23960
+ }] });
23961
+
23962
+ class SmartComponentLayoutModule {
23963
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
23964
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, declarations: [SmartComponentLayoutComponent], imports: [BrowserModule,
23965
+ MatCommonModule,
23966
+ SmartGridModule,
23967
+ SmartExpandableSectionModule,
23968
+ SmarttreeModule,
23969
+ SmartViewContextModule,
23970
+ SmartMapModule,
23971
+ SmartDiagramModule,
23972
+ SmartFilterEditorModule,
23973
+ InputGroupModule,
23974
+ InputGroupAddonModule], exports: [SmartComponentLayoutComponent] }); }
23975
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, imports: [BrowserModule,
23976
+ MatCommonModule,
23977
+ SmartGridModule,
23978
+ SmartExpandableSectionModule,
23979
+ SmarttreeModule,
23980
+ SmartViewContextModule,
23981
+ SmartMapModule,
23982
+ SmartDiagramModule,
23983
+ SmartFilterEditorModule,
23984
+ InputGroupModule,
23985
+ InputGroupAddonModule] }); }
23986
+ }
23987
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartComponentLayoutModule, decorators: [{
23988
+ type: NgModule,
23989
+ args: [{
23990
+ declarations: [SmartComponentLayoutComponent],
23991
+ imports: [
23992
+ BrowserModule,
23993
+ MatCommonModule,
23994
+ SmartGridModule,
23995
+ SmartExpandableSectionModule,
23996
+ SmarttreeModule,
23997
+ SmartViewContextModule,
23998
+ SmartMapModule,
23999
+ SmartDiagramModule,
24000
+ SmartFilterEditorModule,
24001
+ InputGroupModule,
24002
+ InputGroupAddonModule,
23952
24003
  ],
24004
+ exports: [SmartComponentLayoutComponent],
23953
24005
  providers: [],
23954
24006
  }]
23955
24007
  }] });
@@ -24536,6 +24588,9 @@ class SmartComponentApiClient {
24536
24588
  }
24537
24589
  getAllSmartFilterEditorContentComponents() {
24538
24590
  let filters = this.getSmartFilterEditorContentComponentsQL()?.toArray() ?? [];
24591
+ this.getSmartComponentLayoutsQL()?.forEach((comp) => {
24592
+ filters.push(...SmartComponentLayoutUtility.getFilters(comp));
24593
+ });
24539
24594
  return filters;
24540
24595
  }
24541
24596
  getAllSmartUiActionToolbars() {
@@ -25997,5 +26052,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
25997
26052
  * Generated bundle index. Do not edit.
25998
26053
  */
25999
26054
 
26000
- export { APIS$5 as APIS, AbstractMap, AclEditingViewComponent, AdvancedRelationButtonComponent, AdvancedSmartFilterExpressionItemComponent, ApiModule$5 as ApiModule, ApiQueueService, BASE_PATH$7 as BASE_PATH, COLLECTION_FORMATS$7 as COLLECTION_FORMATS, COMPONENT_LIBRARY, CUSTOM_DIAGRAM_OPTIONS, ClickMenuComponent, CloseResult, ComparableDropdownDirective, ComparableMultiselectDirective, ComponentFactoryService, ComponentFactoryServiceModule, ComponentLibrary, ComponentType, ComponentWidgetType, Configuration$7 as Configuration, DIALOG_DISABLE_CLOSE, DataChangeKind, DefaultChartOptionsProvider, DefaultUiActionCode_CLOSE, DrawTime, EMPTY_PARAMS, ExpandableSectionButtonIconPosition, ExpandableSectionButtonType, ExpandableSectionComponent, ExpressionEditorDialogComponent, FilterExpressionBoolOperator$1 as FilterExpressionBoolOperator, FilterExpressionBuilderGroupBuilderGroupKindEnum, FilterExpressionDataType, FilterExpressionFieldWidgetType, FilterExpressionOperation, FilterExpressionOrderByOrderEnum, GenericPageComponent, GeoMapDataLoadingMode, GeoMapDataSourceType, GeoMapItemKind, GeoMapOperationMode, GeoMapSelectionMode, GeoMapTextType, GoogleMap, GridColumnContentType, GridDataAccessConfigKindEnum, GridSelectionMode, GridSelectionType, GridUiActionType, GridViewDescriptorKindEnum, HighlightPipe, HoverMenuComponent, IS_ASYNC_PARAM_NAME, IconPosition, ImageResourceKindEnum, InvalidSmartlinkComponent, LayoutDirection, LeafletMap, LinkTargetEnum, MAP_ENGINE, MapEngine, MenuOpenDirection, MenuTriggerType, MessageOptionType, MessageTextType, MessageType, NAMED_VALIDATOR, NamedValidatorOperationEnum, NamedValidatorService, NoPermissionPageComponent, PhotoCaptureWidgetComponent, REUSE_ROUTER_SLOT_COMPONENT, ROOT_CONTAINER_UUID, ROUTER_SLOT_ID, RecordingUploaderPropertiesOpenDirectionEnum, SMART_DEFAULT_VIEW_COMPONENTS, SearchPageComponent, SelectionDefinitionTypeEnum, SelectionDefinitionValueSetValueTypeEnum, ServerRequestType, SessionAPIS, SessionErrorBehaviour, SessionService, SharedModule, SmartActionType, SmartBackendBootstrapService, SmartComponent, SmartComponentApiClient, SmartComponentLayoutComponent, SmartComponentLayoutModule, SmartComponentLayoutUtility, SmartDatePipe, SmartDateTimePipe, SmartDefaultErrorUiService, SmartDiagramComponent, SmartDiagramModule, SmartDialog, SmartEmbeddedSlotDirective, SmartExpandableSectionModule, SmartExpandableSectionService, SmartFileEditorComponent, SmartFileUploaderComponent, SmartFilterComponent, SmartFilterEditorContentComponent, SmartFilterEditorModule, SmartFilterEditorService, SmartFilterExpressionItemComponent, SmartFilterExpressionItemsComponent, SmartFilterModule, SmartFilterParamComponent, SmartFilterParamsComponent, SmartFilterPosition, SmartFilterType, SmartFormInputMode, SmartFormTextFieldButtonIconPosition, SmartFormWidgetDirection, SmartFormWidgetType, SmartFormWidgetWidth, SmartGenericPagesModule, SmartGridButtonType, SmartGridComponent, SmartGridDataLayout, SmartGridModule, SmartGridService, SmartGridType, SmartIconComponent, SmartIconModule, SmartIconService, SmartLayoutDef, SmartLinkChannelVariableInPath, SmartLinkMigrationStatusStatusEnum, SmartLinkUuidVariableInPath, SmartMapComponent, SmartMapModule, SmartMultiFileEditorComponent, SmartNavbarComponent, SmartNavbarModule, SmartNavbarService, SmartNavigationModule, SmartNavigationService, SmartNgClientModule, SmartNgClientService, SmartService, SmartSessionModule, SmartSessionService, SmartSessionTimerComponent, SmartSubject, SmartTabGroupModule, SmartTable, SmartTableButtonType, SmartTableHeaderPropertyType, SmartTableInterfaceTypeEnum, SmartTableOptionButtonDirection, SmartTableOrder, SmartTableType, SmartTimePipe, SmartTooltipDirective, SmartTreeComponent, SmartTreeNodeButtonType, SmartUserSettinsIconPosition, SmartValidationModule, SmartValidatorName, SmartViewContextErrorDialogButtonLabel, SmartViewContextErrorDialogMessage, SmartViewContextErrorDialogTitle, SmartViewContextModule, SmartViewContextService, SmartViewRedirect, SmartVoiceRecorderComponent, SmartWidgetHintPosition, SmartWidgetHintPositionEnum, SmartWidgetSettings, SmartdialogModule, SmartdialogService, SmartfileuploaderComponent, SmartformComponent, SmartformLayoutDefinitionService, SmartformwidgetComponent, SmarttableComponent, SmarttableModule, SmarttableService, SmarttreeGenericService, SmarttreeModule, SmarttreeService, SubjectSelectorComponent, ThemeService, ToggleLabelPosition, ToolbarAlignment, ToolbarDirection, USE_ADVANCED_FILTER, UiActionButtonComponent, UiActionButtonType, UiActionConfirmDialogComponent, UiActionConfirmDialogService, UiActionDescriptorService, UiActionDialogButtonComponent, UiActionDialogType, UiActionFeedbackType, UiActionInputDialogComponent, UiActionInputDialogService, UiActionInputType, UiActionService, UiActionToolbarComponent, UiActionTooltipTooltipPositionEnum, UiBadgeComponent, UiBadgeDirective, UploadWidgetComponent, UploadWidgetType, ValidationResultPageComponent, ValueChangeMode, ViewContextRebuiltError, ViewEventHandlerViewEventTypeEnum, ViewService, ViewState, ViewType, VoiceRecordWidgetComponent, barChart, bubbleChart, createBasicOptions, doughnutChart, horizontalBarChart, horizontalStackedBarChart, multiAxisLineChart, pieChart, polarAreaChart, radarChart, resolveSlot, resolveViewHandler, scatterChart, stackedBarChart, transformDataToBarLikeDataSet, transformDataToBasicDataSets, transformDataToBubble, transformDataToScatter };
26055
+ export { APIS$5 as APIS, AbstractMap, AclEditingViewComponent, AdvancedRelationButtonComponent, AdvancedSmartFilterExpressionItemComponent, ApiModule$5 as ApiModule, ApiQueueService, BASE_PATH$7 as BASE_PATH, COLLECTION_FORMATS$7 as COLLECTION_FORMATS, COMPONENT_LIBRARY, CUSTOM_DIAGRAM_OPTIONS, ClickMenuComponent, CloseResult, ComparableDropdownDirective, ComparableMultiselectDirective, ComponentFactoryService, ComponentFactoryServiceModule, ComponentLibrary, ComponentType, ComponentWidgetType, Configuration$7 as Configuration, DIALOG_DISABLE_CLOSE, DataChangeKind, DefaultChartOptionsProvider, DefaultUiActionCode_CLOSE, DrawTime, EMPTY_PARAMS, ExpandableSectionButtonIconPosition, ExpandableSectionButtonType, ExpandableSectionComponent, ExpressionEditorDialogComponent, FilterExpressionBoolOperator$1 as FilterExpressionBoolOperator, FilterExpressionBuilderGroupBuilderGroupKindEnum, FilterExpressionDataType, FilterExpressionFieldWidgetType, FilterExpressionOperation, FilterExpressionOrderByOrderEnum, GenericPageComponent, GeoMapDataLoadingMode, GeoMapDataSourceType, GeoMapItemKind, GeoMapOperationMode, GeoMapSelectionMode, GeoMapTextType, GoogleMap, GridColumnContentType, GridDataAccessConfigKindEnum, GridSelectionMode, GridSelectionType, GridUiActionType, GridViewDescriptorKindEnum, HighlightPipe, HoverMenuComponent, IS_ASYNC_PARAM_NAME, IconPosition, ImageResourceKindEnum, InvalidSmartlinkComponent, LayoutDirection, LeafletMap, LinkTargetEnum, MAP_ENGINE, MapEngine, MenuOpenDirection, MenuTriggerType, MessageOptionType, MessageTextType, MessageType, NAMED_VALIDATOR, NamedValidatorOperationEnum, NamedValidatorService, NoPermissionPageComponent, PhotoCaptureWidgetComponent, REUSE_ROUTER_SLOT_COMPONENT, ROOT_CONTAINER_UUID, ROUTER_SLOT_ID, RecordingUploaderPropertiesOpenDirectionEnum, SMART_DEFAULT_VIEW_COMPONENTS, SearchPageComponent, SelectionDefinitionTypeEnum, SelectionDefinitionValueSetValueTypeEnum, ServerRequestType, SessionAPIS, SessionErrorBehaviour, SessionService, SharedModule, SmartActionType, SmartBackendBootstrapService, SmartComponent, SmartComponentApiClient, SmartComponentLayoutComponent, SmartComponentLayoutModule, SmartComponentLayoutUtility, SmartDatePipe, SmartDateTimePipe, SmartDefaultErrorUiService, SmartDiagramComponent, SmartDiagramModule, SmartDialog, SmartEmbeddedSlotDirective, SmartExpandableSectionModule, SmartExpandableSectionService, SmartFileEditorComponent, SmartFileUploaderComponent, SmartFilterComponent, SmartFilterEditorContentComponent, SmartFilterEditorModule, SmartFilterEditorService, SmartFilterExpressionItemComponent, SmartFilterExpressionItemsComponent, SmartFilterModule, SmartFilterParamComponent, SmartFilterParamsComponent, SmartFilterPosition, SmartFilterType, SmartFilterWidgetComponent, SmartFormInputMode, SmartFormTextFieldButtonIconPosition, SmartFormWidgetDirection, SmartFormWidgetType, SmartFormWidgetWidth, SmartGenericPagesModule, SmartGridButtonType, SmartGridComponent, SmartGridDataLayout, SmartGridModule, SmartGridService, SmartGridType, SmartIconComponent, SmartIconModule, SmartIconService, SmartLayoutDef, SmartLinkChannelVariableInPath, SmartLinkMigrationStatusStatusEnum, SmartLinkUuidVariableInPath, SmartMapComponent, SmartMapModule, SmartMultiFileEditorComponent, SmartNavbarComponent, SmartNavbarModule, SmartNavbarService, SmartNavigationModule, SmartNavigationService, SmartNgClientModule, SmartNgClientService, SmartService, SmartSessionModule, SmartSessionService, SmartSessionTimerComponent, SmartSubject, SmartTabGroupModule, SmartTable, SmartTableButtonType, SmartTableHeaderPropertyType, SmartTableInterfaceTypeEnum, SmartTableOptionButtonDirection, SmartTableOrder, SmartTableType, SmartTimePipe, SmartTooltipDirective, SmartTreeComponent, SmartTreeNodeButtonType, SmartUserSettinsIconPosition, SmartValidationModule, SmartValidatorName, SmartViewContextErrorDialogButtonLabel, SmartViewContextErrorDialogMessage, SmartViewContextErrorDialogTitle, SmartViewContextModule, SmartViewContextService, SmartViewRedirect, SmartVoiceRecorderComponent, SmartWidgetHintPosition, SmartWidgetHintPositionEnum, SmartWidgetSettings, SmartdialogModule, SmartdialogService, SmartfileuploaderComponent, SmartformComponent, SmartformLayoutDefinitionService, SmartformwidgetComponent, SmarttableComponent, SmarttableModule, SmarttableService, SmarttreeGenericService, SmarttreeModule, SmarttreeService, SubjectSelectorComponent, ThemeService, ToggleLabelPosition, ToolbarAlignment, ToolbarDirection, USE_ADVANCED_FILTER, UiActionButtonComponent, UiActionButtonType, UiActionConfirmDialogComponent, UiActionConfirmDialogService, UiActionDescriptorService, UiActionDialogButtonComponent, UiActionDialogType, UiActionFeedbackType, UiActionInputDialogComponent, UiActionInputDialogService, UiActionInputType, UiActionService, UiActionToolbarComponent, UiActionTooltipTooltipPositionEnum, UiBadgeComponent, UiBadgeDirective, UploadWidgetComponent, UploadWidgetType, ValidationResultPageComponent, ValueChangeMode, ViewContextRebuiltError, ViewEventHandlerViewEventTypeEnum, ViewService, ViewState, ViewType, VoiceRecordWidgetComponent, barChart, bubbleChart, createBasicOptions, doughnutChart, horizontalBarChart, horizontalStackedBarChart, multiAxisLineChart, pieChart, polarAreaChart, radarChart, resolveSlot, resolveViewHandler, scatterChart, stackedBarChart, transformDataToBarLikeDataSet, transformDataToBasicDataSets, transformDataToBubble, transformDataToScatter };
26001
26056
  //# sourceMappingURL=smartbit4all-ng-client.mjs.map