UNPKG

ontimize-web-ngx

Version:
113 lines 17.5 kB
import { ChangeDetectionStrategy, Component, Injector, TemplateRef, ViewChild } from '@angular/core'; import { OTranslateService } from '../../../../../services/translate/o-translate.service'; import { Util } from '../../../../../util/util'; import { OComboCustomRenderer } from '../o-combo-renderer.class'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "../../../../../pipes/o-translate.pipe"; export const DEFAULT_INPUTS_O_COMBO_RENDERER_BOOLEAN = [ 'trueValue: true-value', 'falseValue: false-value', 'booleanType: boolean-type', 'renderTrueValue: render-true-value', 'renderFalseValue: render-false-value', 'renderType: render-type' ]; export class OComboRendererBooleanComponent extends OComboCustomRenderer { constructor(injector) { super(injector); this.injector = injector; this._renderType = 'string'; this._booleanType = 'boolean'; this.translateService = this.injector.get(OTranslateService); } initialize() { super.initialize(); this.parseInputs(); } parseInputs() { switch (this.booleanType) { case 'string': this.parseStringInputs(); break; case 'number': this.parseNumberInputs(); break; default: this.trueValue = true; this.falseValue = false; break; } } parseStringInputs() { if ((this.trueValue || '').length === 0) { this.trueValue = undefined; } if ((this.falseValue || '').length === 0) { this.falseValue = undefined; } } parseNumberInputs() { this.trueValue = parseInt(this.trueValue, 10); if (isNaN(this.trueValue)) { this.trueValue = 1; } this.falseValue = parseInt(this.falseValue, 10); if (isNaN(this.falseValue)) { this.falseValue = 0; } } hasComboTrueValue(record) { let result; if (Util.isDefined(record) && Util.isDefined(record[this.comboComponent.valueColumn])) { const value = record[this.comboComponent.valueColumn]; result = (value === this.trueValue); if (this.booleanType === 'string' && !Util.isDefined(this.trueValue)) { result = Util.parseBoolean(value, false); } } return result; } get booleanType() { return this._booleanType; } set booleanType(arg) { arg = (arg || '').toLowerCase(); if (['number', 'boolean', 'string'].indexOf(arg) === -1) { arg = 'boolean'; } this._booleanType = arg; } get renderType() { return this._renderType; } set renderType(arg) { arg = (arg || '').toLowerCase(); if (['string', 'number'].indexOf(arg) === -1) { arg = 'string'; } this._renderType = arg; } get renderTrueValue() { return this._renderTrueValue || this.trueValue; } set renderTrueValue(arg) { this._renderTrueValue = arg; } get renderFalseValue() { return this._renderFalseValue || this.falseValue; } set renderFalseValue(arg) { this._renderFalseValue = arg; } } OComboRendererBooleanComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OComboRendererBooleanComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); OComboRendererBooleanComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OComboRendererBooleanComponent, selector: "o-combo-renderer-boolean", inputs: { trueValue: ["true-value", "trueValue"], falseValue: ["false-value", "falseValue"], booleanType: ["boolean-type", "booleanType"], renderTrueValue: ["render-true-value", "renderTrueValue"], renderFalseValue: ["render-false-value", "renderFalseValue"], renderType: ["render-type", "renderType"] }, viewQueries: [{ propertyName: "templateref", first: true, predicate: ["templateref"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #templateref let-value=\"value\">\n <ng-container *ngIf=\"hasComboTrueValue(value);else falseValue\">\n <ng-container [ngSwitch]=\"renderType\">\n <ng-container *ngSwitchCase=\"'number'\">{{ renderTrueValue }}</ng-container>\n <span *ngSwitchDefault>{{ renderTrueValue | oTranslate }}</span>\n </ng-container>\n </ng-container>\n <ng-template #falseValue>\n <ng-container [ngSwitch]=\"renderType\">\n <ng-container *ngSwitchCase=\"'number'\">{{ renderFalseValue }}</ng-container>\n <ng-container *ngSwitchDefault>{{ renderFalseValue | oTranslate}}</ng-container>\n </ng-container>\n </ng-template>\n</ng-template>", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i2.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OComboRendererBooleanComponent, decorators: [{ type: Component, args: [{ selector: 'o-combo-renderer-boolean', changeDetection: ChangeDetectionStrategy.OnPush, inputs: DEFAULT_INPUTS_O_COMBO_RENDERER_BOOLEAN, template: "<ng-template #templateref let-value=\"value\">\n <ng-container *ngIf=\"hasComboTrueValue(value);else falseValue\">\n <ng-container [ngSwitch]=\"renderType\">\n <ng-container *ngSwitchCase=\"'number'\">{{ renderTrueValue }}</ng-container>\n <span *ngSwitchDefault>{{ renderTrueValue | oTranslate }}</span>\n </ng-container>\n </ng-container>\n <ng-template #falseValue>\n <ng-container [ngSwitch]=\"renderType\">\n <ng-container *ngSwitchCase=\"'number'\">{{ renderFalseValue }}</ng-container>\n <ng-container *ngSwitchDefault>{{ renderFalseValue | oTranslate}}</ng-container>\n </ng-container>\n </ng-template>\n</ng-template>" }] }], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { templateref: [{ type: ViewChild, args: ['templateref', { read: TemplateRef, static: true }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1jb21iby1yZW5kZXJlci1ib29sZWFuLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0L2NvbWJvL2NvbWJvLXJlbmRlcmVyL2Jvb2xlYW4vby1jb21iby1yZW5kZXJlci1ib29sZWFuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2lucHV0L2NvbWJvL2NvbWJvLXJlbmRlcmVyL2Jvb2xlYW4vby1jb21iby1yZW5kZXJlci1ib29sZWFuLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFVLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDMUYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBRWpFLE1BQU0sQ0FBQyxNQUFNLHVDQUF1QyxHQUFHO0lBRXJELHVCQUF1QjtJQUV2Qix5QkFBeUI7SUFFekIsMkJBQTJCO0lBRTNCLG9DQUFvQztJQUNwQyxzQ0FBc0M7SUFFdEMseUJBQXlCO0NBQzFCLENBQUM7QUFRRixNQUFNLE9BQU8sOEJBQStCLFNBQVEsb0JBQW9CO0lBY3RFLFlBQXNCLFFBQWtCO1FBQ3RDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQURJLGFBQVEsR0FBUixRQUFRLENBQVU7UUFQOUIsZ0JBQVcsR0FBVyxRQUFRLENBQUM7UUFDL0IsaUJBQVksR0FBVyxTQUFTLENB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IEluamVjdG9yLCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgT1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUvby10cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Db21ib0N1c3RvbVJlbmRlcmVyIH0gZnJvbSAnLi4vby1jb21iby1yZW5kZXJlci5jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0NPTUJPX1JFTkRFUkVSX0JPT0xFQU4gPSBbXG4gIC8vIHRydWUtdmFsdWUgW3N0cmluZ106IHRydWUgdmFsdWUuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAndHJ1ZVZhbHVlOiB0cnVlLXZhbHVlJyxcbiAgLy8gZmFsc2UtdmFsdWUgW3N0cmluZ106IGZhbHNlIHZhbHVlLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ2ZhbHNlVmFsdWU6IGZhbHNlLXZhbHVlJyxcbiAgLy8gZmFsc2UtdmFsdWUgW251bWJlcnxzdHJpbmddOiBjb21ibyB2YWx1ZSB0eXBlLiBEZWZhdWx0OiBzdHJpbmdcbiAgJ2Jvb2xlYW5UeXBlOiBib29sZWFuLXR5cGUnLFxuXG4gICdyZW5kZXJUcnVlVmFsdWU6IHJlbmRlci10cnVlLXZhbHVlJyxcbiAgJ3JlbmRlckZhbHNlVmFsdWU6IHJlbmRlci1mYWxzZS12YWx1ZScsXG4gIC8vIFtzdHJpbmd8bnVtYmVyXVxuICAncmVuZGVyVHlwZTogcmVuZGVyLXR5cGUnXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLWNvbWJvLXJlbmRlcmVyLWJvb2xlYW4nLFxuICB0ZW1wbGF0ZVVybDogJy4vby1jb21iby1yZW5kZXJlci1ib29sZWFuLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19DT01CT19SRU5ERVJFUl9CT09MRUFOXG59KVxuZXhwb3J0IGNsYXNzIE9Db21ib1JlbmRlcmVyQm9vbGVhbkNvbXBvbmVudCBleHRlbmRzIE9Db21ib0N1c3RvbVJlbmRlcmVyIGltcGxlbWVudHMgT25Jbml0IHtcblxuICB0cnVlVmFsdWU6IGFueTtcbiAgZmFsc2VWYWx1ZTogYW55O1xuICBwcm90ZWN0ZWQgX3JlbmRlclRydWVWYWx1ZTogYW55O1xuICBwcm90ZWN0ZWQgX3JlbmRlckZhbHNlVmFsdWU6IGFueTtcblxuICBwcm90ZWN0ZWQgX3JlbmRlclR5cGU6IHN0cmluZyA9ICdzdHJpbmcnO1xuICBwcm90ZWN0ZWQgX2Jvb2xlYW5UeXBlOiBzdHJpbmcgPSAnYm9vbGVhbic7XG4gIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBPVHJhbnNsYXRlU2VydmljZTtcblxuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZXJlZicsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICB0ZW1wbGF0ZXJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UcmFuc2xhdGVTZXJ2aWNlKTtcbiAgfVxuXG4gIGluaXRpYWxpemUoKSB7XG4gICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgIHRoaXMucGFyc2VJbnB1dHMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUlucHV0cygpIHtcbiAgICBzd2l0Y2ggKHRoaXMuYm9vbGVhblR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHRoaXMucGFyc2VTdHJpbmdJbnB1dHMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICB0aGlzLnBhcnNlTnVtYmVySW5wdXRzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy50cnVlVmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLmZhbHNlVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlU3RyaW5nSW5wdXRzKCkge1xuICAgIGlmICgodGhpcy50cnVlVmFsdWUgfHwgJycpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy50cnVlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICgodGhpcy5mYWxzZVZhbHVlIHx8ICcnKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZmFsc2VWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VOdW1iZXJJbnB1dHMoKSB7XG4gICAgdGhpcy50cnVlVmFsdWUgPSBwYXJzZUludCh0aGlzLnRydWVWYWx1ZSwgMTApO1xuICAgIGlmIChpc05hTih0aGlzLnRydWVWYWx1ZSkpIHtcbiAgICAgIHRoaXMudHJ1ZVZhbHVlID0gMTtcbiAgICB9XG4gICAgdGhpcy5mYWxzZVZhbHVlID0gcGFyc2VJbnQodGhpcy5mYWxzZVZhbHVlLCAxMCk7XG4gICAgaWYgKGlzTmFOKHRoaXMuZmFsc2VWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZmFsc2VWYWx1ZSA9IDA7XG4gICAgfVxuICB9XG5cbiAgaGFzQ29tYm9UcnVlVmFsdWUocmVjb3JkOiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChyZWNvcmQpICYmIFV0aWwuaXNEZWZpbmVkKHJlY29yZFt0aGlzLmNvbWJvQ29tcG9uZW50LnZhbHVlQ29sdW1uXSkpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcmVjb3JkW3RoaXMuY29tYm9Db21wb25lbnQudmFsdWVDb2x1bW5dO1xuICAgICAgcmVzdWx0ID0gKHZhbHVlID09PSB0aGlzLnRydWVWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5ib29sZWFuVHlwZSA9PT0gJ3N0cmluZycgJiYgIVV0aWwuaXNEZWZpbmVkKHRoaXMudHJ1ZVZhbHVlKSkge1xuICAgICAgICByZXN1bHQgPSBVdGlsLnBhcnNlQm9vbGVhbih2YWx1ZSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0IGJvb2xlYW5UeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jvb2xlYW5UeXBlO1xuICB9XG5cbiAgc2V0IGJvb2xlYW5UeXBlKGFyZzogc3RyaW5nKSB7XG4gICAgYXJnID0gKGFyZyB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoWydudW1iZXInLCAnYm9vbGVhbicsICdzdHJpbmcnXS5pbmRleE9mKGFyZykgPT09IC0xKSB7XG4gICAgICBhcmcgPSAnYm9vbGVhbic7XG4gICAgfVxuICAgIHRoaXMuX2Jvb2xlYW5UeXBlID0gYXJnO1xuICB9XG5cbiAgZ2V0IHJlbmRlclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcmVuZGVyVHlwZTtcbiAgfVxuXG4gIHNldCByZW5kZXJUeXBlKGFyZzogc3RyaW5nKSB7XG4gICAgYXJnID0gKGFyZyB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJ10uaW5kZXhPZihhcmcpID09PSAtMSkge1xuICAgICAgYXJnID0gJ3N0cmluZyc7XG4gICAgfVxuICAgIHRoaXMuX3JlbmRlclR5cGUgPSBhcmc7XG4gIH1cblxuICBnZXQgcmVuZGVyVHJ1ZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlclRydWVWYWx1ZSB8fCB0aGlzLnRydWVWYWx1ZTtcbiAgfVxuXG4gIHNldCByZW5kZXJUcnVlVmFsdWUoYXJnOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yZW5kZXJUcnVlVmFsdWUgPSBhcmc7XG4gIH1cblxuICBnZXQgcmVuZGVyRmFsc2VWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9yZW5kZXJGYWxzZVZhbHVlIHx8IHRoaXMuZmFsc2VWYWx1ZTtcbiAgfVxuXG4gIHNldCByZW5kZXJGYWxzZVZhbHVlKGFyZzogc3RyaW5nKSB7XG4gICAgdGhpcy5fcmVuZGVyRmFsc2VWYWx1ZSA9IGFyZztcbiAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZXJlZiBsZXQtdmFsdWU9XCJ2YWx1ZVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzQ29tYm9UcnVlVmFsdWUodmFsdWUpO2Vsc2UgZmFsc2VWYWx1ZVwiPlxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInJlbmRlclR5cGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+e3sgcmVuZGVyVHJ1ZVZhbHVlIH19PC9uZy1jb250YWluZXI+XG4gICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0Pnt7IHJlbmRlclRydWVWYWx1ZSB8IG9UcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI2ZhbHNlVmFsdWU+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwicmVuZGVyVHlwZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj57eyByZW5kZXJGYWxzZVZhbHVlIH19PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+e3sgcmVuZGVyRmFsc2VWYWx1ZSB8IG9UcmFuc2xhdGV9fTwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT4iXX0=