UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

56 lines 7.31 kB
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