moh-common-lib
Version:
A library of Angular components, services, and styles for B.C. Government Ministry of Health (MoH).
195 lines • 15 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, Output, EventEmitter, Optional, Self } from '@angular/core';
import { NgControl } from '@angular/forms';
import { LETTER, NUMBER, SPACE } from '../../models/mask.constants';
import { Base } from '../../models/base';
export class PostalCodeComponent extends Base {
/**
* @param {?} controlDir
*/
constructor(controlDir) {
super();
this.controlDir = controlDir;
this.label = 'Postal Code';
this.displayMask = true;
this.maxlen = '250';
this.labelforId = 'postalCode_' + this.objectId;
this.disabled = false;
this.required = false;
this.valueChange = new EventEmitter();
this.blurEvent = new EventEmitter();
this.postalCode = '';
this.defaultErrMsg = {
required: 'is required.',
invalidChar: 'must contain letters and/or numbers and may include blank characters.',
pattern: 'Must be in the format A1A 1A1',
invalidBCPostal: 'Invalid postal code for British Columbia.'
};
this._onChange = (/**
* @param {?} _
* @return {?}
*/
(_) => { });
this._onTouched = (/**
* @param {?} _
* @return {?}
*/
(_) => { });
if (controlDir) {
controlDir.valueAccessor = this;
}
this.mask = [LETTER, NUMBER, LETTER, SPACE, NUMBER, LETTER, NUMBER];
}
/**
* @param {?} val
* @return {?}
*/
set value(val) {
if (val) {
this.postalCode = val;
}
}
/**
* @return {?}
*/
get value() {
return this.postalCode;
}
/**
* @return {?}
*/
ngOnInit() {
this.setErrorMsg();
}
/**
* @param {?} value
* @return {?}
*/
onValueChange(value) {
if (value !== this.postalCode) { // IE fix when focus does not display required error
this._onChange(value);
this.valueChange.emit(value);
this.postalCode = value;
}
}
/**
* @param {?} event
* @return {?}
*/
onBlurEvent(event) {
this._onTouched(event);
this.blurEvent.emit(event);
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
if (value !== undefined) {
this.postalCode = value;
}
}
// Register change functiong
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this._onChange = fn;
}
// Register touched function
/**
* @param {?} fn
* @return {?}
*/
registerOnTouched(fn) {
this._onTouched = fn;
}
/**
* @param {?} isDisabled
* @return {?}
*/
setDisabledState(isDisabled) {
this.disabled = isDisabled;
}
/**
* Upper cases letters in string
* @param {?} text
* @return {?}
*/
upperCasePipe(text) {
return text.toUpperCase();
}
/**
* @private
* @return {?}
*/
setErrorMsg() {
if (this.errorMessage) {
Object.keys(this.errorMessage).map((/**
* @param {?} x
* @return {?}
*/
x => this.defaultErrMsg[x] = this.errorMessage[x]));
}
}
}
PostalCodeComponent.decorators = [
{ type: Component, args: [{
selector: 'common-postal-code',
template: "<label for=\"{{labelforId}}\" class=\"control-label\">{{label}}</label>\r\n<div *ngIf=\"displayMask; else NoMask\">\r\n<input class=\"form-control\"\r\n spellcheck=\"false\"\r\n id=\"{{labelforId}}\"\r\n [ngModel]=\"postalCode\"\r\n (ngModelChange)=\"onValueChange($event)\"\r\n (blur)=\"onBlurEvent($event)\"\r\n [textMask]=\"{mask: mask, pipe: upperCasePipe}\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n autocomplete=\"off\"/>\r\n </div>\r\n\r\n <!-- Error messages for input -->\r\n <common-error-container\r\n [displayError]=\"controlDir && !disabled && (controlDir.touched || controlDir.dirty) && controlDir.errors\">\r\n <div *ngIf=\"controlDir?.errors?.required\">\r\n {{label}} {{defaultErrMsg.required}}\r\n </div>\r\n <div *ngIf=\"controlDir?.errors?.pattern\">\r\n {{defaultErrMsg.pattern}}\r\n </div>\r\n <div *ngIf=\"controlDir?.errors?.invalidBCPostal\">\r\n {{defaultErrMsg.invalidBCPostal}}\r\n </div>\r\n <div *ngIf=\"controlDir?.errors?.invalidChar\">\r\n {{label}} {{defaultErrMsg.invalidChar}}\r\n </div>\r\n </common-error-container>\r\n\r\n<ng-template #NoMask>\r\n <input class=\"form-control\"\r\n spellcheck=\"false\"\r\n type=\"text\"\r\n id=\"{{labelforId}}\"\r\n [value]=\"postalCode\"\r\n (input)=\"onValueChange($event.target.value)\"\r\n (blur)=\"onBlurEvent($event)\"\r\n [disabled]=\"disabled\"\r\n [attr.maxlength]=\"maxlen\"\r\n autocomplete=\"off\"/>\r\n</ng-template>\r\n",
styles: [""]
}] }
];
/** @nocollapse */
PostalCodeComponent.ctorParameters = () => [
{ type: NgControl, decorators: [{ type: Optional }, { type: Self }] }
];
PostalCodeComponent.propDecorators = {
label: [{ type: Input }],
displayMask: [{ type: Input }],
maxlen: [{ type: Input }],
labelforId: [{ type: Input }],
disabled: [{ type: Input }],
errorMessage: [{ type: Input }],
required: [{ type: Input }],
value: [{ type: Input }],
valueChange: [{ type: Output }],
blurEvent: [{ type: Output }]
};
if (false) {
/** @type {?} */
PostalCodeComponent.prototype.label;
/** @type {?} */
PostalCodeComponent.prototype.displayMask;
/** @type {?} */
PostalCodeComponent.prototype.maxlen;
/** @type {?} */
PostalCodeComponent.prototype.labelforId;
/** @type {?} */
PostalCodeComponent.prototype.disabled;
/** @type {?} */
PostalCodeComponent.prototype.errorMessage;
/** @type {?} */
PostalCodeComponent.prototype.required;
/** @type {?} */
PostalCodeComponent.prototype.valueChange;
/** @type {?} */
PostalCodeComponent.prototype.blurEvent;
/** @type {?} */
PostalCodeComponent.prototype.postalCode;
/** @type {?} */
PostalCodeComponent.prototype.mask;
/** @type {?} */
PostalCodeComponent.prototype.defaultErrMsg;
/** @type {?} */
PostalCodeComponent.prototype._onChange;
/** @type {?} */
PostalCodeComponent.prototype._onTouched;
/** @type {?} */
PostalCodeComponent.prototype.controlDir;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGFsLWNvZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbW9oLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9wb3N0YWwtY29kZS9wb3N0YWwtY29kZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQXdCLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQVN6QyxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsSUFBSTs7OztJQW9DM0MsWUFBd0MsVUFBcUI7UUFDM0QsS0FBSyxFQUFFLENBQUM7UUFEOEIsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQWxDcEQsVUFBSyxHQUFXLGFBQWEsQ0FBQztRQUM5QixnQkFBVyxHQUFZLElBQUksQ0FBQztRQUM1QixXQUFNLEdBQVcsS0FBSyxDQUFDO1FBQ3ZCLGVBQVUsR0FBVyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNuRCxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFZekIsZ0JBQVcsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMvRCxjQUFTLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFFakUsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUd4QixrQkFBYSxHQUFpQjtZQUM1QixRQUFRLEVBQUUsY0FBYztZQUN4QixXQUFXLEVBQUUsdUVBQXVFO1lBQ3BGLE9BQU8sRUFBRSwrQkFBK0I7WUFDeEMsZUFBZSxFQUFFLDJD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OztJQVluQywwQ0FBeUU7O0lBQ3pFLHdDQUFpRTs7SUFFakUseUNBQXdCOztJQUN4QixtQ0FBVTs7SUFFViw0Q0FLRTs7SUFFRix3Q0FBMkI7O0lBQzNCLHlDQUE0Qjs7SUFFZix5Q0FBZ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT3B0aW9uYWwsIFNlbGYsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBMRVRURVIsIE5VTUJFUiwgU1BBQ0UgfSBmcm9tICcuLi8uLi9tb2RlbHMvbWFzay5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Jhc2UnO1xyXG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9wdWJsaWNfYXBpJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvbW1vbi1wb3N0YWwtY29kZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Bvc3RhbC1jb2RlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wb3N0YWwtY29kZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQb3N0YWxDb2RlQ29tcG9uZW50IGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IgIHtcclxuXHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICdQb3N0YWwgQ29kZSc7XHJcbiAgQElucHV0KCkgZGlzcGxheU1hc2s6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIG1heGxlbjogc3RyaW5nID0gJzI1MCc7XHJcbiAgQElucHV0KCkgbGFiZWxmb3JJZDogc3RyaW5nID0gJ3Bvc3RhbENvZGVfJyArIHRoaXMub2JqZWN0SWQ7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBlcnJvck1lc3NhZ2U6IEVycm9yTWVzc2FnZTtcclxuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCB2YWx1ZSggdmFsOiBzdHJpbmcgKSB7XHJcbiAgICBpZiAodmFsKSB7XHJcbiAgICAgIHRoaXMucG9zdGFsQ29kZSA9IHZhbDtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucG9zdGFsQ29kZTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgYmx1ckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwb3N0YWxDb2RlOiBzdHJpbmcgPSAnJztcclxuICBtYXNrOiBhbnk7XHJcblxyXG4gIGRlZmF1bHRFcnJNc2c6IEVycm9yTWVzc2FnZSA9IHtcclxuICAgIHJlcXVpcmVkOiAnaXMgcmVxdWlyZWQuJyxcclxuICAgIGludmFsaWRDaGFyOiAnbXVzdCBjb250YWluIGxldHRlcnMgYW5kL29yIG51bWJlcnMgYW5kIG1heSBpbmNsdWRlIGJsYW5rIGNoYXJhY3RlcnMuJyxcclxuICAgIHBhdHRlcm46ICdNdXN0IGJlIGluIHRoZSBmb3JtYXQgQTFBIDFBMScsXHJcbiAgICBpbnZhbGlkQkNQb3N0YWw6ICdJbnZhbGlkIHBvc3RhbCBjb2RlIGZvciBCcml0aXNoIENvbHVtYmlhLidcclxuICB9O1xyXG5cclxuICBfb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcclxuICBfb25Ub3VjaGVkID0gKF86IGFueSkgPT4ge307XHJcblxyXG4gIGNvbnN0cnVjdG9yKCBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBjb250cm9sRGlyOiBOZ0NvbnRyb2wgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgaWYgKCBjb250cm9sRGlyICkge1xyXG4gICAgICBjb250cm9sRGlyLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWFzayA9IFtMRVRURVIsIE5VTUJFUiwgTEVUVEVSLCBTUEFDRSwgTlVNQkVSLCBMRVRURVIsIE5VTUJFUl07XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0RXJyb3JNc2coKTtcclxuICB9XHJcblxyXG4gIG9uVmFsdWVDaGFuZ2UoIHZhbHVlOiBhbnkgKSB7XHJcblxyXG4gICAgaWYgKCB2YWx1ZSAhPT0gdGhpcy5wb3N0YWxDb2RlICkgeyAvLyBJRSBmaXggd2hlbiBmb2N1cyBkb2VzIG5vdCBkaXNwbGF5IHJlcXVpcmVkIGVycm9yXHJcbiAgICAgIHRoaXMuX29uQ2hhbmdlKCB2YWx1ZSApO1xyXG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoIHZhbHVlICk7XHJcbiAgICAgIHRoaXMucG9zdGFsQ29kZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25CbHVyRXZlbnQoIGV2ZW50OiBhbnkgKSB7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQoIGV2ZW50ICk7XHJcbiAgICB0aGlzLmJsdXJFdmVudC5lbWl0KCBldmVudCApO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSggdmFsdWU6IGFueSApOiB2b2lkIHtcclxuICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcclxuICAgICAgdGhpcy5wb3N0YWxDb2RlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBSZWdpc3RlciBjaGFuZ2UgZnVuY3Rpb25nXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZSggZm46IGFueSApOiB2b2lkIHtcclxuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICAvLyBSZWdpc3RlciB0b3VjaGVkIGZ1bmN0aW9uXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoIGZuOiBhbnkgKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcHBlciBjYXNlcyBsZXR0ZXJzIGluIHN0cmluZ1xyXG4gICAqL1xyXG4gIHVwcGVyQ2FzZVBpcGUodGV4dDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGV4dC50b1VwcGVyQ2FzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRFcnJvck1zZygpIHtcclxuICAgIGlmICggdGhpcy5lcnJvck1lc3NhZ2UgKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZXJyb3JNZXNzYWdlKS5tYXAoIHggPT4gdGhpcy5kZWZhdWx0RXJyTXNnW3hdID0gdGhpcy5lcnJvck1lc3NhZ2VbeF0gKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19