@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
59 lines • 7.21 kB
JavaScript
import { Directive, Input } from '@angular/core';
import { FormControl, NG_VALIDATORS, Validators } from '@angular/forms';
import * as i0 from "@angular/core";
/**
* A directive that adds the `emails` validator to controls marked with the
* `emails` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.
*
* ```html
* <input type="text" name="emails" ngModel emails>
* <input type="text" name="emails" ngModel emails="true">
* <input type="text" name="emails" ngModel [emails]="true">
* ```
*/
export class EmailsValidatorDirective {
constructor() {
this._enabled = false;
this.separator = ',';
}
/**
* Tracks changes to the emails attribute bound to this directive.
*/
set emails(value) {
this._enabled = value === '' || value === true || value === 'true';
if (this._onChange) {
this._onChange();
}
}
/**
* Method that validates whether email addresses are valid.
* Returns the validation result if enabled, otherwise null.
*/
validate(control) {
if (!this._enabled) {
return null;
}
const value = control.value || '';
const emails = value.split(this.separator).map(email => email.trim());
const invalid = emails.some(email => Validators.email(new FormControl(email)));
return invalid ? { emails: true } : null;
}
/**
* Registers a callback function to call when the validator inputs change.
*/
registerOnValidatorChange(fn) {
this._onChange = fn;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EmailsValidatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: EmailsValidatorDirective, selector: "[emails][formControlName],[emails][formControl],[emails][ngModel]", inputs: { emails: "emails" }, providers: [{ provide: NG_VALIDATORS, useExisting: EmailsValidatorDirective, multi: true }], ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EmailsValidatorDirective, decorators: [{
type: Directive,
args: [{
selector: '[emails][formControlName],[emails][formControl],[emails][ngModel]',
providers: [{ provide: NG_VALIDATORS, useExisting: EmailsValidatorDirective, multi: true }]
}]
}], propDecorators: { emails: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWxzLXZhbGlkYXRvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2Zvcm1zL2VtYWlscy12YWxpZGF0b3IuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFDTCxXQUFXLEVBRVgsYUFBYSxFQUdiLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDOztBQUV4Qjs7Ozs7Ozs7O0dBU0c7QUFLSCxNQUFNLE9BQU8sd0JBQXdCO0lBSnJDO1FBS1UsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixjQUFTLEdBQUcsR0FBRyxDQUFDO0tBa0N6QjtJQWhDQzs7T0FFRztJQUNILElBQ0ksTUFBTSxDQUFDLEtBQXVCO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxLQUFLLEVBQUUsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxNQUFNLENBQUM7UUFDbkUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLE9BQXdCO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDbEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNILHlCQUF5QixDQUFDLEVBQWM7UUFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQzsrR0FwQ1Usd0JBQXdCO21HQUF4Qix3QkFBd0IsMEhBRnhCLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7OzRGQUVoRix3QkFBd0I7a0JBSnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1FQUFtRTtvQkFDN0UsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsMEJBQTBCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUM1Rjs4QkFVSyxNQUFNO3NCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGb3JtQ29udHJvbCxcbiAgQWJzdHJhY3RDb250cm9sLFxuICBOR19WQUxJREFUT1JTLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRoYXQgYWRkcyB0aGUgYGVtYWlsc2AgdmFsaWRhdG9yIHRvIGNvbnRyb2xzIG1hcmtlZCB3aXRoIHRoZVxuICogYGVtYWlsc2AgYXR0cmlidXRlLiBUaGUgZGlyZWN0aXZlIGlzIHByb3ZpZGVkIHdpdGggdGhlIGBOR19WQUxJREFUT1JTYCBtdWx0aS1wcm92aWRlciBsaXN0LlxuICpcbiAqIGBgYGh0bWxcbiAqIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJlbWFpbHNcIiBuZ01vZGVsIGVtYWlscz5cbiAqIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJlbWFpbHNcIiBuZ01vZGVsIGVtYWlscz1cInRydWVcIj5cbiAqIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJlbWFpbHNcIiBuZ01vZGVsIFtlbWFpbHNdPVwidHJ1ZVwiPlxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tlbWFpbHNdW2Zvcm1Db250cm9sTmFtZV0sW2VtYWlsc11bZm9ybUNvbnRyb2xdLFtlbWFpbHNdW25nTW9kZWxdJyxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogRW1haWxzVmFsaWRhdG9yRGlyZWN0aXZlLCBtdWx0aTogdHJ1ZSB9XVxufSlcbmV4cG9ydCBjbGFzcyBFbWFpbHNWYWxpZGF0b3JEaXJlY3RpdmUgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xuICBwcml2YXRlIF9lbmFibGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX29uQ2hhbmdlPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBzZXBhcmF0b3IgPSAnLCc7XG5cbiAgLyoqXG4gICAqIFRyYWNrcyBjaGFuZ2VzIHRvIHRoZSBlbWFpbHMgYXR0cmlidXRlIGJvdW5kIHRvIHRoaXMgZGlyZWN0aXZlLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGVtYWlscyh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZykge1xuICAgIHRoaXMuX2VuYWJsZWQgPSB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09ICd0cnVlJztcbiAgICBpZiAodGhpcy5fb25DaGFuZ2UpIHtcbiAgICAgIHRoaXMuX29uQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0aGF0IHZhbGlkYXRlcyB3aGV0aGVyIGVtYWlsIGFkZHJlc3NlcyBhcmUgdmFsaWQuXG4gICAqIFJldHVybnMgdGhlIHZhbGlkYXRpb24gcmVzdWx0IGlmIGVuYWJsZWQsIG90aGVyd2lzZSBudWxsLlxuICAgKi9cbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmICghdGhpcy5fZW5hYmxlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlIHx8ICcnO1xuICAgIGNvbnN0IGVtYWlscyA9IHZhbHVlLnNwbGl0KHRoaXMuc2VwYXJhdG9yKS5tYXAoZW1haWwgPT4gZW1haWwudHJpbSgpKTtcbiAgICBjb25zdCBpbnZhbGlkID0gZW1haWxzLnNvbWUoZW1haWwgPT4gVmFsaWRhdG9ycy5lbWFpbChuZXcgRm9ybUNvbnRyb2woZW1haWwpKSk7XG4gICAgcmV0dXJuIGludmFsaWQgPyB7IGVtYWlsczogdHJ1ZSB9IDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIHZhbGlkYXRvciBpbnB1dHMgY2hhbmdlLlxuICAgKi9cbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cbn1cbiJdfQ==