moh-common-lib
Version:
A library of Angular components, services, and styles for B.C. Government Ministry of Health (MoH).
152 lines • 12.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, Optional, Self, Output, EventEmitter } from '@angular/core';
import { NgControl } from '@angular/forms';
import { AbstractFormControl } from '../../models/abstract-form-control';
import { LabelReplacementTag } from '../../models/error-message.interface';
/**
* TODO DOCUMENT NEED TO USE NGMODEL FOR REQUIRED TO WORK. Also test with reactive forms to see if still nec
*/
export class EmailComponent extends AbstractFormControl {
/**
* @param {?} controlDir
*/
constructor(controlDir) {
super();
this.controlDir = controlDir;
this.label = 'Email';
this.maxlength = '255';
this.labelforId = 'email_' + this.objectId;
this.required = false;
this.valueChange = new EventEmitter();
this.blur = new EventEmitter();
this.email = '';
this._defaultErrMsg = {
required: `${LabelReplacementTag} is required.`,
invalidEmail: `${LabelReplacementTag} must be properly formatted (e.g. name.com)`,
invalidChars: `${LabelReplacementTag} must contain letters, numbers and/or symbols(e.g. #, @, !).`
};
this._formatCriteria = /^(\S+)@(\S+)\.(\S+)$/;
this._asciiPrintable = /^[ -~]+$/;
if (controlDir) {
controlDir.valueAccessor = this;
}
}
/**
* @param {?} val
* @return {?}
*/
set value(val) {
if (val) {
this.email = val;
}
}
/**
* @return {?}
*/
get value() {
return this.email;
}
/**
* @return {?}
*/
ngOnInit() {
super.ngOnInit();
this.registerValidation(this.controlDir, this.validateSelf);
}
/**
* @param {?} value
* @return {?}
*/
onValueChange(value) {
this.email = value;
this._onChange(value);
this.valueChange.emit(value);
}
/**
* @param {?} event
* @return {?}
*/
onBlur(event) {
this._onTouched(event);
this.blur.emit(event.target.value);
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
if (value) {
this.email = value;
}
}
/**
* @private
* @return {?}
*/
validateSelf() {
if (this.email) {
/** @type {?} */
let result = this._formatCriteria.test(this.email);
if (result) {
result = this._asciiPrintable.test(this.email);
return result ? null : { invalidChars: true };
}
return { invalidEmail: true };
}
return null;
}
}
EmailComponent.decorators = [
{ type: Component, args: [{
selector: 'common-email',
template: "\r\n<label for=\"{{labelforId}}\" class=\"control-label\">{{label}}</label>\r\n<input type=\"text\"\r\n class=\"form-control\"\r\n id=\"{{labelforId}}\"\r\n [value]=\"email\"\r\n (change)=\"onValueChange( $event.target.value )\"\r\n (blur)=\"onBlur( $event )\"\r\n [disabled]=\"disabled\"\r\n [required]=\"required\"\r\n [attr.maxlength]=\"maxlength\"\r\n autocomplete=\"off\" />\r\n<!-- Error messages for component -->\r\n<common-error-container [displayError]=\"controlDir && !disabled && (controlDir.dirty || controlDir.touched) && controlDir?.errors\">\r\n <div *ngIf=\"controlDir?.errors?.required\">\r\n {{_defaultErrMsg.required}}\r\n </div>\r\n <div *ngIf=\"controlDir?.errors?.invalidEmail\">\r\n {{_defaultErrMsg.invalidEmail}}\r\n </div>\r\n <div *ngIf=\"controlDir?.errors?.invalidChars\">\r\n {{_defaultErrMsg.invalidChars}}\r\n </div>\r\n</common-error-container>\r\n\r\n",
styles: [".form-group{margin-bottom:1.5rem}"]
}] }
];
/** @nocollapse */
EmailComponent.ctorParameters = () => [
{ type: NgControl, decorators: [{ type: Optional }, { type: Self }] }
];
EmailComponent.propDecorators = {
label: [{ type: Input }],
maxlength: [{ type: Input }],
labelforId: [{ type: Input }],
required: [{ type: Input }],
value: [{ type: Input }],
valueChange: [{ type: Output }],
blur: [{ type: Output }]
};
if (false) {
/** @type {?} */
EmailComponent.prototype.label;
/** @type {?} */
EmailComponent.prototype.maxlength;
/** @type {?} */
EmailComponent.prototype.labelforId;
/** @type {?} */
EmailComponent.prototype.required;
/** @type {?} */
EmailComponent.prototype.valueChange;
/** @type {?} */
EmailComponent.prototype.blur;
/** @type {?} */
EmailComponent.prototype.email;
/** @type {?} */
EmailComponent.prototype._defaultErrMsg;
/**
* @type {?}
* @private
*/
EmailComponent.prototype._formatCriteria;
/**
* @type {?}
* @private
*/
EmailComponent.prototype._asciiPrintable;
/** @type {?} */
EmailComponent.prototype.controlDir;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbW9oLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9lbWFpbC9lbWFpbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osTUFBTSxFQUNOLFlBQVksRUFDSixNQUFNLGVBQWUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBZ0IsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7OztBQVV6RixNQUFNLE9BQU8sY0FBZSxTQUFRLG1CQUFtQjs7OztJQStCckQsWUFBd0MsVUFBcUI7UUFDM0QsS0FBSyxFQUFFLENBQUM7UUFEOEIsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQTdCcEQsVUFBSyxHQUFXLE9BQU8sQ0FBQztRQUN4QixjQUFTLEdBQVcsS0FBSyxDQUFDO1FBQzFCLGVBQVUsR0FBVyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM5QyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBWXpCLGdCQUFXLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDL0QsU0FBSSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRTVELFVBQUssR0FBVyxFQUFFLENBQUM7UUFFbkIsbUJBQWMsR0FBaUI7WUFDN0IsUUFBUSxFQUFFLEdBQUcsbUJBQW1CLGVBQWU7WUFDL0MsWUFBWSxFQUFFLEdBQUcsbUJBQW1CLG9EQUFvRDtZQUN4RixZQUFZLEVBQUUsR0FBRyxtQkFBbUIsOERBQThEO1NBQ25HLENBQUM7UUFFTSxvQkFBZSxHQUFXLHNCQUFzQixDQUFDO1FBQ2pELG9CQUFlLEdBQVcsVUFBVSxDQUFDO1FBSTNDLElBQUssVUFBVSxFQUFHO1lBQ2hCLFVBQVUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQzs7Ozs7SUE3QkQsSUFDSSxLQUFLLENBQUUsR0FBVztRQUNwQixJQUFLLEdBQUcsRUFBRztZQUNULElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQzs7OztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDOzs7O0lBdUJELFFBQVE7UUFDTixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLGtCQUFrQixDQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBRSxDQUFDO0lBQ2hFLENBQUM7Ozs7O0lBRUQsYUFBYSxDQUFFLEtBQVU7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBRSxLQUFLLENBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBRSxLQUFLLENBQUUsQ0FBQztJQUNqQyxDQUFDOzs7OztJQUVELE1BQU0sQ0FBRSxLQUFVO1FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUUsS0FBSyxDQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUUsQ0FBQztJQUN2QyxDQUFDOzs7OztJQUVELFVBQVUsQ0FBRSxLQUFVO1FBQ3BCLElBQUssS0FBSyxFQUFHO1lBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDcEI7SUFDSCxDQUFDOzs7OztJQUVPLFlBQVk7UUFFbEIsSUFBSyxJQUFJLENBQUMsS0FBSyxFQUFHOztnQkFFWixNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUUsSUFBSSxDQUFDLEtBQUssQ0FBRTtZQUNwRCxJQUFLLE1BQU0sRUFBRztnQkFDWixNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUUsSUFBSSxDQUFDLEtBQUssQ0FBRSxDQUFDO2dCQUNqRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUMvQztZQUNELE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDL0I7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OztZQTlFRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLHU4QkFBcUM7O2FBRXRDOzs7O1lBWFEsU0FBUyx1QkEyQ0YsUUFBUSxZQUFJLElBQUk7OztvQkE3QjdCLEtBQUs7d0JBQ0wsS0FBSzt5QkFDTCxLQUFLO3VCQUNMLEtBQUs7b0JBRUwsS0FBSzswQkFVTCxNQUFNO21CQUNOLE1BQU07Ozs7SUFoQlAsK0JBQWlDOztJQUNqQyxtQ0FBbUM7O0lBQ25DLG9DQUF1RDs7SUFDdkQsa0NBQW1DOztJQVluQyxxQ0FBeUU7O0lBQ3pFLDhCQUE0RDs7SUFFNUQsK0JBQW1COztJQUVuQix3Q0FJRTs7Ozs7SUFFRix5Q0FBeUQ7Ozs7O0lBQ3pELHlDQUE2Qzs7SUFFaEMsb0NBQWdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgU2VsZixcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ0NvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFic3RyYWN0Rm9ybUNvbnRyb2wgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWJzdHJhY3QtZm9ybS1jb250cm9sJztcclxuaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBMYWJlbFJlcGxhY2VtZW50VGFnIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Vycm9yLW1lc3NhZ2UuaW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKiBUT0RPIERPQ1VNRU5UIE5FRUQgVE8gVVNFIE5HTU9ERUwgRk9SIFJFUVVJUkVEIFRPIFdPUksuIEFsc28gdGVzdCB3aXRoIHJlYWN0aXZlIGZvcm1zIHRvIHNlZSBpZiBzdGlsbCBuZWNcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29tbW9uLWVtYWlsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZW1haWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VtYWlsLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEVtYWlsQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGb3JtQ29udHJvbCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnRW1haWwnO1xyXG4gIEBJbnB1dCgpIG1heGxlbmd0aDogc3RyaW5nID0gJzI1NSc7XHJcbiAgQElucHV0KCkgbGFiZWxmb3JJZDogc3RyaW5nID0gJ2VtYWlsXycgKyB0aGlzLm9iamVjdElkO1xyXG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHZhbHVlKCB2YWw6IHN0cmluZyApIHtcclxuICAgIGlmICggdmFsICkge1xyXG4gICAgICB0aGlzLmVtYWlsID0gdmFsO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgdmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lbWFpbDtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgYmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgZW1haWw6IHN0cmluZyA9ICcnO1xyXG5cclxuICBfZGVmYXVsdEVyck1zZzogRXJyb3JNZXNzYWdlID0ge1xyXG4gICAgcmVxdWlyZWQ6IGAke0xhYmVsUmVwbGFjZW1lbnRUYWd9IGlzIHJlcXVpcmVkLmAsXHJcbiAgICBpbnZhbGlkRW1haWw6IGAke0xhYmVsUmVwbGFjZW1lbnRUYWd9IG11c3QgYmUgcHJvcGVybHkgZm9ybWF0dGVkIChlLmcuIG5hbWVAZG9tYWluLmNvbSlgLFxyXG4gICAgaW52YWxpZENoYXJzOiBgJHtMYWJlbFJlcGxhY2VtZW50VGFnfSBtdXN0IGNvbnRhaW4gbGV0dGVycywgbnVtYmVycyBhbmQvb3Igc3ltYm9scyhlLmcuICMsIEAsICEpLmBcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9mb3JtYXRDcml0ZXJpYTogUmVnRXhwID0gL14oXFxTKylAKFxcUyspXFwuKFxcUyspJC87XHJcbiAgcHJpdmF0ZSBfYXNjaWlQcmludGFibGU6IFJlZ0V4cCA9IC9eWyAtfl0rJC87XHJcblxyXG4gIGNvbnN0cnVjdG9yKCBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBjb250cm9sRGlyOiBOZ0NvbnRyb2wgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgaWYgKCBjb250cm9sRGlyICkge1xyXG4gICAgICBjb250cm9sRGlyLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgIHRoaXMucmVnaXN0ZXJWYWxpZGF0aW9uKCB0aGlzLmNvbnRyb2xEaXIsIHRoaXMudmFsaWRhdGVTZWxmICk7XHJcbiAgfVxyXG5cclxuICBvblZhbHVlQ2hhbmdlKCB2YWx1ZTogYW55ICkge1xyXG4gICAgdGhpcy5lbWFpbCA9IHZhbHVlO1xyXG4gICAgdGhpcy5fb25DaGFuZ2UoIHZhbHVlICk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoIHZhbHVlICk7XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoIGV2ZW50OiBhbnkgKSB7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQoIGV2ZW50ICk7XHJcbiAgICB0aGlzLmJsdXIuZW1pdCggZXZlbnQudGFyZ2V0LnZhbHVlICk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKCB2YWx1ZTogYW55ICk6IHZvaWQge1xyXG4gICAgaWYgKCB2YWx1ZSApIHtcclxuICAgICAgdGhpcy5lbWFpbCA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVNlbGYoKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG5cclxuICAgIGlmICggdGhpcy5lbWFpbCApIHtcclxuXHJcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLl9mb3JtYXRDcml0ZXJpYS50ZXN0KCB0aGlzLmVtYWlsICk7XHJcbiAgICAgIGlmICggcmVzdWx0ICkge1xyXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2FzY2lpUHJpbnRhYmxlLnRlc3QoIHRoaXMuZW1haWwgKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0ID8gbnVsbCA6IHsgaW52YWxpZENoYXJzOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHsgaW52YWxpZEVtYWlsOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn1cclxuIl19