UNPKG

moh-common-lib

Version:

A library of Angular components, services, and styles for B.C. Government Ministry of Health (MoH).

158 lines 13.4 kB
/** * @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 NameComponent extends AbstractFormControl { /** * @param {?} controlDir */ constructor(controlDir) { super(); this.controlDir = controlDir; this.disabled = false; this.label = 'Name'; this.maxlength = '255'; this.labelforId = 'name_' + this.objectId; this.required = false; this.valueChange = new EventEmitter(); this.blur = new EventEmitter(); this.nameStr = ''; this._defaultErrMsg = { required: `${LabelReplacementTag} is required.`, invalid: LabelReplacementTag + ' must begin with a letter and cannot include special ' + 'characters except hyphens, periods, apostrophes and blank characters.', invalidChar: `${LabelReplacementTag} must be a letter.` // for Initials when maxlength is 1 }; if (controlDir) { controlDir.valueAccessor = this; } } /** * @param {?} val * @return {?} */ set value(val) { if (val) { this.nameStr = val; } } /** * @return {?} */ get value() { return this.nameStr; } /** * @return {?} */ ngOnInit() { super.ngOnInit(); this.registerValidation(this.controlDir, this.validateSelf); } /** * @param {?} value * @return {?} */ onValueChange(value) { this.nameStr = 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.nameStr = value; } } /** * @return {?} */ get maxLenAsNumber() { return Number.parseInt(this.maxlength, 10); } /** * @private * @return {?} */ validateSelf() { /** @type {?} */ const maxlen = Number.parseInt(this.maxlength, 10); if (this.nameStr) { if (maxlen > 1) { // Valid characters for name /** @type {?} */ const criteria = RegExp('^[a-zA-Z][a-zA-Z\-.\' ]*$'); return criteria.test(this.nameStr) ? null : { 'invalid': true }; } else { // Only letters for initials /** @type {?} */ const letters = RegExp('[a-zA-Z]*$'); return letters.test(this.nameStr) ? null : { 'invalidChar': true }; } } return null; } } NameComponent.decorators = [ { type: Component, args: [{ selector: 'common-name', 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]=\"nameStr\"\r\n (change)=\"onValueChange( $event.target.value )\"\r\n (blur)=\"onBlur( $event )\"\r\n [disabled]=\"disabled\"\r\n [attr.maxlength]=\"maxlength\"\r\n [required]=\"required\"\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?.invalid\">\r\n {{_defaultErrMsg.invalid}}\r\n </div>\r\n <div *ngIf=\"controlDir?.errors?.invalidChar\">\r\n {{_defaultErrMsg.invalidChar}}\r\n </div>\r\n</common-error-container>\r\n", styles: [".form-group{margin-bottom:1.5rem}"] }] } ]; /** @nocollapse */ NameComponent.ctorParameters = () => [ { type: NgControl, decorators: [{ type: Optional }, { type: Self }] } ]; NameComponent.propDecorators = { disabled: [{ type: Input }], label: [{ type: Input }], maxlength: [{ type: Input }], labelforId: [{ type: Input }], required: [{ type: Input }], value: [{ type: Input }], valueChange: [{ type: Output }], blur: [{ type: Output }] }; if (false) { /** @type {?} */ NameComponent.prototype.disabled; /** @type {?} */ NameComponent.prototype.label; /** @type {?} */ NameComponent.prototype.maxlength; /** @type {?} */ NameComponent.prototype.labelforId; /** @type {?} */ NameComponent.prototype.required; /** @type {?} */ NameComponent.prototype.valueChange; /** @type {?} */ NameComponent.prototype.blur; /** @type {?} */ NameComponent.prototype.nameStr; /** @type {?} */ NameComponent.prototype._defaultErrMsg; /** @type {?} */ NameComponent.prototype.controlDir; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9tb2gtY29tbW9uLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL25hbWUvbmFtZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osTUFBTSxFQUNOLFlBQVksRUFDTCxNQUFNLGVBQWUsQ0FBQztBQUMvQixPQUFPLEVBQXdCLFNBQVMsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQWdCLE1BQU0sc0NBQXNDLENBQUM7Ozs7QUFVekYsTUFBTSxPQUFPLGFBQWMsU0FBUSxtQkFBbUI7Ozs7SUErQnBELFlBQXdDLFVBQXFCO1FBQzNELEtBQUssRUFBRSxDQUFDO1FBRDhCLGVBQVUsR0FBVixVQUFVLENBQVc7UUE3QnBELGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsVUFBSyxHQUFXLE1BQU0sQ0FBQztRQUN2QixjQUFTLEdBQVcsS0FBSyxDQUFDO1FBQzFCLGVBQVUsR0FBVyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM3QyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBWXpCLGdCQUFXLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDL0QsU0FBSSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXJELFlBQU8sR0FBVyxFQUFFLENBQUM7UUFFNUIsbUJBQWMsR0FBaUI7WUFDN0IsUUFBUSxFQUFFLEdBQUcsbUJBQW1CLGVBQWU7WUFDL0MsT0FBTyxFQUFFLG1CQUFtQixHQUFHLHVEQUF1RDtnQkFDcEYsdUVBQXVFO1lBQ3pFLFdBQVcsRUFBRSxHQUFHLG1CQUFtQixvQkFBb0IsQ0FBQyxtQ0FBbUM7U0FDNUYsQ0FBQztRQUtBLElBQUssVUFBVSxFQUFHO1lBQ2hCLFVBQVUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQzs7Ozs7SUE1QkQsSUFDSSxLQUFLLENBQUUsR0FBVztRQUNwQixJQUFLLEdBQUcsRUFBRztZQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQzs7OztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDOzs7O0lBc0JELFFBQVE7UUFDTixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLGtCQUFrQixDQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBRSxDQUFDO0lBQ2hFLENBQUM7Ozs7O0lBRUQsYUFBYSxDQUFFLEtBQVU7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBRSxLQUFLLENBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBRSxLQUFLLENBQUUsQ0FBQztJQUNqQyxDQUFDOzs7OztJQUVELE1BQU0sQ0FBRSxLQUFVO1FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUUsS0FBSyxDQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUUsQ0FBQztJQUN2QyxDQUFDOzs7OztJQUVELFVBQVUsQ0FBRSxLQUFVO1FBQ3BCLElBQUssS0FBSyxFQUFHO1lBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7U0FDdEI7SUFDSCxDQUFDOzs7O0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBRSxDQUFDO0lBQy9DLENBQUM7Ozs7O0lBRU8sWUFBWTs7Y0FFWixNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBRTtRQUNwRCxJQUFLLElBQUksQ0FBQyxPQUFPLEVBQUc7WUFDbEIsSUFBSyxNQUFNLEdBQUcsQ0FBQyxFQUFHOzs7c0JBRVYsUUFBUSxHQUFXLE1BQU0sQ0FBRSwyQkFBMkIsQ0FBRTtnQkFDOUQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFFLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNuRTtpQkFBTTs7O3NCQUdDLE9BQU8sR0FBVyxNQUFNLENBQUUsWUFBWSxDQUFFO2dCQUM5QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ3RFO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7OztZQXRGSCxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLHk3QkFBb0M7O2FBRXJDOzs7O1lBWDhCLFNBQVMsdUJBMkN4QixRQUFRLFlBQUksSUFBSTs7O3VCQTdCN0IsS0FBSztvQkFDTCxLQUFLO3dCQUNMLEtBQUs7eUJBQ0wsS0FBSzt1QkFDTCxLQUFLO29CQUVMLEtBQUs7MEJBVUwsTUFBTTttQkFDTixNQUFNOzs7O0lBakJQLGlDQUFtQzs7SUFDbkMsOEJBQWdDOztJQUNoQyxrQ0FBbUM7O0lBQ25DLG1DQUFzRDs7SUFDdEQsaUNBQW1DOztJQVluQyxvQ0FBeUU7O0lBQ3pFLDZCQUE0RDs7SUFFNUQsZ0NBQTRCOztJQUU1Qix1Q0FLRTs7SUFHVyxtQ0FBZ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPcHRpb25hbCxcclxuICBTZWxmLFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWJzdHJhY3RGb3JtQ29udHJvbCB9IGZyb20gJy4uLy4uL21vZGVscy9hYnN0cmFjdC1mb3JtLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyBMYWJlbFJlcGxhY2VtZW50VGFnLCBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvZXJyb3ItbWVzc2FnZS5pbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIFRPRE8gRE9DVU1FTlQgTkVFRCBUTyBVU0UgTkdNT0RFTCBGT1IgUkVRVUlSRUQgVE8gV09SSy4gQWxzbyB0ZXN0IHdpdGggcmVhY3RpdmUgZm9ybXMgdG8gc2VlIGlmIHN0aWxsIG5lY1xyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb21tb24tbmFtZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25hbWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25hbWUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmFtZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Rm9ybUNvbnRyb2wgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJ05hbWUnO1xyXG4gIEBJbnB1dCgpIG1heGxlbmd0aDogc3RyaW5nID0gJzI1NSc7XHJcbiAgQElucHV0KCkgbGFiZWxmb3JJZDogc3RyaW5nID0gJ25hbWVfJyArIHRoaXMub2JqZWN0SWQ7XHJcbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgdmFsdWUoIHZhbDogc3RyaW5nICkge1xyXG4gICAgaWYgKCB2YWwgKSB7XHJcbiAgICAgIHRoaXMubmFtZVN0ciA9IHZhbDtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmFtZVN0cjtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgYmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHVibGljIG5hbWVTdHI6IHN0cmluZyA9ICcnO1xyXG5cclxuICBfZGVmYXVsdEVyck1zZzogRXJyb3JNZXNzYWdlID0ge1xyXG4gICAgcmVxdWlyZWQ6IGAke0xhYmVsUmVwbGFjZW1lbnRUYWd9IGlzIHJlcXVpcmVkLmAsXHJcbiAgICBpbnZhbGlkOiBMYWJlbFJlcGxhY2VtZW50VGFnICsgJyBtdXN0IGJlZ2luIHdpdGggYSBsZXR0ZXIgYW5kIGNhbm5vdCBpbmNsdWRlIHNwZWNpYWwgJyArXHJcbiAgICAgICdjaGFyYWN0ZXJzIGV4Y2VwdCBoeXBoZW5zLCBwZXJpb2RzLCBhcG9zdHJvcGhlcyBhbmQgYmxhbmsgY2hhcmFjdGVycy4nLFxyXG4gICAgaW52YWxpZENoYXI6IGAke0xhYmVsUmVwbGFjZW1lbnRUYWd9IG11c3QgYmUgYSBsZXR0ZXIuYCAvLyBmb3IgSW5pdGlhbHMgd2hlbiBtYXhsZW5ndGggaXMgMVxyXG4gIH07XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvciggQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgY29udHJvbERpcjogTmdDb250cm9sICkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIGlmICggY29udHJvbERpciApIHtcclxuICAgICAgY29udHJvbERpci52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICB0aGlzLnJlZ2lzdGVyVmFsaWRhdGlvbiggdGhpcy5jb250cm9sRGlyLCB0aGlzLnZhbGlkYXRlU2VsZiApO1xyXG4gIH1cclxuXHJcbiAgb25WYWx1ZUNoYW5nZSggdmFsdWU6IGFueSApIHtcclxuICAgIHRoaXMubmFtZVN0ciA9IHZhbHVlO1xyXG4gICAgdGhpcy5fb25DaGFuZ2UoIHZhbHVlICk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoIHZhbHVlICk7XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoIGV2ZW50OiBhbnkgKSB7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQoIGV2ZW50ICk7XHJcbiAgICB0aGlzLmJsdXIuZW1pdCggZXZlbnQudGFyZ2V0LnZhbHVlICk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKCB2YWx1ZTogYW55ICk6IHZvaWQge1xyXG4gICAgaWYgKCB2YWx1ZSApIHtcclxuICAgICAgdGhpcy5uYW1lU3RyID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbWF4TGVuQXNOdW1iZXIoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBOdW1iZXIucGFyc2VJbnQoIHRoaXMubWF4bGVuZ3RoLCAxMCApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVNlbGYoKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG5cclxuICAgIGNvbnN0IG1heGxlbiA9IE51bWJlci5wYXJzZUludCggdGhpcy5tYXhsZW5ndGgsIDEwICk7XHJcbiAgICBpZiAoIHRoaXMubmFtZVN0ciApIHtcclxuICAgICAgaWYgKCBtYXhsZW4gPiAxICkge1xyXG4gICAgICAgIC8vIFZhbGlkIGNoYXJhY3RlcnMgZm9yIG5hbWVcclxuICAgICAgICBjb25zdCBjcml0ZXJpYTogUmVnRXhwID0gUmVnRXhwKCAnXlthLXpBLVpdW2EtekEtWlxcLS5cXCcgXSokJyApO1xyXG4gICAgICAgIHJldHVybiBjcml0ZXJpYS50ZXN0KCB0aGlzLm5hbWVTdHIgKSA/IG51bGwgOiB7ICdpbnZhbGlkJzogdHJ1ZSB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyBPbmx5IGxldHRlcnMgZm9yIGluaXRpYWxzXHJcbiAgICAgICAgY29uc3QgbGV0dGVyczogUmVnRXhwID0gUmVnRXhwKCAnW2EtekEtWl0qJCcgKTtcclxuICAgICAgICByZXR1cm4gbGV0dGVycy50ZXN0KCB0aGlzLm5hbWVTdHIgKSA/IG51bGwgOiB7ICdpbnZhbGlkQ2hhcic6IHRydWUgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgIH1cclxuXHJcbn1cclxuIl19