@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
56 lines • 7.31 kB
JavaScript
import { Directive, EventEmitter, Output } from '@angular/core';
import { NgControl } from '@angular/forms';
import { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';
import { gettext } from '../i18n/index';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
export class JsonValidationPrettifierDirective {
constructor(ngCtrl) {
this.invalidJSON = new EventEmitter();
this.message = gettext('Must be a valid JSON object.');
this.debounceTimeInMs = 1000;
this.abstractCtrl = ngCtrl.control;
}
ngOnInit() {
this.subscription = this.abstractCtrl.valueChanges
.pipe(tap(() => this.clearValidationMessage()), debounceTime(this.debounceTimeInMs), distinctUntilChanged())
.subscribe(value => {
this.validateInputAndPrettify(value);
});
}
ngOnDestroy() {
if (this.subscription && !this.subscription.closed) {
this.subscription.unsubscribe();
}
}
validateInputAndPrettify(value) {
if (value) {
try {
const validJsonObject = JSON.parse(value);
const pretty = JSON.stringify(validJsonObject, undefined, 2);
this.abstractCtrl.setValue(pretty);
}
catch (ex) {
this.setErrorAndValidationMessage();
}
}
}
setErrorAndValidationMessage() {
this.abstractCtrl.setErrors({ invalidBodyTemplate: true });
this.invalidJSON.emit(this.message);
}
clearValidationMessage() {
this.invalidJSON.emit(undefined);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: JsonValidationPrettifierDirective, deps: [{ token: i1.NgControl }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: JsonValidationPrettifierDirective, selector: "textarea[prettyValidJson]", outputs: { invalidJSON: "invalidJSON" }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: JsonValidationPrettifierDirective, decorators: [{
type: Directive,
args: [{
selector: 'textarea[prettyValidJson]'
}]
}], ctorParameters: () => [{ type: i1.NgControl }], propDecorators: { invalidJSON: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi12YWxpZGF0aW9uLXByZXR0aWZpZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9mb3Jtcy9qc29uLXZhbGlkYXRpb24tcHJldHRpZmllci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsU0FBUyxFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBRTVELE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBS3hDLE1BQU0sT0FBTyxpQ0FBaUM7SUFPNUMsWUFBWSxNQUFpQjtRQU5uQixnQkFBVyxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXpELFlBQU8sR0FBVyxPQUFPLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUMxRCxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFJOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVk7YUFDL0MsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxFQUN4QyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQ25DLG9CQUFvQixFQUFFLENBQ3ZCO2FBQ0EsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsS0FBSztRQUM1QixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDO2dCQUNILE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sNEJBQTRCO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQyxDQUFDOytHQWhEVSxpQ0FBaUM7bUdBQWpDLGlDQUFpQzs7NEZBQWpDLGlDQUFpQztrQkFIN0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsMkJBQTJCO2lCQUN0Qzs4RUFFVyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nQ29udHJvbCwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi9pMThuL2luZGV4JztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAndGV4dGFyZWFbcHJldHR5VmFsaWRKc29uXSdcbn0pXG5leHBvcnQgY2xhc3MgSnNvblZhbGlkYXRpb25QcmV0dGlmaWVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBAT3V0cHV0KCkgaW52YWxpZEpTT046IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwcml2YXRlIGFic3RyYWN0Q3RybDogQWJzdHJhY3RDb250cm9sO1xuICBwcml2YXRlIG1lc3NhZ2U6IHN0cmluZyA9IGdldHRleHQoJ011c3QgYmUgYSB2YWxpZCBKU09OIG9iamVjdC4nKTtcbiAgcHJpdmF0ZSBkZWJvdW5jZVRpbWVJbk1zID0gMTAwMDtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihuZ0N0cmw6IE5nQ29udHJvbCkge1xuICAgIHRoaXMuYWJzdHJhY3RDdHJsID0gbmdDdHJsLmNvbnRyb2w7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYWJzdHJhY3RDdHJsLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLmNsZWFyVmFsaWRhdGlvbk1lc3NhZ2UoKSksXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZUluTXMpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUlucHV0QW5kUHJldHRpZnkodmFsdWUpO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24gJiYgIXRoaXMuc3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUlucHV0QW5kUHJldHRpZnkodmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZhbGlkSnNvbk9iamVjdCA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICBjb25zdCBwcmV0dHkgPSBKU09OLnN0cmluZ2lmeSh2YWxpZEpzb25PYmplY3QsIHVuZGVmaW5lZCwgMik7XG4gICAgICAgIHRoaXMuYWJzdHJhY3RDdHJsLnNldFZhbHVlKHByZXR0eSk7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICB0aGlzLnNldEVycm9yQW5kVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEVycm9yQW5kVmFsaWRhdGlvbk1lc3NhZ2UoKSB7XG4gICAgdGhpcy5hYnN0cmFjdEN0cmwuc2V0RXJyb3JzKHsgaW52YWxpZEJvZHlUZW1wbGF0ZTogdHJ1ZSB9KTtcbiAgICB0aGlzLmludmFsaWRKU09OLmVtaXQodGhpcy5tZXNzYWdlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJWYWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICB0aGlzLmludmFsaWRKU09OLmVtaXQodW5kZWZpbmVkKTtcbiAgfVxufVxuIl19