moh-common-lib
Version:
A library of Angular components, services, and styles for B.C. Government Ministry of Health (MoH).
219 lines • 19.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Input, Output, EventEmitter, Optional, Self } from '@angular/core';
import { NgControl } from '@angular/forms';
import { NUMBER, SPACE } from '../../models/mask.constants';
import { LabelReplacementTag } from '../../models/error-message.interface';
import { AbstractFormControl } from '../../models/abstract-form-control';
/**
* PhoneNumberComponent is a used to show the Phone number.
*
*
* \@example
* <common-phone-number name='phoneNumber'
* [(ngModel)]='dataService.facAdminPhoneNumber'
* required></common-phone-number>
* @export
*/
var PhoneNumberComponent = /** @class */ (function (_super) {
tslib_1.__extends(PhoneNumberComponent, _super);
function PhoneNumberComponent(controlDir) {
var _this = _super.call(this) || this;
_this.controlDir = controlDir;
_this.displayMask = true;
_this.required = false;
_this.label = 'Mobile';
_this.allowInternational = true;
// TODO: Remove once all project using library remove placeholders -- Temporary solution
_this.enablePlaceHolder = true;
_this.valueChange = new EventEmitter();
_this.phoneNumber = '';
// Abstact variable defined
_this._defaultErrMsg = {
required: LabelReplacementTag + " is required.",
incompleteValue: LabelReplacementTag + " does not appear to be valid."
};
if (controlDir) {
controlDir.valueAccessor = _this;
}
return _this;
}
Object.defineProperty(PhoneNumberComponent.prototype, "value", {
get: /**
* @return {?}
*/
function () {
return this.phoneNumber;
},
// Setter/getter for when not used in form (ex. data dislayed but not edittable)
set:
// Setter/getter for when not used in form (ex. data dislayed but not edittable)
/**
* @param {?} val
* @return {?}
*/
function (val) {
if (val !== undefined) {
this.phoneNumber = val;
}
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
PhoneNumberComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
_super.prototype.ngOnInit.call(this);
/** @type {?} */
var internationalPrefix = '+1';
this.placeholder = this.enablePlaceHolder ? '(555) 555-5555' : '';
this.mask = ['(', /[2-9]/, NUMBER, NUMBER, ')', SPACE, NUMBER, NUMBER, NUMBER, '-', NUMBER, NUMBER, NUMBER, NUMBER];
if (this.allowInternational) {
if (this.placeholder) {
this.placeholder = internationalPrefix + " " + this.placeholder;
}
/** @type {?} */
var prefixArrayOfChar = internationalPrefix.split('');
this.mask = tslib_1.__spread(prefixArrayOfChar, [SPACE], this.mask);
}
// Register self validation
Promise.resolve().then((/**
* @return {?}
*/
function () {
if (_this.controlDir) {
/** @type {?} */
var allValidators = [_this.validateSelf.bind(_this)];
if (_this.controlDir.control.validator) {
allValidators.push(_this.controlDir.control.validator);
}
_this.controlDir.control.setValidators(allValidators);
_this.controlDir.control.updateValueAndValidity();
}
}));
};
/**
* @param {?} value
* @return {?}
*/
PhoneNumberComponent.prototype.setPhoneNumber = /**
* @param {?} value
* @return {?}
*/
function (value) {
this.phoneNumber = value;
this.valueChange.emit(this.phoneNumber);
this._onChange(value);
};
/**
* @param {?} $event
* @return {?}
*/
PhoneNumberComponent.prototype.onBlur = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
this._onTouched($event);
};
/**
* @param {?} value
* @return {?}
*/
PhoneNumberComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value !== undefined) {
// phoneNumber is where the actual data is displayed to user for this
// component
this.phoneNumber = value;
}
};
/**
* @private
* @return {?}
*/
PhoneNumberComponent.prototype.validateSelf = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var value = this.phoneNumber;
/** @type {?} */
var phoneLength = this.allowInternational ? 11 : 10;
if (value) {
/** @type {?} */
var stripped = value
.replace(/_/g, '') // remove underlines
.replace(/\s/g, '') // spaces
.replace(/\+|-/g, '') // + or - symbol
.replace('(', '')
.replace(')', '');
/** @type {?} */
var valid = stripped.length === phoneLength;
return valid ? null : { incompleteValue: true };
}
return null;
};
PhoneNumberComponent.PhoneNumberRegEx = '^[2-9]{1}\\d{2}[\\-]?\\d{3}[\\-]?\\d{4}$';
PhoneNumberComponent.decorators = [
{ type: Component, args: [{
selector: 'common-phone-number',
template: "\r\n<label for=\"phone_{{objectId}}\" class=\"control-label\">{{label}}</label>\r\n<div *ngIf=\"displayMask; else NoMask\">\r\n <input class=\"form-control\"\r\n type=\"text\"\r\n name=\"phone_{{objectId}}\"\r\n id=\"phone_{{objectId}}\"\r\n [ngModel]=\"phoneNumber\"\r\n (ngModelChange)=\"setPhoneNumber($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [placeholder]=\"placeholder \"\r\n [textMask]=\"{mask: mask}\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"/>\r\n</div>\r\n\r\n<!-- Error messages for component -->\r\n<common-error-container\r\n [displayError]=\"!disabled && (controlDir?.touched || controlDir?.dirty) && controlDir?.errors\">\r\n <div *ngIf=\"controlDir?.errors?.required\">\r\n {{_defaultErrMsg.required}}\r\n </div>\r\n <div *ngIf=\"controlDir?.errors?.incompleteValue\">\r\n {{_defaultErrMsg.incompleteValue}}\r\n </div>\r\n</common-error-container>\r\n\r\n\r\n<ng-template #NoMask>\r\n <input class=\"form-control\"\r\n type=\"text\"\r\n name=\"phone_{{objectId}}\"\r\n id=\"phone_{{objectId}}\"\r\n [value]=\"phoneNumber\"\r\n (input)=\"setPhoneNumber($event.target.value)\"\r\n (blur)=\"onBlur($event)\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\" />\r\n</ng-template>\r\n\r\n",
styles: [""]
}] }
];
/** @nocollapse */
PhoneNumberComponent.ctorParameters = function () { return [
{ type: NgControl, decorators: [{ type: Optional }, { type: Self }] }
]; };
PhoneNumberComponent.propDecorators = {
displayMask: [{ type: Input }],
required: [{ type: Input }],
label: [{ type: Input }],
allowInternational: [{ type: Input }],
enablePlaceHolder: [{ type: Input }],
value: [{ type: Input }],
valueChange: [{ type: Output }]
};
return PhoneNumberComponent;
}(AbstractFormControl));
export { PhoneNumberComponent };
if (false) {
/** @type {?} */
PhoneNumberComponent.PhoneNumberRegEx;
/** @type {?} */
PhoneNumberComponent.prototype.displayMask;
/** @type {?} */
PhoneNumberComponent.prototype.required;
/** @type {?} */
PhoneNumberComponent.prototype.label;
/** @type {?} */
PhoneNumberComponent.prototype.allowInternational;
/** @type {?} */
PhoneNumberComponent.prototype.enablePlaceHolder;
/** @type {?} */
PhoneNumberComponent.prototype.valueChange;
/** @type {?} */
PhoneNumberComponent.prototype.phoneNumber;
/** @type {?} */
PhoneNumberComponent.prototype.mask;
/** @type {?} */
PhoneNumberComponent.prototype.placeholder;
/** @type {?} */
PhoneNumberComponent.prototype._defaultErrMsg;
/** @type {?} */
PhoneNumberComponent.prototype.controlDir;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtbnVtYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21vaC1jb21tb24tbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvcGhvbmUtbnVtYmVyL3Bob25lLW51bWJlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFFBQVEsRUFDUixJQUFJLEVBRUwsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFnQixtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7Ozs7OztBQWN6RTtJQU0wQyxnREFBbUI7SUFvQzNELDhCQUF1QyxVQUFxQjtRQUE1RCxZQUNFLGlCQUFPLFNBSVI7UUFMc0MsZ0JBQVUsR0FBVixVQUFVLENBQVc7UUFqQ25ELGlCQUFXLEdBQVksSUFBSSxDQUFDO1FBQzVCLGNBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsV0FBSyxHQUFXLFFBQVEsQ0FBQztRQUV6Qix3QkFBa0IsR0FBWSxJQUFJLENBQUM7O1FBR25DLHVCQUFpQixHQUFZLElBQUksQ0FBQztRQWFqQyxpQkFBVyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRWxFLGlCQUFXLEdBQVcsRUFBRSxDQUFDOztRQU1oQyxvQkFBYyxHQUFpQjtZQUM3QixRQUFRLEVBQUssbUJBQW1CLGtCQUFlO1lBQy9DLGVBQWUsRUFBSyxtQkFBbUIsa0NBQStCO1NBQ3ZFLENBQUM7UUFJQSxJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxhQUFhLEdBQUcsS0FBSSxDQUFD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dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9wdGlvbmFsLFxyXG4gIFNlbGYsXHJcbiAgT25Jbml0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTlVNQkVSLCBTUEFDRSB9IGZyb20gJy4uLy4uL21vZGVscy9tYXNrLmNvbnN0YW50cyc7XHJcbmltcG9ydCB7IEVycm9yTWVzc2FnZSwgTGFiZWxSZXBsYWNlbWVudFRhZyB9IGZyb20gJy4uLy4uL21vZGVscy9lcnJvci1tZXNzYWdlLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Rm9ybUNvbnRyb2wgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWJzdHJhY3QtZm9ybS1jb250cm9sJztcclxuXHJcbi8qKlxyXG4gKiBQaG9uZU51bWJlckNvbXBvbmVudCBpcyBhIHVzZWQgdG8gc2hvdyB0aGUgUGhvbmUgbnVtYmVyLlxyXG4gKlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgICAgIDxjb21tb24tcGhvbmUtbnVtYmVyIG5hbWU9J3Bob25lTnVtYmVyJ1xyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPSdkYXRhU2VydmljZS5mYWNBZG1pblBob25lTnVtYmVyJ1xyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPjwvY29tbW9uLXBob25lLW51bWJlcj5cclxuICogQGV4cG9ydFxyXG4gKi9cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvbW1vbi1waG9uZS1udW1iZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9waG9uZS1udW1iZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Bob25lLW51bWJlci5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFBob25lTnVtYmVyQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGb3JtQ29udHJvbCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHN0YXRpYyBQaG9uZU51bWJlclJlZ0V4ID0gJ15bMi05XXsxfVxcXFxkezJ9W1xcXFwtXT9cXFxcZHszfVtcXFxcLV0/XFxcXGR7NH0kJztcclxuICBASW5wdXQoKSBkaXNwbGF5TWFzazogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJ01vYmlsZSc7XHJcblxyXG4gIEBJbnB1dCgpIGFsbG93SW50ZXJuYXRpb25hbDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8vIFRPRE86IFJlbW92ZSBvbmNlIGFsbCBwcm9qZWN0IHVzaW5nIGxpYnJhcnkgcmVtb3ZlIHBsYWNlaG9sZGVycyAtLSBUZW1wb3Jhcnkgc29sdXRpb25cclxuICBASW5wdXQoKSBlbmFibGVQbGFjZUhvbGRlcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8vIFNldHRlci9nZXR0ZXIgZm9yIHdoZW4gbm90IHVzZWQgaW4gZm9ybSAoZXguIGRhdGEgZGlzbGF5ZWQgYnV0IG5vdCBlZGl0dGFibGUpXHJcbiAgQElucHV0KClcclxuICBzZXQgdmFsdWUoIHZhbDogc3RyaW5nICkge1xyXG4gICAgaWYgKCB2YWwgIT09IHVuZGVmaW5lZCApIHtcclxuICAgICAgdGhpcy5waG9uZU51bWJlciA9IHZhbDtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucGhvbmVOdW1iZXI7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIHB1YmxpYyBwaG9uZU51bWJlcjogc3RyaW5nID0gJyc7XHJcblxyXG4gIHB1YmxpYyBtYXNrOiBhbnk7XHJcbiAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcblxyXG4gIC8vIEFic3RhY3QgdmFyaWFibGUgZGVmaW5lZFxyXG4gIF9kZWZhdWx0RXJyTXNnOiBFcnJvck1lc3NhZ2UgPSB7XHJcbiAgICByZXF1aXJlZDogYCR7TGFiZWxSZXBsYWNlbWVudFRhZ30gaXMgcmVxdWlyZWQuYCxcclxuICAgIGluY29tcGxldGVWYWx1ZTogYCR7TGFiZWxSZXBsYWNlbWVudFRhZ30gZG9lcyBub3QgYXBwZWFyIHRvIGJlIHZhbGlkLmBcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBjb250cm9sRGlyOiBOZ0NvbnRyb2wpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBpZiAoY29udHJvbERpcikge1xyXG4gICAgICBjb250cm9sRGlyLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgIGNvbnN0IGludGVybmF0aW9uYWxQcmVmaXggPSAnKzEnO1xyXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMuZW5hYmxlUGxhY2VIb2xkZXIgPyAnKDU1NSkgNTU1LTU1NTUnIDogJyc7XHJcbiAgICB0aGlzLm1hc2sgPSBbJygnLCAvWzItOV0vLCBOVU1CRVIsIE5VTUJFUiwgJyknLCBTUEFDRSwgTlVNQkVSLCBOVU1CRVIsIE5VTUJFUiwgJy0nLCBOVU1CRVIsIE5VTUJFUiwgTlVNQkVSLCBOVU1CRVJdO1xyXG5cclxuICAgIGlmICh0aGlzLmFsbG93SW50ZXJuYXRpb25hbCkge1xyXG4gICAgICBpZiAoIHRoaXMucGxhY2Vob2xkZXIgKSB7XHJcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGAke2ludGVybmF0aW9uYWxQcmVmaXh9ICR7dGhpcy5wbGFjZWhvbGRlcn1gO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHByZWZpeEFycmF5T2ZDaGFyID0gaW50ZXJuYXRpb25hbFByZWZpeC5zcGxpdCgnJyk7IC8vIFsnKycsICcxJ11cclxuICAgICAgdGhpcy5tYXNrID0gWy4uLnByZWZpeEFycmF5T2ZDaGFyLCBTUEFDRSwgLi4udGhpcy5tYXNrXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZWdpc3RlciBzZWxmIHZhbGlkYXRpb25cclxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xyXG5cclxuICAgICAgaWYgKHRoaXMuY29udHJvbERpcikge1xyXG5cclxuICAgICAgICBjb25zdCBhbGxWYWxpZGF0b3JzID0gW3RoaXMudmFsaWRhdGVTZWxmLmJpbmQodGhpcyldO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xEaXIuY29udHJvbC52YWxpZGF0b3IpIHtcclxuICAgICAgICAgIGFsbFZhbGlkYXRvcnMucHVzaCh0aGlzLmNvbnRyb2xEaXIuY29udHJvbC52YWxpZGF0b3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbnRyb2xEaXIuY29udHJvbC5zZXRWYWxpZGF0b3JzKGFsbFZhbGlkYXRvcnMpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbERpci5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgc2V0UGhvbmVOdW1iZXIodmFsdWUpIHtcclxuICAgIHRoaXMucGhvbmVOdW1iZXIgPSB2YWx1ZTtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnBob25lTnVtYmVyKTtcclxuICAgIHRoaXMuX29uQ2hhbmdlKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIG9uQmx1ciggJGV2ZW50ICkge1xyXG4gICAgdGhpcy5fb25Ub3VjaGVkKCRldmVudCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAgKHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XHJcbiAgICAgIC8vIHBob25lTnVtYmVyIGlzIHdoZXJlIHRoZSBhY3R1YWwgZGF0YSBpcyBkaXNwbGF5ZWQgdG8gdXNlciBmb3IgdGhpc1xyXG4gICAgICAvLyBjb21wb25lbnRcclxuICAgICAgdGhpcy5waG9uZU51bWJlciA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVNlbGYoKSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucGhvbmVOdW1iZXI7XHJcbiAgICBjb25zdCBwaG9uZUxlbmd0aCA9IHRoaXMuYWxsb3dJbnRlcm5hdGlvbmFsID8gMTEgOiAxMDtcclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgY29uc3Qgc3RyaXBwZWQgPSB2YWx1ZVxyXG4gICAgICAgIC5yZXBsYWNlKC9fL2csICcnKSAvLyByZW1vdmUgdW5kZXJsaW5lc1xyXG4gICAgICAgIC5yZXBsYWNlKC9cXHMvZywgJycpIC8vIHNwYWNlc1xyXG4gICAgICAgIC5yZXBsYWNlKC9cXCt8LS9nLCAnJykgLy8gKyBvciAtIHN5bWJvbFxyXG4gICAgICAgIC5yZXBsYWNlKCcoJywgJycpXHJcbiAgICAgICAgLnJlcGxhY2UoJyknLCAnJyk7XHJcblxyXG4gICAgICBjb25zdCB2YWxpZCA9IHN0cmlwcGVkLmxlbmd0aCA9PT0gcGhvbmVMZW5ndGg7XHJcbiAgICAgIHJldHVybiB2YWxpZCA/IG51bGwgOiB7IGluY29tcGxldGVWYWx1ZTogdHJ1ZSB9O1xyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=