ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
95 lines • 15.2 kB
JavaScript
import { ChangeDetectionStrategy, Component, EventEmitter, Injector, TemplateRef, ViewChild } from '@angular/core';
import { Codes } from '../../../../../util/codes';
import { Util } from '../../../../../util/util';
import { OBaseTableCellRenderer } from '../o-base-table-cell-renderer.class';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@angular/material/icon";
import * as i3 from "../../../../../pipes/o-translate.pipe";
export const DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_ACTION = [
'icon',
'svgIcon:svg-icon',
'action',
'text',
'iconPosition: icon-position'
];
export const DEFAULT_OUTPUTS_O_TABLE_CELL_RENDERER_ACTION = [
'onClick'
];
export class OTableCellRendererActionComponent extends OBaseTableCellRenderer {
constructor(injector) {
super(injector);
this.injector = injector;
this.onClick = new EventEmitter();
this.tableColumn.type = 'action';
this.tableColumn.orderable = false;
this.tableColumn.searchable = false;
this.tableColumn.groupable = false;
}
initialize() {
super.initialize();
if (this.table) {
const oCol = this.table.getOColumn(this.tableColumn.attr);
oCol.title = Util.isDefined(this.tableColumn.title) ? this.tableColumn.title : undefined;
}
this.iconPosition = Util.parseIconPosition(this.iconPosition);
}
getCellData(value) {
return value;
}
innerOnClick(event, rowData) {
if (event) {
event.stopPropagation();
event.preventDefault();
}
if (this.table.readOnly) {
if (this.table.showNotificationOfReadOnly) {
this.table.getSnackService().open('MESSAGES.OPERATION_NOT_ALLOWED_READONLY');
}
return;
}
if (Util.isDefined(this.action)) {
switch (this.action.toLowerCase()) {
case 'detail':
this.table.viewDetail(rowData);
break;
case 'edit':
this.table.editDetail(rowData);
break;
default:
break;
}
}
else {
this.onClick.emit(rowData);
}
}
get icon() {
return this._icon;
}
set icon(arg) {
this._icon = arg;
}
isIconPositionLeft() {
return Util.isDefined(this.icon) && this.iconPosition === Codes.ICON_POSITION_LEFT;
}
isIconPositionRight() {
return Util.isDefined(this.icon) && this.iconPosition === Codes.ICON_POSITION_RIGHT;
}
isSvgIconPositionRight() {
return Util.isDefined(this.svgIcon) && this.iconPosition === Codes.ICON_POSITION_RIGHT;
}
isSvgIconPositionLeft() {
return Util.isDefined(this.svgIcon) && this.iconPosition === Codes.ICON_POSITION_LEFT;
}
}
OTableCellRendererActionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableCellRendererActionComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
OTableCellRendererActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTableCellRendererActionComponent, selector: "o-table-cell-renderer-action", inputs: { icon: "icon", svgIcon: ["svg-icon", "svgIcon"], action: "action", text: "text", iconPosition: ["icon-position", "iconPosition"] }, outputs: { onClick: "onClick" }, viewQueries: [{ propertyName: "templateref", first: true, predicate: ["templateref"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #templateref let-cellvalue=\"cellvalue\" let-rowvalue=\"rowvalue\">\n <span class=\"o-action-cell-renderer\" (click)=\"innerOnClick($event, rowvalue)\">\n <mat-icon *ngIf=\"isIconPositionLeft()\">{{ icon }}</mat-icon>\n <mat-icon *ngIf=\"isSvgIconPositionLeft()\" [svgIcon]=\"svgIcon\"></mat-icon>\n <span *ngIf=\"text !== undefined\">{{ text | oTranslate }}</span>\n <mat-icon *ngIf=\"isIconPositionRight()\">{{ icon }}</mat-icon>\n <mat-icon *ngIf=\"isSvgIconPositionRight()\" [svgIcon]=\"svgIcon\"></mat-icon>\n </span>\n</ng-template>", styles: [":host .mat-icon{margin:0 4px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i3.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableCellRendererActionComponent, decorators: [{
type: Component,
args: [{ selector: 'o-table-cell-renderer-action', changeDetection: ChangeDetectionStrategy.OnPush, inputs: DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_ACTION, outputs: DEFAULT_OUTPUTS_O_TABLE_CELL_RENDERER_ACTION, template: "<ng-template #templateref let-cellvalue=\"cellvalue\" let-rowvalue=\"rowvalue\">\n <span class=\"o-action-cell-renderer\" (click)=\"innerOnClick($event, rowvalue)\">\n <mat-icon *ngIf=\"isIconPositionLeft()\">{{ icon }}</mat-icon>\n <mat-icon *ngIf=\"isSvgIconPositionLeft()\" [svgIcon]=\"svgIcon\"></mat-icon>\n <span *ngIf=\"text !== undefined\">{{ text | oTranslate }}</span>\n <mat-icon *ngIf=\"isIconPositionRight()\">{{ icon }}</mat-icon>\n <mat-icon *ngIf=\"isSvgIconPositionRight()\" [svgIcon]=\"svgIcon\"></mat-icon>\n </span>\n</ng-template>", styles: [":host .mat-icon{margin:0 4px}\n"] }]
}], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { templateref: [{
type: ViewChild,
args: ['templateref', { read: TemplateRef, static: true }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1jZWxsLXJlbmRlcmVyLWFjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9jb2x1bW4vY2VsbC1yZW5kZXJlci9hY3Rpb24vby10YWJsZS1jZWxsLXJlbmRlcmVyLWFjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9jb2x1bW4vY2VsbC1yZW5kZXJlci9hY3Rpb24vby10YWJsZS1jZWxsLXJlbmRlcmVyLWFjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQVUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7OztBQUU3RSxNQUFNLENBQUMsTUFBTSwyQ0FBMkMsR0FBRztJQUN6RCxNQUFNO0lBQ04sa0JBQWtCO0lBQ2xCLFFBQVE7SUFDUixNQUFNO0lBQ04sNkJBQTZCO0NBQzlCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw0Q0FBNEMsR0FBRztJQUMxRCxTQUFTO0NBQ1YsQ0FBQztBQVVGLE1BQU0sT0FBTyxpQ0FBa0MsU0FBUSxzQkFBc0I7SUFXM0UsWUFBc0IsUUFBa0I7UUFDdEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBREksYUFBUSxHQUFSLFFBQVEsQ0FBVTtR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ekYsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDLGtCQUFrQixDQUFDO0lBQ3hGLENBQUM7OytIQWpGVSxpQ0FBaUM7bUhBQWpDLGlDQUFpQyx5VUFTVixXQUFXLGtFQ25DL0MsMGpCQVFjOzRGRGtCRCxpQ0FBaUM7a0JBUjdDLFNBQVM7K0JBQ0UsOEJBQThCLG1CQUd2Qix1QkFBdUIsQ0FBQyxNQUFNLFVBQ3ZDLDJDQUEyQyxXQUMxQyw0Q0FBNEM7K0ZBV2lCLFdBQVc7c0JBQWhGLFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9CYXNlVGFibGVDZWxsUmVuZGVyZXIgfSBmcm9tICcuLi9vLWJhc2UtdGFibGUtY2VsbC1yZW5kZXJlci5jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX1RBQkxFX0NFTExfUkVOREVSRVJfQUNUSU9OID0gW1xuICAnaWNvbicsXG4gICdzdmdJY29uOnN2Zy1pY29uJyxcbiAgJ2FjdGlvbicsXG4gICd0ZXh0JyxcbiAgJ2ljb25Qb3NpdGlvbjogaWNvbi1wb3NpdGlvbidcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19UQUJMRV9DRUxMX1JFTkRFUkVSX0FDVElPTiA9IFtcbiAgJ29uQ2xpY2snXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRhYmxlLWNlbGwtcmVuZGVyZXItYWN0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tdGFibGUtY2VsbC1yZW5kZXJlci1hY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLXRhYmxlLWNlbGwtcmVuZGVyZXItYWN0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fVEFCTEVfQ0VMTF9SRU5ERVJFUl9BQ1RJT04sXG4gIG91dHB1dHM6IERFRkFVTFRfT1VUUFVUU19PX1RBQkxFX0NFTExfUkVOREVSRVJfQUNUSU9OXG59KVxuZXhwb3J0IGNsYXNzIE9UYWJsZUNlbGxSZW5kZXJlckFjdGlvbkNvbXBvbmVudCBleHRlbmRzIE9CYXNlVGFibGVDZWxsUmVuZGVyZXIgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIG9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIGFjdGlvbjogc3RyaW5nO1xuICBfaWNvbjogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGljb25Qb3NpdGlvbjogc3RyaW5nO1xuICBwdWJsaWMgc3ZnSWNvbjogc3RyaW5nO1xuXG4gIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlcmVmJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyB0ZW1wbGF0ZXJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIHRoaXMudGFibGVDb2x1bW4udHlwZSA9ICdhY3Rpb24nO1xuICAgIHRoaXMudGFibGVDb2x1bW4ub3JkZXJhYmxlID0gZmFsc2U7XG4gICAgdGhpcy50YWJsZUNvbHVtbi5zZWFyY2hhYmxlID0gZmFsc2U7XG4gICAgdGhpcy50YWJsZUNvbHVtbi5ncm91cGFibGUgPSBmYWxzZTtcbiAgfVxuXG4gIGluaXRpYWxpemUoKSB7XG4gICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgIGlmICh0aGlzLnRhYmxlKSB7XG4gICAgICBjb25zdCBvQ29sID0gdGhpcy50YWJsZS5nZXRPQ29sdW1uKHRoaXMudGFibGVDb2x1bW4uYXR0cik7XG4gICAgICBvQ29sLnRpdGxlID0gVXRpbC5pc0RlZmluZWQodGhpcy50YWJsZUNvbHVtbi50aXRsZSkgPyB0aGlzLnRhYmxlQ29sdW1uLnRpdGxlIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmljb25Qb3NpdGlvbiA9IFV0aWwucGFyc2VJY29uUG9zaXRpb24odGhpcy5pY29uUG9zaXRpb24pO1xuICB9XG5cbiAgZ2V0Q2VsbERhdGEodmFsdWU6IGFueSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGlubmVyT25DbGljayhldmVudCwgcm93RGF0YSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YWJsZS5yZWFkT25seSkge1xuICAgICAgaWYgKHRoaXMudGFibGUuc2hvd05vdGlmaWNhdGlvbk9mUmVhZE9ubHkpIHtcbiAgICAgICAgdGhpcy50YWJsZS5nZXRTbmFja1NlcnZpY2UoKS5vcGVuKCdNRVNTQUdFUy5PUEVSQVRJT05fTk9UX0FMTE9XRURfUkVBRE9OTFknKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuYWN0aW9uKSkge1xuICAgICAgc3dpdGNoICh0aGlzLmFjdGlvbi50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgJ2RldGFpbCc6XG4gICAgICAgICAgdGhpcy50YWJsZS52aWV3RGV0YWlsKHJvd0RhdGEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlZGl0JzpcbiAgICAgICAgICB0aGlzLnRhYmxlLmVkaXREZXRhaWwocm93RGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25DbGljay5lbWl0KHJvd0RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpY29uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ljb247XG4gIH1cblxuICBzZXQgaWNvbihhcmc6IHN0cmluZykge1xuICAgIHRoaXMuX2ljb24gPSBhcmc7XG4gIH1cblxuICBpc0ljb25Qb3NpdGlvbkxlZnQoKSB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMuaWNvbikgJiYgdGhpcy5pY29uUG9zaXRpb24gPT09IENvZGVzLklDT05fUE9TSVRJT05fTEVGVDtcbiAgfVxuXG4gIGlzSWNvblBvc2l0aW9uUmlnaHQoKSB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMuaWNvbikgJiYgdGhpcy5pY29uUG9zaXRpb24gPT09IENvZGVzLklDT05fUE9TSVRJT05fUklHSFQ7XG4gIH1cblxuICBpc1N2Z0ljb25Qb3NpdGlvblJpZ2h0KCkge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZCh0aGlzLnN2Z0ljb24pICYmIHRoaXMuaWNvblBvc2l0aW9uID09PSBDb2Rlcy5JQ09OX1BPU0lUSU9OX1JJR0hUO1xuICB9XG5cbiAgaXNTdmdJY29uUG9zaXRpb25MZWZ0KCkge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZCh0aGlzLnN2Z0ljb24pICYmIHRoaXMuaWNvblBvc2l0aW9uID09PSBDb2Rlcy5JQ09OX1BPU0lUSU9OX0xFRlQ7XG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVyZWYgbGV0LWNlbGx2YWx1ZT1cImNlbGx2YWx1ZVwiIGxldC1yb3d2YWx1ZT1cInJvd3ZhbHVlXCI+XG4gIDxzcGFuIGNsYXNzPVwiby1hY3Rpb24tY2VsbC1yZW5kZXJlclwiIChjbGljayk9XCJpbm5lck9uQ2xpY2soJGV2ZW50LCByb3d2YWx1ZSlcIj5cbiAgICA8bWF0LWljb24gKm5nSWY9XCJpc0ljb25Qb3NpdGlvbkxlZnQoKVwiPnt7IGljb24gfX08L21hdC1pY29uPlxuICAgIDxtYXQtaWNvbiAqbmdJZj1cImlzU3ZnSWNvblBvc2l0aW9uTGVmdCgpXCIgW3N2Z0ljb25dPVwic3ZnSWNvblwiPjwvbWF0LWljb24+XG4gICAgPHNwYW4gKm5nSWY9XCJ0ZXh0ICE9PSB1bmRlZmluZWRcIj57eyB0ZXh0IHwgb1RyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8bWF0LWljb24gKm5nSWY9XCJpc0ljb25Qb3NpdGlvblJpZ2h0KClcIj57eyBpY29uIH19PC9tYXQtaWNvbj5cbiAgICA8bWF0LWljb24gKm5nSWY9XCJpc1N2Z0ljb25Qb3NpdGlvblJpZ2h0KClcIiBbc3ZnSWNvbl09XCJzdmdJY29uXCI+PC9tYXQtaWNvbj5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT4iXX0=