UNPKG

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
/** * @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=