UNPKG

ontimize-web-ngx

Version:
507 lines 89.6 kB
import { __decorate, __metadata } from "tslib"; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Inject, Injector, Optional, ViewChild, ViewEncapsulation } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { MatMenu } from '@angular/material/menu'; import { BooleanInputConverter } from '../../../../../decorators/input-converter'; import { DialogService } from '../../../../../services/dialog.service'; import { O_CHART_ON_DEMAND_SERVICE, O_REPORT_SERVICE } from '../../../../../services/factories'; import { OntimizeExportDataProviderService } from '../../../../../services/ontimize-export-data-provider.service'; import { SnackBarService } from '../../../../../services/snackbar.service'; import { OTranslateService } from '../../../../../services/translate/o-translate.service'; import { OLoadFilterDialogComponent } from '../../../../../shared/components/filter/load-filter/o-load-filter-dialog.component'; import { OStoreFilterDialogComponent } from '../../../../../shared/components/filter/store-filter/o-store-filter-dialog.component'; import { PermissionsUtils } from '../../../../../util/permissions'; import { Util } from '../../../../../util/util'; import { OTableBase } from '../../../o-table-base.class'; import { OTableApplyConfigurationDialogComponent } from '../../dialog/apply-configuration/o-table-apply-configuration-dialog.component'; import { OTableExportDialogComponent } from '../../dialog/export/o-table-export-dialog.component'; import { OTableStoreConfigurationDialogComponent } from '../../dialog/store-configuration/o-table-store-configuration-dialog.component'; import { OTableVisibleColumnsDialogComponent } from '../../dialog/visible-columns/o-table-visible-columns-dialog.component'; import { OTableOptionComponent } from '../table-option/o-table-option.component'; import { OTableGroupByColumnsDialogComponent } from '../../dialog/group-by-columns/o-table-group-by-columns-dialog.component'; import * as i0 from "@angular/core"; import * as i1 from "@angular/material/dialog"; import * as i2 from "@angular/common"; import * as i3 from "@angular/material/divider"; import * as i4 from "@angular/material/menu"; import * as i5 from "../table-option/o-table-option.component"; import * as i6 from "../../../../../pipes/o-translate.pipe"; import * as i7 from "../../../o-table-base.class"; export const DEFAULT_INPUTS_O_TABLE_MENU = [ 'selectAllCheckbox: select-all-checkbox', 'exportButton: export-button', 'columnsVisibilityButton: columns-visibility-button', 'showConfigurationOption: show-configuration-option', 'showFilterOption: show-filter-option', 'showGroupByOption: show-group-by-option', 'showResetWidthOption: show-reset-width-option', 'showReportOnDemandOption: show-report-on-demand-option', 'showChartsOnDemandOption: show-charts-on-demand-option' ]; export const DEFAULT_OUTPUTS_O_TABLE_MENU = []; export class OTableMenuComponent { constructor(injector, dialog, cd, table, chartOnDemandService, reportService) { this.injector = injector; this.dialog = dialog; this.cd = cd; this.table = table; this.chartOnDemandService = chartOnDemandService; this.reportService = reportService; this.selectAllCheckbox = false; this.exportButton = true; this.showConfigurationOption = true; this.showFilterOption = true; this.columnsVisibilityButton = true; this.showGroupByOption = true; this.showResetWidthOption = true; this.showReportOnDemandOption = true; this.showChartsOnDemandOption = true; this.onVisibleFilterOptionChange = new EventEmitter(); this.mutationObservers = []; this.dialogService = this.injector.get(DialogService); this.translateService = this.injector.get(OTranslateService); this.snackBarService = this.injector.get(SnackBarService); this.exportDataProvider = this.injector.get(OntimizeExportDataProviderService); } ngOnInit() { this.permissions = this.table.getMenuPermissions(); } get isColumnFilterOptionActive() { return this.table && this.table.isColumnFiltersActive; } ngAfterViewInit() { if (!this.permissions.items || this.permissions.items.length === 0) { return; } if (this.selectAllCheckboxOption && !this.enabledSelectAllCheckbox) { this.disableOTableOptionComponent(this.selectAllCheckboxOption); } if (this.exportButtonOption && !this.enabledExportButton) { this.disableOTableOptionComponent(this.exportButtonOption); } if (this.columnsVisibilityButtonOption && !this.enabledColumnsVisibilityButton) { this.disableOTableOptionComponent(this.columnsVisibilityButtonOption); } if (this.filterMenuButton && !this.enabledFilterMenu) { this.disableButton(this.filterMenuButton); } if (this.configurationMenuButton && !this.enabledConfigurationMenu) { this.disableButton(this.configurationMenuButton); } this.cd.detectChanges(); } disableOTableOptionComponent(comp) { comp.enabled = false; const buttonEL = comp.elRef.nativeElement.querySelector('button'); const obs = PermissionsUtils.registerDisabledChangesInDom(buttonEL); this.mutationObservers.push(obs); } disableButton(buttonEL) { buttonEL.nativeElement.disabled = true; const obs = PermissionsUtils.registerDisabledChangesInDom(buttonEL.nativeElement); this.mutationObservers.push(obs); } ngOnDestroy() { if (this.mutationObservers) { this.mutationObservers.forEach((m) => { m.disconnect(); }); } } registerOptions(oTableOptions) { const items = this.permissions.items || []; const fixedOptions = ['select-all-checkbox', 'export', 'show-hide-columns', 'filter', 'configuration']; const userItems = items.filter((perm) => fixedOptions.indexOf(perm.attr) === -1); const self = this; userItems.forEach((perm) => { const option = oTableOptions.find((oTableOption) => oTableOption.oattr === perm.attr); self.setPermissionsToOTableOption(perm, option); }); } setPermissionsToOTableOption(perm, option) { if (perm.visible === false && option) { option.elRef.nativeElement.remove(); } else if (perm.enabled === false && option) { option.enabled = false; const buttonEL = option.elRef.nativeElement.querySelector('button'); const obs = PermissionsUtils.registerDisabledChangesInDom(buttonEL); this.mutationObservers.push(obs); } } getPermissionByAttr(attr) { const items = this.permissions.items || []; return items.find((perm) => perm.attr === attr); } get isSelectAllOptionActive() { return this.table.oTableOptions.selectColumn.visible; } get showSelectAllCheckbox() { if (!this.selectAllCheckbox) { return false; } const perm = this.getPermissionByAttr('select-all-checkbox'); return this.selectAllCheckbox && !(perm && perm.visible === false); } get rowHeightObservable() { return this.table.rowHeightObservable; } get enabledSelectAllCheckbox() { const perm = this.getPermissionByAttr('select-all-checkbox'); return !(perm && perm.enabled === false); } get showExportButton() { if (!this.exportButton) { return false; } const perm = this.getPermissionByAttr('export'); return !(perm && perm.visible === false); } get enabledExportButton() { const perm = this.getPermissionByAttr('export'); return !(perm && perm.enabled === false); } get showColumnsVisibilityButton() { if (!this.columnsVisibilityButton) { return false; } const perm = this.getPermissionByAttr('show-hide-columns'); return !(perm && perm.visible === false); } get showReportOnDemandButton() { if (!this.showReportOnDemandOption) { return false; } const perm = this.getPermissionByAttr('show-report-on-demand'); return !(perm && perm.visible === false); } get enabledColumnsVisibilityButton() { const perm = this.getPermissionByAttr('show-hide-columns'); return !(perm && perm.enabled === false); } get showFilterMenu() { const perm = this.getPermissionByAttr('filter'); return this.showFilterOption && !(perm && perm.visible === false); } get enabledFilterMenu() { const perm = this.getPermissionByAttr('filter'); return !(perm && perm.enabled === false); } get showConfigurationMenu() { const perm = this.getPermissionByAttr('configuration'); return this.showConfigurationOption && !(perm && perm.visible === false); } get enabledConfigurationMenu() { const perm = this.getPermissionByAttr('configuration'); return !(perm && perm.enabled === false); } get showGroupByButton() { return this.showGroupByOption; } get showChartsOnDemandButton() { if (!this.showChartsOnDemandOption) { return false; } const perm = this.getPermissionByAttr('show-chart-on-demand'); return !(perm && perm.visible === false); } get showFirstDivider() { return (this.showAnyOptionFirstSection && this.showAnyOptionSecondSection) || (this.showAnyOptionFirstSection && !this.showAnyOptionSecondSection && this.showAnyOptionThirdSection); } get showSecondDivider() { return this.showAnyOptionSecondSection && this.showAnyOptionThirdSection; } get showAnyOptionThirdSection() { return this.showGroupByButton || this.showFilterMenu || this.showConfigurationMenu; } get showAnyOptionFirstSection() { return this.showSelectAllCheckbox || this.showColumnsVisibilityButton || this.showResetWidthOption; } get showAnyOptionSecondSection() { return this.showExportButton || this.showReportOnDemandButton || this.showChartsOnDemandButton; } onShowsSelects() { const tableOptions = this.table.oTableOptions; tableOptions.selectColumn.visible = !tableOptions.selectColumn.visible; this.table.initializeCheckboxColumn(); } onExportButtonClicked() { this.exportDataProvider.initializeProvider(this.table); this.dialog.open(OTableExportDialogComponent, { data: { visibleButtons: this.table.visibleExportDialogButtons, columns: this.parseColumnsVisible(), service: this.table.service, serviceType: this.table.exportServiceType, options: this.table.exportOptsTemplate }, maxWidth: '65vw', minWidth: '25vw', disableClose: true, panelClass: ['o-dialog-class', 'o-table-dialog'] }); } parseColumnsVisible() { const columnsArray = Util.parseArray(this.table.columns); return this.table.oTableOptions.columns.filter(oCol => oCol.type !== "image" && oCol.type !== "action" && oCol.visible && columnsArray.findIndex(column => column === oCol.attr) > -1).map((x) => { return x.attr; }); } onChangeColumnsVisibilityClicked() { const dialogRef = this.dialog.open(OTableVisibleColumnsDialogComponent, { data: { table: this.table }, maxWidth: '35vw', disableClose: true, panelClass: ['o-dialog-class', 'o-table-dialog'] }); dialogRef.afterClosed().subscribe(result => { if (Util.isDefined(result)) { this.table.visibleColArray = result.visibleColArray; const columnsOrder = result.columnsOrder; this.table.oTableOptions.columns.sort((a, b) => columnsOrder.indexOf(a.attr) - columnsOrder.indexOf(b.attr)); if (Util.isDefined(result.sortColumns)) { this.table.reinitializeSortColumns(result.sortColumns); } if (Util.isDefined(result.groupColumns)) { this.table.setGroupColumns(result.groupColumns); } if (result.columnValueFiltersToRemove.length > 0) { this.table.clearColumnFilters(false, result.columnValueFiltersToRemove); } this.table.cd.detectChanges(); this.table.refreshColumnsWidthFromLocalStorage(); } }); } onGroupByClicked() { const dialogRef = this.dialog.open(OTableGroupByColumnsDialogComponent, { data: { groupedColumns: this.table.groupedColumnsArray, columnsData: this.table.oTableOptions.columns, rowHeight: this.table.rowHeight, groupedColumnTypes: this.table.groupedColumnTypes }, height: '75vh', width: '50vw', disableClose: true, panelClass: ['o-dialog-class', 'o-table-dialog', 'o-table-group-by-column-dialog'] }); dialogRef.afterClosed().subscribe(result => { if (result) { this.table.setGroupedColumnTypes(dialogRef.componentInstance.getGroupedColumnTypes()); this.table.setGroupColumns(dialogRef.componentInstance.getGroupedColumns()); } }); } onFilterByColumnClicked() { if (this.table.isColumnFiltersActive && this.table.dataSource.isColumnValueFilterActive()) { this.dialogService.confirm('CONFIRM', 'MESSAGES.CONFIRM_DISCARD_FILTER_BY_COLUMN').then(res => { if (res) { this.table.clearColumnFilters(); } this.table.isColumnFiltersActive = !res; }); } else { this.table.isColumnFiltersActive = !this.table.isColumnFiltersActive; } } onStoreFilterClicked() { const dialogRef = this.dialog.open(OStoreFilterDialogComponent, { data: this.table.state.storedFilters.map(filter => filter.name), width: 'calc((75em - 100%) * 1000)', maxWidth: '65vw', minWidth: '30vw', disableClose: true, panelClass: ['o-dialog-class', 'o-table-dialog'] }); dialogRef.afterClosed().subscribe(result => { if (result) { this.table.storeFilterInState(dialogRef.componentInstance.getFilterAttributes()); } }); } onLoadFilterClicked() { const dialogRef = this.dialog.open(OLoadFilterDialogComponent, { data: this.table.state.storedFilters, width: 'calc((75em - 100%) * 1000)', maxWidth: '65vw', minWidth: '30vw', disableClose: true, panelClass: ['o-dialog-class', 'o-table-dialog'] }); dialogRef.componentInstance.onDelete.subscribe(filterName => this.table.state.deleteStoredFilter(filterName)); dialogRef.afterClosed().subscribe(result => { if (result) { const selectedFilterName = dialogRef.componentInstance.getSelectedFilterName(); if (selectedFilterName) { this.table.state.applyFilter(selectedFilterName); this.table.setFiltersConfiguration(); this.table.reloadPaginatedDataFromStart(false); } } }); } onClearFilterClicked() { this.dialogService.confirm('CONFIRM', 'TABLE.DIALOG.CONFIRM_CLEAR_FILTER').then(result => { if (result) { this.table.clearFilters(); this.table.reloadPaginatedDataFromStart(false); } }); } onChartsOnDemandClicked() { if (this.chartOnDemandService) { this.chartOnDemandService.openChartOnDemand(this.table); } else { console.warn("You must have ontimize-web-ngx-charts installed in your app to use charts on demand."); } } onResetWidthClicked() { this.dialogService.confirm('CONFIRM', 'TABLE.DIALOG.CONFIRM_RESET_WIDTH').then(result => { if (result) { this.table.resetColumnsWidth(); } }); } onReportOnDemandClicked() { if (this.reportService) { this.reportService.openReportOnDemand(this.table); } else { console.warn("You must have ontimize-web-ngx-report-on-demand installed in your app to use report on demand."); } } onStoreConfigurationClicked() { const dialogRef = this.dialog.open(OTableStoreConfigurationDialogComponent, { width: 'calc((75em - 100%) * 1000)', maxWidth: '65vw', minWidth: '30vw', disableClose: true, panelClass: ['o-dialog-class', 'o-table-dialog'] }); dialogRef.afterClosed().subscribe(result => { if (result) { const configurationData = dialogRef.componentInstance.getConfigurationAttributes(); const tableProperties = dialogRef.componentInstance.getSelectedTableProperties(); this.table.componentStateService.storeConfiguration(configurationData, tableProperties); } }); } onApplyConfigurationClicked() { const dialogRef = this.dialog.open(OTableApplyConfigurationDialogComponent, { data: this.table.state.storedConfigurations, width: 'calc((75em - 100%) * 1000)', maxWidth: '65vw', minWidth: '30vw', disableClose: true, panelClass: ['o-dialog-class', 'o-table-dialog'] }); dialogRef.componentInstance.onDelete.subscribe(configurationName => this.table.state.deleteStoredConfiguration(configurationName)); dialogRef.afterClosed().subscribe(result => { if (result && dialogRef.componentInstance.isDefaultConfigurationSelected()) { this.table.state.reset(this.table.pageable); this.table.applyDefaultConfiguration(); } else if (result) { const selectedConfigurationName = dialogRef.componentInstance.getSelectedConfigurationName(); if (selectedConfigurationName) { this.table.state.applyConfiguration(selectedConfigurationName); this.table.applyConfiguration(selectedConfigurationName); } } }); } } OTableMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableMenuComponent, deps: [{ token: i0.Injector }, { token: i1.MatDialog }, { token: i0.ChangeDetectorRef }, { token: forwardRef(() => OTableBase) }, { token: O_CHART_ON_DEMAND_SERVICE, optional: true }, { token: O_REPORT_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); OTableMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTableMenuComponent, selector: "o-table-menu", inputs: { selectAllCheckbox: ["select-all-checkbox", "selectAllCheckbox"], exportButton: ["export-button", "exportButton"], columnsVisibilityButton: ["columns-visibility-button", "columnsVisibilityButton"], showConfigurationOption: ["show-configuration-option", "showConfigurationOption"], showFilterOption: ["show-filter-option", "showFilterOption"], showGroupByOption: ["show-group-by-option", "showGroupByOption"], showResetWidthOption: ["show-reset-width-option", "showResetWidthOption"], showReportOnDemandOption: ["show-report-on-demand-option", "showReportOnDemandOption"], showChartsOnDemandOption: ["show-charts-on-demand-option", "showChartsOnDemandOption"] }, host: { properties: { "class.o-table-menu": "true" } }, viewQueries: [{ propertyName: "matMenu", first: true, predicate: ["menu"], descendants: true, static: true }, { propertyName: "selectAllCheckboxOption", first: true, predicate: ["selectAllCheckboxOption"], descendants: true }, { propertyName: "exportButtonOption", first: true, predicate: ["exportButtonOption"], descendants: true }, { propertyName: "columnsVisibilityButtonOption", first: true, predicate: ["columnsVisibilityButtonOption"], descendants: true }, { propertyName: "filterMenuButton", first: true, predicate: ["filterMenuButton"], descendants: true, read: ElementRef }, { propertyName: "configurationMenuButton", first: true, predicate: ["configurationMenuButton"], descendants: true, read: ElementRef }, { propertyName: "filterMenu", first: true, predicate: ["filterMenu"], descendants: true }, { propertyName: "configurationMenu", first: true, predicate: ["configurationMenu"], descendants: true }, { propertyName: "columnFilterOption", first: true, predicate: ["columnFilterOption"], descendants: true }, { propertyName: "chartMenu", first: true, predicate: ["chartMenu"], descendants: true, static: true }], ngImport: i0, template: "<mat-menu #menu=\"matMenu\" x-position=\"before\" [class]=\"(rowHeightObservable | async) +' o-table-menu o-mat-menu'\">\n <!-- It is necessary to wrap the o-table button with <span mat-menu-item> so that the submenus collapse when losing focus -->\n <!-- DEFAULT OPTIONS -->\n <span mat-menu-item class=\"padding-0\" *ngIf=\"showSelectAllCheckbox\">\n <o-table-option #selectAllCheckboxOption [active]=\"isSelectAllOptionActive\" (onClick)=\"onShowsSelects()\" label=\"TABLE.BUTTONS.SELECT\"\n show-checkbox-option=\"true\"></o-table-option>\n </span>\n <span mat-menu-item class=\"padding-0\" *ngIf=\"showColumnsVisibilityButton\">\n <o-table-option #columnsVisibilityButtonOption (onClick)=\"onChangeColumnsVisibilityClicked()\" label=\"TABLE.BUTTONS.COLVIS\"></o-table-option>\n </span>\n <span mat-menu-item class=\"padding-0\" *ngIf=\"showResetWidthOption\">\n <o-table-option (onClick)=\"onResetWidthClicked()\" label=\"TABLE.BUTTONS.RESETWIDTH\"></o-table-option>\n </span>\n <mat-divider *ngIf=\"showFirstDivider\"></mat-divider>\n <span mat-menu-item class=\"padding-0\" *ngIf=\"showExportButton\">\n <o-table-option #exportButtonOption (onClick)=\"onExportButtonClicked()\" label=\"TABLE.BUTTONS.EXPORT\"></o-table-option>\n </span>\n <span mat-menu-item class=\"padding-0\" *ngIf=\"showReportOnDemandButton\">\n <o-table-option (onClick)=\"onReportOnDemandClicked()\" label=\"TABLE.BUTTONS.REPORT_ON_DEMAND\"></o-table-option>\n </span>\n <span mat-menu-item class=\"padding-0\" *ngIf=\"showChartsOnDemandButton\">\n <o-table-option (onClick)=\"onChartsOnDemandClicked()\" label=\"TABLE.BUTTONS.CHART_ON_DEMAND\"></o-table-option>\n </span>\n <mat-divider *ngIf=\"showSecondDivider\"></mat-divider>\n <span mat-menu-item class=\"padding-0\" *ngIf=\"showGroupByButton\">\n <o-table-option #columnsGroupByOption (onClick)=\"onGroupByClicked()\" label=\"TABLE.BUTTONS.GROUPBY\"></o-table-option>\n </span>\n <button type=\"button\" #filterMenuButton *ngIf=\"showFilterMenu\" mat-menu-item [matMenuTriggerFor]=\"filterMenu\">{{\n 'TABLE.BUTTONS.FILTER' | oTranslate }}</button>\n <button type=\"button\" #configurationMenuButton *ngIf=\"showConfigurationMenu\" mat-menu-item [matMenuTriggerFor]=\"configurationMenu\">{{\n 'TABLE.BUTTONS.CONFIGURATION' | oTranslate }}</button>\n <ng-content></ng-content>\n</mat-menu>\n\n<mat-menu #filterMenu=\"matMenu\" [class]=\"(rowHeightObservable| async) +' o-table-menu o-mat-menu'\">\n <span mat-menu-item class=\"padding-0\">\n <o-table-option #columnFilterOption show-checkbox-option=\"true\" [active]=\"isColumnFilterOptionActive\" (onClick)=\"onFilterByColumnClicked()\"\n label=\"TABLE.BUTTONS.FILTER_BY_COLUMN\">\n </o-table-option>\n </span>\n <button type=\"button\" mat-menu-item (click)=\"onStoreFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_SAVE' | oTranslate\n }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onLoadFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_LOAD' | oTranslate\n }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onClearFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_CLEAR' | oTranslate\n }}</button>\n</mat-menu>\n\n<mat-menu #configurationMenu=\"matMenu\" [class]=\"(rowHeightObservable | async) +' o-table-menu o-mat-menu'\">\n <button type=\"button\" mat-menu-item (click)=\"onStoreConfigurationClicked()\">{{ 'TABLE.BUTTONS.SAVE_CONFIGURATION' |\n oTranslate }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onApplyConfigurationClicked()\">{{ 'TABLE.BUTTONS.APPLY_CONFIGURATION' |\n oTranslate }}</button>\n</mat-menu>\n", styles: [".o-table-menu span.mat-mdc-menu-item.padding-0{padding-left:0;padding-right:0}.o-table-menu span.mat-mdc-menu-item.padding-0 .mdc-list-item__primary-text{width:100%}.o-table-menu .mat-divider{margin:0 8px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5.OTableOptionComponent, selector: "o-table-option", inputs: ["attr", "enabled", "icon", "show-checkbox-option", "label", "active"], outputs: ["onClick"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableMenuComponent.prototype, "selectAllCheckbox", void 0); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableMenuComponent.prototype, "exportButton", void 0); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableMenuComponent.prototype, "showConfigurationOption", void 0); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableMenuComponent.prototype, "showFilterOption", void 0); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableMenuComponent.prototype, "columnsVisibilityButton", void 0); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableMenuComponent.prototype, "showGroupByOption", void 0); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableMenuComponent.prototype, "showResetWidthOption", void 0); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableMenuComponent.prototype, "showReportOnDemandOption", void 0); __decorate([ BooleanInputConverter(), __metadata("design:type", Boolean) ], OTableMenuComponent.prototype, "showChartsOnDemandOption", void 0); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableMenuComponent, decorators: [{ type: Component, args: [{ selector: 'o-table-menu', inputs: DEFAULT_INPUTS_O_TABLE_MENU, outputs: DEFAULT_OUTPUTS_O_TABLE_MENU, encapsulation: ViewEncapsulation.None, host: { '[class.o-table-menu]': 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-menu #menu=\"matMenu\" x-position=\"before\" [class]=\"(rowHeightObservable | async) +' o-table-menu o-mat-menu'\">\n <!-- It is necessary to wrap the o-table button with <span mat-menu-item> so that the submenus collapse when losing focus -->\n <!-- DEFAULT OPTIONS -->\n <span mat-menu-item class=\"padding-0\" *ngIf=\"showSelectAllCheckbox\">\n <o-table-option #selectAllCheckboxOption [active]=\"isSelectAllOptionActive\" (onClick)=\"onShowsSelects()\" label=\"TABLE.BUTTONS.SELECT\"\n show-checkbox-option=\"true\"></o-table-option>\n </span>\n <span mat-menu-item class=\"padding-0\" *ngIf=\"showColumnsVisibilityButton\">\n <o-table-option #columnsVisibilityButtonOption (onClick)=\"onChangeColumnsVisibilityClicked()\" label=\"TABLE.BUTTONS.COLVIS\"></o-table-option>\n </span>\n <span mat-menu-item class=\"padding-0\" *ngIf=\"showResetWidthOption\">\n <o-table-option (onClick)=\"onResetWidthClicked()\" label=\"TABLE.BUTTONS.RESETWIDTH\"></o-table-option>\n </span>\n <mat-divider *ngIf=\"showFirstDivider\"></mat-divider>\n <span mat-menu-item class=\"padding-0\" *ngIf=\"showExportButton\">\n <o-table-option #exportButtonOption (onClick)=\"onExportButtonClicked()\" label=\"TABLE.BUTTONS.EXPORT\"></o-table-option>\n </span>\n <span mat-menu-item class=\"padding-0\" *ngIf=\"showReportOnDemandButton\">\n <o-table-option (onClick)=\"onReportOnDemandClicked()\" label=\"TABLE.BUTTONS.REPORT_ON_DEMAND\"></o-table-option>\n </span>\n <span mat-menu-item class=\"padding-0\" *ngIf=\"showChartsOnDemandButton\">\n <o-table-option (onClick)=\"onChartsOnDemandClicked()\" label=\"TABLE.BUTTONS.CHART_ON_DEMAND\"></o-table-option>\n </span>\n <mat-divider *ngIf=\"showSecondDivider\"></mat-divider>\n <span mat-menu-item class=\"padding-0\" *ngIf=\"showGroupByButton\">\n <o-table-option #columnsGroupByOption (onClick)=\"onGroupByClicked()\" label=\"TABLE.BUTTONS.GROUPBY\"></o-table-option>\n </span>\n <button type=\"button\" #filterMenuButton *ngIf=\"showFilterMenu\" mat-menu-item [matMenuTriggerFor]=\"filterMenu\">{{\n 'TABLE.BUTTONS.FILTER' | oTranslate }}</button>\n <button type=\"button\" #configurationMenuButton *ngIf=\"showConfigurationMenu\" mat-menu-item [matMenuTriggerFor]=\"configurationMenu\">{{\n 'TABLE.BUTTONS.CONFIGURATION' | oTranslate }}</button>\n <ng-content></ng-content>\n</mat-menu>\n\n<mat-menu #filterMenu=\"matMenu\" [class]=\"(rowHeightObservable| async) +' o-table-menu o-mat-menu'\">\n <span mat-menu-item class=\"padding-0\">\n <o-table-option #columnFilterOption show-checkbox-option=\"true\" [active]=\"isColumnFilterOptionActive\" (onClick)=\"onFilterByColumnClicked()\"\n label=\"TABLE.BUTTONS.FILTER_BY_COLUMN\">\n </o-table-option>\n </span>\n <button type=\"button\" mat-menu-item (click)=\"onStoreFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_SAVE' | oTranslate\n }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onLoadFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_LOAD' | oTranslate\n }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onClearFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_CLEAR' | oTranslate\n }}</button>\n</mat-menu>\n\n<mat-menu #configurationMenu=\"matMenu\" [class]=\"(rowHeightObservable | async) +' o-table-menu o-mat-menu'\">\n <button type=\"button\" mat-menu-item (click)=\"onStoreConfigurationClicked()\">{{ 'TABLE.BUTTONS.SAVE_CONFIGURATION' |\n oTranslate }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onApplyConfigurationClicked()\">{{ 'TABLE.BUTTONS.APPLY_CONFIGURATION' |\n oTranslate }}</button>\n</mat-menu>\n", styles: [".o-table-menu span.mat-mdc-menu-item.padding-0{padding-left:0;padding-right:0}.o-table-menu span.mat-mdc-menu-item.padding-0 .mdc-list-item__primary-text{width:100%}.o-table-menu .mat-divider{margin:0 8px}\n"] }] }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.MatDialog }, { type: i0.ChangeDetectorRef }, { type: i7.OTableBase, decorators: [{ type: Inject, args: [forwardRef(() => OTableBase)] }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [O_CHART_ON_DEMAND_SERVICE] }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [O_REPORT_SERVICE] }] }]; }, propDecorators: { selectAllCheckbox: [], exportButton: [], showConfigurationOption: [], showFilterOption: [], columnsVisibilityButton: [], showGroupByOption: [], showResetWidthOption: [], showReportOnDemandOption: [], showChartsOnDemandOption: [], matMenu: [{ type: ViewChild, args: ['menu', { static: true }] }], selectAllCheckboxOption: [{ type: ViewChild, args: ['selectAllCheckboxOption'] }], exportButtonOption: [{ type: ViewChild, args: ['exportButtonOption'] }], columnsVisibilityButtonOption: [{ type: ViewChild, args: ['columnsVisibilityButtonOption'] }], filterMenuButton: [{ type: ViewChild, args: ['filterMenuButton', { read: ElementRef }] }], configurationMenuButton: [{ type: ViewChild, args: ['configurationMenuButton', { read: ElementRef }] }], filterMenu: [{ type: ViewChild, args: ['filterMenu'] }], configurationMenu: [{ type: ViewChild, args: ['configurationMenu'] }], columnFilterOption: [{ type: ViewChild, args: ['columnFilterOption'] }], chartMenu: [{ type: ViewChild, args: ['chartMenu', { static: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLW1lbnUvby10YWJsZS1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLW1lbnUvby10YWJsZS1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFHUixRQUFRLEVBQ1IsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBSWxGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUNsSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDMUYsT0FBTyxFQUFFLDBCQUEw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