UNPKG

@clr/angular

Version:

Angular components for Clarity

70 lines 8.52 kB
/* * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved. * This software is released under MIT license. * The full license information can be found in LICENSE in the root directory of this project. */ import { Directive, Input, Optional } from '@angular/core'; import { AbstractIfState } from './abstract-if-state'; import { CONTROL_STATE } from './if-control-state.service'; import * as i0 from "@angular/core"; import * as i1 from "./if-control-state.service"; import * as i2 from "../providers/ng-control.service"; export class ClrIfError extends AbstractIfState { constructor(ifControlStateService, ngControlService, template, container) { super(ifControlStateService, ngControlService); this.template = template; this.container = container; if (!this.ifControlStateService) { throw new Error('clrIfError can only be used within a form control container element like clr-input-container'); } } /** * @param state CONTROL_STATE */ handleState(state) { if (this.error && this.control) { this.displayError(this.control.hasError(this.error)); } else { this.displayError(CONTROL_STATE.INVALID === state); } } displayError(invalid) { /* if no container do nothing */ if (!this.container) { return; } if (invalid) { if (this.displayedContent === false) { this.embeddedViewRef = this.container.createEmbeddedView(this.template, { error: this.control.getError(this.error), }); this.displayedContent = true; } else if (this.embeddedViewRef && this.embeddedViewRef.context) { // if view is already rendered, update the error object to keep it in sync this.embeddedViewRef.context.error = this.control.getError(this.error); } } else { this.container.clear(); this.displayedContent = false; } } } ClrIfError.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrIfError, deps: [{ token: i1.IfControlStateService, optional: true }, { token: i2.NgControlService, optional: true }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); ClrIfError.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrIfError, selector: "[clrIfError]", inputs: { error: ["clrIfError", "error"] }, usesInheritance: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrIfError, decorators: [{ type: Directive, args: [{ selector: '[clrIfError]', }] }], ctorParameters: function () { return [{ type: i1.IfControlStateService, decorators: [{ type: Optional }] }, { type: i2.NgControlService, decorators: [{ type: Optional }] }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { error: [{ type: Input, args: ['clrIfError'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWYtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9mb3Jtcy9jb21tb24vaWYtY29udHJvbC1zdGF0ZS9pZi1lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBbUIsS0FBSyxFQUFFLFFBQVEsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFHM0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQXlCLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFLbEYsTUFBTSxPQUFPLFVBQVcsU0FBUSxlQUFlO0lBSzdDLFlBQ2MscUJBQTRDLEVBQzVDLGdCQUFrQyxFQUN0QyxRQUEwQixFQUMxQixTQUEyQjtRQUVuQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUh2QyxhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUMxQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUluQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsOEZBQThGLENBQUMsQ0FBQztTQUNqSDtJQUNILENBQUM7SUFDRDs7T0FFRztJQUNnQixXQUFXLENBQUMsS0FBb0I7UUFDakQsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUN0RDthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDO1NBQ3BEO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxPQUFnQjtRQUNuQyxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbkIsT0FBTztTQUNSO1FBQ0QsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUN0RSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztpQkFDekMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7YUFDOUI7aUJBQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFO2dCQUMvRCwwRUFBMEU7Z0JBQzFFLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDeEU7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQzs7dUdBL0NVLFVBQVU7MkZBQVYsVUFBVTsyRkFBVixVQUFVO2tCQUh0QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO2lCQUN6Qjs7MEJBT0ksUUFBUTs7MEJBQ1IsUUFBUTtxR0FOVSxLQUFLO3NCQUF6QixLQUFLO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjMgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IERpcmVjdGl2ZSwgRW1iZWRkZWRWaWV3UmVmLCBJbnB1dCwgT3B0aW9uYWwsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5nQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuLi9wcm92aWRlcnMvbmctY29udHJvbC5zZXJ2aWNlJztcbmltcG9ydCB7IEFic3RyYWN0SWZTdGF0ZSB9IGZyb20gJy4vYWJzdHJhY3QtaWYtc3RhdGUnO1xuaW1wb3J0IHsgQ09OVFJPTF9TVEFURSwgSWZDb250cm9sU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9pZi1jb250cm9sLXN0YXRlLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY2xySWZFcnJvcl0nLFxufSlcbmV4cG9ydCBjbGFzcyBDbHJJZkVycm9yIGV4dGVuZHMgQWJzdHJhY3RJZlN0YXRlIHtcbiAgQElucHV0KCdjbHJJZkVycm9yJykgZXJyb3I6IHN0cmluZztcblxuICBwcml2YXRlIGVtYmVkZGVkVmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPGFueT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgaWZDb250cm9sU3RhdGVTZXJ2aWNlOiBJZkNvbnRyb2xTdGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgbmdDb250cm9sU2VydmljZTogTmdDb250cm9sU2VydmljZSxcbiAgICBwcml2YXRlIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgIHByaXZhdGUgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmXG4gICkge1xuICAgIHN1cGVyKGlmQ29udHJvbFN0YXRlU2VydmljZSwgbmdDb250cm9sU2VydmljZSk7XG5cbiAgICBpZiAoIXRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NscklmRXJyb3IgY2FuIG9ubHkgYmUgdXNlZCB3aXRoaW4gYSBmb3JtIGNvbnRyb2wgY29udGFpbmVyIGVsZW1lbnQgbGlrZSBjbHItaW5wdXQtY29udGFpbmVyJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0gc3RhdGUgQ09OVFJPTF9TVEFURVxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGhhbmRsZVN0YXRlKHN0YXRlOiBDT05UUk9MX1NUQVRFKSB7XG4gICAgaWYgKHRoaXMuZXJyb3IgJiYgdGhpcy5jb250cm9sKSB7XG4gICAgICB0aGlzLmRpc3BsYXlFcnJvcih0aGlzLmNvbnRyb2wuaGFzRXJyb3IodGhpcy5lcnJvcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlFcnJvcihDT05UUk9MX1NUQVRFLklOVkFMSUQgPT09IHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3BsYXlFcnJvcihpbnZhbGlkOiBib29sZWFuKSB7XG4gICAgLyogaWYgbm8gY29udGFpbmVyIGRvIG5vdGhpbmcgKi9cbiAgICBpZiAoIXRoaXMuY29udGFpbmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpbnZhbGlkKSB7XG4gICAgICBpZiAodGhpcy5kaXNwbGF5ZWRDb250ZW50ID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmVtYmVkZGVkVmlld1JlZiA9IHRoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlLCB7XG4gICAgICAgICAgZXJyb3I6IHRoaXMuY29udHJvbC5nZXRFcnJvcih0aGlzLmVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29udGVudCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZW1iZWRkZWRWaWV3UmVmICYmIHRoaXMuZW1iZWRkZWRWaWV3UmVmLmNvbnRleHQpIHtcbiAgICAgICAgLy8gaWYgdmlldyBpcyBhbHJlYWR5IHJlbmRlcmVkLCB1cGRhdGUgdGhlIGVycm9yIG9iamVjdCB0byBrZWVwIGl0IGluIHN5bmNcbiAgICAgICAgdGhpcy5lbWJlZGRlZFZpZXdSZWYuY29udGV4dC5lcnJvciA9IHRoaXMuY29udHJvbC5nZXRFcnJvcih0aGlzLmVycm9yKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250YWluZXIuY2xlYXIoKTtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29udGVudCA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIl19