@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
59 lines • 9.1 kB
JavaScript
import { Directive, ElementRef, Optional, Renderer2 } from '@angular/core';
import { NgControl, Validators } from '@angular/forms';
import { TranslateService } from '@ngx-translate/core';
import { gettext } from '../i18n/gettext';
import * as i0 from "@angular/core";
import * as i1 from "@ngx-translate/core";
import * as i2 from "@angular/forms";
export class RequiredInputPlaceholderDirective {
constructor(el, renderer, translationService, ngControl) {
this.el = el;
this.renderer = renderer;
this.translationService = translationService;
this.ngControl = ngControl;
this.shouldSkipRequiredHint = false;
this.shouldSkipRequiredHint = !!this.el.nativeElement.closest('[placeholder-no-required-hint]');
}
ngAfterViewChecked() {
if (this.el?.nativeElement?.required !== undefined || this.ngControl?.control) {
const isRequired = this.el?.nativeElement?.required ||
this.ngControl?.control?.hasValidator(Validators.required);
const willSetRequiredHint = isRequired && !this.shouldSkipRequiredHint;
const placeholder = this.el.nativeElement.placeholder;
if (this.placeholder !== placeholder || this.req !== willSetRequiredHint) {
this.updatePlaceholder(this.getTextForPlaceholder(placeholder, willSetRequiredHint));
}
}
}
getTextForPlaceholder(placeholder = '', required = false) {
this.req = required;
const requiredText = `(${this.translationService.instant(gettext('required'))})`;
const requiredTextIndex = placeholder.lastIndexOf(requiredText);
if (requiredTextIndex > 0) {
placeholder = placeholder.slice(0, requiredTextIndex - 1);
}
if (requiredTextIndex === 0) {
placeholder = '';
}
if (!required) {
return placeholder;
}
return placeholder.trim() ? `${placeholder} ${requiredText}` : requiredText;
}
updatePlaceholder(placeholder) {
this.renderer.setAttribute(this.el.nativeElement, 'placeholder', placeholder);
this.placeholder = placeholder;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequiredInputPlaceholderDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.TranslateService }, { token: i2.NgControl, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: RequiredInputPlaceholderDirective, isStandalone: true, selector: "input[required], input[formControlName]", ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequiredInputPlaceholderDirective, decorators: [{
type: Directive,
args: [{
selector: 'input[required], input[formControlName]',
standalone: true
}]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.TranslateService }, { type: i2.NgControl, decorators: [{
type: Optional
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWlyZWQtaW5wdXQtcGxhY2Vob2xkZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9mb3Jtcy9yZXF1aXJlZC1pbnB1dC1wbGFjZWhvbGRlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFNMUMsTUFBTSxPQUFPLGlDQUFpQztJQUk1QyxZQUNVLEVBQWMsRUFDZCxRQUFtQixFQUNuQixrQkFBb0MsRUFDeEIsU0FBb0I7UUFIaEMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFrQjtRQUN4QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBUGxDLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQVNyQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxRQUFRLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDOUUsTUFBTSxVQUFVLEdBQ2QsSUFBSSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsUUFBUTtnQkFDaEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3RCxNQUFNLG1CQUFtQixHQUFHLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztZQUN2RSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7WUFFdEQsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3pFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUN2RixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxXQUFXLEdBQUcsRUFBRSxFQUFFLFFBQVEsR0FBRyxLQUFLO1FBQzlELElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDO1FBQ3BCLE1BQU0sWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2pGLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRSxJQUFJLGlCQUFpQixHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsSUFBSSxpQkFBaUIsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ25CLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDOUUsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFdBQVc7UUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7K0dBOUNVLGlDQUFpQzttR0FBakMsaUNBQWlDOzs0RkFBakMsaUNBQWlDO2tCQUo3QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx5Q0FBeUM7b0JBQ25ELFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBU0ksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT3B0aW9uYWwsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDb250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2lucHV0W3JlcXVpcmVkXSwgaW5wdXRbZm9ybUNvbnRyb2xOYW1lXScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgUmVxdWlyZWRJbnB1dFBsYWNlaG9sZGVyRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gIHByaXZhdGUgc2hvdWxkU2tpcFJlcXVpcmVkSGludCA9IGZhbHNlO1xuICBwcml2YXRlIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVxOiBib29sZWFuO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIG5nQ29udHJvbDogTmdDb250cm9sXG4gICkge1xuICAgIHRoaXMuc2hvdWxkU2tpcFJlcXVpcmVkSGludCA9ICEhdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ1twbGFjZWhvbGRlci1uby1yZXF1aXJlZC1oaW50XScpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVsPy5uYXRpdmVFbGVtZW50Py5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkIHx8IHRoaXMubmdDb250cm9sPy5jb250cm9sKSB7XG4gICAgICBjb25zdCBpc1JlcXVpcmVkID1cbiAgICAgICAgdGhpcy5lbD8ubmF0aXZlRWxlbWVudD8ucmVxdWlyZWQgfHxcbiAgICAgICAgdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgIGNvbnN0IHdpbGxTZXRSZXF1aXJlZEhpbnQgPSBpc1JlcXVpcmVkICYmICF0aGlzLnNob3VsZFNraXBSZXF1aXJlZEhpbnQ7XG4gICAgICBjb25zdCBwbGFjZWhvbGRlciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5wbGFjZWhvbGRlcjtcblxuICAgICAgaWYgKHRoaXMucGxhY2Vob2xkZXIgIT09IHBsYWNlaG9sZGVyIHx8IHRoaXMucmVxICE9PSB3aWxsU2V0UmVxdWlyZWRIaW50KSB7XG4gICAgICAgIHRoaXMudXBkYXRlUGxhY2Vob2xkZXIodGhpcy5nZXRUZXh0Rm9yUGxhY2Vob2xkZXIocGxhY2Vob2xkZXIsIHdpbGxTZXRSZXF1aXJlZEhpbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFRleHRGb3JQbGFjZWhvbGRlcihwbGFjZWhvbGRlciA9ICcnLCByZXF1aXJlZCA9IGZhbHNlKSB7XG4gICAgdGhpcy5yZXEgPSByZXF1aXJlZDtcbiAgICBjb25zdCByZXF1aXJlZFRleHQgPSBgKCR7dGhpcy50cmFuc2xhdGlvblNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdyZXF1aXJlZCcpKX0pYDtcbiAgICBjb25zdCByZXF1aXJlZFRleHRJbmRleCA9IHBsYWNlaG9sZGVyLmxhc3RJbmRleE9mKHJlcXVpcmVkVGV4dCk7XG4gICAgaWYgKHJlcXVpcmVkVGV4dEluZGV4ID4gMCkge1xuICAgICAgcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlci5zbGljZSgwLCByZXF1aXJlZFRleHRJbmRleCAtIDEpO1xuICAgIH1cbiAgICBpZiAocmVxdWlyZWRUZXh0SW5kZXggPT09IDApIHtcbiAgICAgIHBsYWNlaG9sZGVyID0gJyc7XG4gICAgfVxuICAgIGlmICghcmVxdWlyZWQpIHtcbiAgICAgIHJldHVybiBwbGFjZWhvbGRlcjtcbiAgICB9XG4gICAgcmV0dXJuIHBsYWNlaG9sZGVyLnRyaW0oKSA/IGAke3BsYWNlaG9sZGVyfSAke3JlcXVpcmVkVGV4dH1gIDogcmVxdWlyZWRUZXh0O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQbGFjZWhvbGRlcihwbGFjZWhvbGRlcikge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ3BsYWNlaG9sZGVyJywgcGxhY2Vob2xkZXIpO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgfVxufVxuIl19