moh-common-lib
Version:
A library of Angular components, services, and styles for B.C. Government Ministry of Health (MoH).
177 lines • 16.7 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 { CANADA } from '../country/country.component';
import { AbstractFormControl } from '../../models/abstract-form-control';
import { LabelReplacementTag } from '../../models/error-message.interface';
/** @type {?} */
export const BRITISH_COLUMBIA = 'BC';
/**
* @record
*/
export function ProvinceList() { }
if (false) {
/** @type {?} */
ProvinceList.prototype.provinceCode;
/** @type {?} */
ProvinceList.prototype.description;
/** @type {?} */
ProvinceList.prototype.country;
}
/** @type {?} */
export const PROVINCE_LIST = [
{ provinceCode: 'AB', description: 'Alberta', country: CANADA },
{ provinceCode: 'BC', description: 'British Columbia', country: CANADA },
{ provinceCode: 'MB', description: 'Manitoba', country: CANADA },
{ provinceCode: 'NB', description: 'New Brunswick', country: CANADA },
{ provinceCode: 'NL', description: 'Newfoundland and Labrador', country: CANADA },
{ provinceCode: 'NS', description: 'Nova Scotia', country: CANADA },
{ provinceCode: 'ON', description: 'Ontario', country: CANADA },
{ provinceCode: 'PE', description: 'Prince Edward Island', country: CANADA },
{ provinceCode: 'QC', description: 'Quebec', country: CANADA },
{ provinceCode: 'SK', description: 'Saskatchewan', country: CANADA },
{ provinceCode: 'NT', description: 'Northwest Territories', country: CANADA },
{ provinceCode: 'NU', description: 'Nunavut', country: CANADA },
{ provinceCode: 'YT', description: 'Yukon', country: CANADA }
];
/**
* @param {?} provinceCode
* @return {?}
*/
export function getProvinceDescription(provinceCode) {
/** @type {?} */
const provObj = PROVINCE_LIST.find((/**
* @param {?} val
* @return {?}
*/
val => provinceCode === val.provinceCode && CANADA === val.country));
return provObj ? provObj.description : provinceCode;
}
export class ProvinceComponent extends AbstractFormControl {
/**
* @param {?} controlDir
*/
constructor(controlDir) {
super();
this.controlDir = controlDir;
this.label = 'Province';
this.provinceList = PROVINCE_LIST;
this.labelforId = 'province_' + this.objectId;
this.required = false;
this.placeholder = 'Please select a province';
this.maxlength = '250';
this.useDropDownList = true;
this.valueChange = new EventEmitter();
this.blur = new EventEmitter();
this._defaultErrMsg = {
required: LabelReplacementTag + ' is required.',
invalidChar: LabelReplacementTag + ' must contain letters and may include special characters such as hyphens, ' +
'periods, apostrophes and blank characters.'
};
if (controlDir) {
controlDir.valueAccessor = this;
}
}
/**
* @param {?} val
* @return {?}
*/
set value(val) {
if (val) {
this.province = val;
}
}
/**
* @return {?}
*/
get value() {
return this.province;
}
/**
* @return {?}
*/
ngOnInit() {
super.ngOnInit();
}
/**
* @param {?} value
* @return {?}
*/
onValueChange(value) {
if (value !== this.province) {
this._onChange(value);
this.valueChange.emit(value);
this.province = value;
}
}
/**
* @param {?} event
* @return {?}
*/
onBlur(event) {
this._onTouched(event);
this.blur.emit(event);
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
if (value !== undefined) {
this.province = value;
}
}
}
ProvinceComponent.decorators = [
{ type: Component, args: [{
selector: 'common-province',
template: "<label for=\"{{labelforId}}\" class=\"control-label\">{{label}}</label>\r\n\r\n<div *ngIf=\"useDropDownList; else NotDropDownList\">\r\n <ng-select [items]=\"provinceList\"\r\n [ngModel]=\"province\"\r\n (ngModelChange)=\"onValueChange($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n labelForId=\"{{labelforId}}\"\r\n bindValue=\"provinceCode\"\r\n bindLabel=\"description\"\r\n [clearable]=\"!required\"\r\n placeholder=\"{{ placeholder }}\"></ng-select>\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 {{_defaultErrMsg.required}}\r\n </div>\r\n <div *ngIf=\"controlDir?.errors?.invalidChar\">\r\n {{_defaultErrMsg.invalidChar}}\r\n </div>\r\n</common-error-container>\r\n\r\n<ng-template #NotDropDownList>\r\n <input class=\"form-control\"\r\n spellcheck=\"false\"\r\n type=\"text\"\r\n id=\"{{labelforId}}\"\r\n [value]=\"province\"\r\n (change)=\"onValueChange($event.target.value)\"\r\n (blur)=\"onBlur($event)\"\r\n [disabled]=\"disabled\"\r\n [attr.maxlength]=\"maxlength\"\r\n [placeholder]=\"placeholder\"\r\n autocomplete=\"off\"/>\r\n</ng-template>\r\n",
styles: [""]
}] }
];
/** @nocollapse */
ProvinceComponent.ctorParameters = () => [
{ type: NgControl, decorators: [{ type: Optional }, { type: Self }] }
];
ProvinceComponent.propDecorators = {
label: [{ type: Input }],
provinceList: [{ type: Input }],
labelforId: [{ type: Input }],
required: [{ type: Input }],
placeholder: [{ type: Input }],
maxlength: [{ type: Input }],
useDropDownList: [{ type: Input }],
value: [{ type: Input }],
valueChange: [{ type: Output }],
blur: [{ type: Output }]
};
if (false) {
/** @type {?} */
ProvinceComponent.prototype.label;
/** @type {?} */
ProvinceComponent.prototype.provinceList;
/** @type {?} */
ProvinceComponent.prototype.labelforId;
/** @type {?} */
ProvinceComponent.prototype.required;
/** @type {?} */
ProvinceComponent.prototype.placeholder;
/** @type {?} */
ProvinceComponent.prototype.maxlength;
/** @type {?} */
ProvinceComponent.prototype.useDropDownList;
/** @type {?} */
ProvinceComponent.prototype.valueChange;
/** @type {?} */
ProvinceComponent.prototype.blur;
/** @type {?} */
ProvinceComponent.prototype.province;
/** @type {?} */
ProvinceComponent.prototype._defaultErrMsg;
/** @type {?} */
ProvinceComponent.prototype.controlDir;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmluY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbW9oLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9wcm92aW5jZS9wcm92aW5jZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBZ0IsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFFekYsTUFBTSxPQUFPLGdCQUFnQixHQUFHLElBQUk7Ozs7QUFDcEMsa0NBSUM7OztJQUhDLG9DQUFxQjs7SUFDckIsbUNBQW9COztJQUNwQiwrQkFBZ0I7OztBQUdsQixNQUFNLE9BQU8sYUFBYSxHQUFtQjtJQUMzQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0lBQy9ELEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtJQUN4RSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0lBQ2hFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7SUFDckUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSwyQkFBMkIsRUFBRSxPQUFPLEVB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QUFLLENBQUM7U0FDdkI7SUFDSCxDQUFDOzs7OztJQUVELE1BQU0sQ0FBRSxLQUFVO1FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUUsS0FBSyxDQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUUsS0FBSyxDQUFFLENBQUM7SUFDMUIsQ0FBQzs7Ozs7SUFFRCxVQUFVLENBQUUsS0FBVTtRQUNwQixJQUFLLEtBQUssS0FBSyxTQUFTLEVBQUc7WUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7U0FDdkI7SUFDSCxDQUFDOzs7WUFoRUYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLDBnREFBd0M7O2FBRXpDOzs7O1lBckNRLFNBQVMsdUJBcUVGLFFBQVEsWUFBSSxJQUFJOzs7b0JBN0I3QixLQUFLOzJCQUNMLEtBQUs7eUJBQ0wsS0FBSzt1QkFDTCxLQUFLOzBCQUNMLEtBQUs7d0JBQ0wsS0FBSzs4QkFDTCxLQUFLO29CQUNMLEtBQUs7MEJBVUwsTUFBTTttQkFDTixNQUFNOzs7O0lBbEJQLGtDQUFvQzs7SUFDcEMseUNBQXNEOztJQUN0RCx1Q0FBMEQ7O0lBQzFELHFDQUFtQzs7SUFDbkMsd0NBQTBEOztJQUMxRCxzQ0FBbUM7O0lBQ25DLDRDQUF5Qzs7SUFXekMsd0NBQXlFOztJQUN6RSxpQ0FBNEQ7O0lBRTVELHFDQUFpQjs7SUFFakIsMkNBSUU7O0lBR1csdUNBQWdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9wdGlvbmFsLCBTZWxmLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDQU5BREEgfSBmcm9tICcuLi9jb3VudHJ5L2NvdW50cnkuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWJzdHJhY3RGb3JtQ29udHJvbCB9IGZyb20gJy4uLy4uL21vZGVscy9hYnN0cmFjdC1mb3JtLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UsIExhYmVsUmVwbGFjZW1lbnRUYWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvZXJyb3ItbWVzc2FnZS5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IEJSSVRJU0hfQ09MVU1CSUEgPSAnQkMnO1xyXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpbmNlTGlzdCB7XHJcbiAgcHJvdmluY2VDb2RlOiBzdHJpbmc7XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICBjb3VudHJ5OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBQUk9WSU5DRV9MSVNUOiBQcm92aW5jZUxpc3RbXSA9IFtcclxuICB7IHByb3ZpbmNlQ29kZTogJ0FCJywgZGVzY3JpcHRpb246ICdBbGJlcnRhJywgY291bnRyeTogQ0FOQURBIH0sXHJcbiAgeyBwcm92aW5jZUNvZGU6ICdCQycsIGRlc2NyaXB0aW9uOiAnQnJpdGlzaCBDb2x1bWJpYScsIGNvdW50cnk6IENBTkFEQSB9LFxyXG4gIHsgcHJvdmluY2VDb2RlOiAnTUInLCBkZXNjcmlwdGlvbjogJ01hbml0b2JhJywgY291bnRyeTogQ0FOQURBIH0sXHJcbiAgeyBwcm92aW5jZUNvZGU6ICdOQicsIGRlc2NyaXB0aW9uOiAnTmV3IEJydW5zd2ljaycsIGNvdW50cnk6IENBTkFEQSB9LFxyXG4gIHsgcHJvdmluY2VDb2RlOiAnTkwnLCBkZXNjcmlwdGlvbjogJ05ld2ZvdW5kbGFuZCBhbmQgTGFicmFkb3InLCBjb3VudHJ5OiBDQU5BREEgfSxcclxuICB7IHByb3ZpbmNlQ29kZTogJ05TJywgZGVzY3JpcHRpb246ICdOb3ZhIFNjb3RpYScsIGNvdW50cnk6IENBTkFEQSB9LFxyXG4gIHsgcHJvdmluY2VDb2RlOiAnT04nLCBkZXNjcmlwdGlvbjogJ09udGFyaW8nLCBjb3VudHJ5OiBDQU5BREEgfSxcclxuICB7IHByb3ZpbmNlQ29kZTogJ1BFJywgZGVzY3JpcHRpb246ICdQcmluY2UgRWR3YXJkIElzbGFuZCcsIGNvdW50cnk6IENBTkFEQSB9LFxyXG4gIHsgcHJvdmluY2VDb2RlOiAnUUMnLCBkZXNjcmlwdGlvbjogJ1F1ZWJlYycsIGNvdW50cnk6IENBTkFEQSB9LFxyXG4gIHsgcHJvdmluY2VDb2RlOiAnU0snLCBkZXNjcmlwdGlvbjogJ1Nhc2thdGNoZXdhbicsIGNvdW50cnk6IENBTkFEQSB9LFxyXG4gIHsgcHJvdmluY2VDb2RlOiAnTlQnLCBkZXNjcmlwdGlvbjogJ05vcnRod2VzdCBUZXJyaXRvcmllcycsIGNvdW50cnk6IENBTkFEQSB9LFxyXG4gIHsgcHJvdmluY2VDb2RlOiAnTlUnLCBkZXNjcmlwdGlvbjogJ051bmF2dXQnLCBjb3VudHJ5OiBDQU5BREEgfSxcclxuICB7IHByb3ZpbmNlQ29kZTogJ1lUJywgZGVzY3JpcHRpb246ICdZdWtvbicsIGNvdW50cnk6IENBTkFEQSB9XHJcbl07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvdmluY2VEZXNjcmlwdGlvbiggcHJvdmluY2VDb2RlOiBzdHJpbmcgKSB7XHJcbiAgY29uc3QgcHJvdk9iaiA9IFBST1ZJTkNFX0xJU1QuZmluZCggdmFsID0+IHByb3ZpbmNlQ29kZSA9PT0gdmFsLnByb3ZpbmNlQ29kZSAmJiBDQU5BREEgPT09IHZhbC5jb3VudHJ5ICk7XHJcbiAgcmV0dXJuIHByb3ZPYmogPyBwcm92T2JqLmRlc2NyaXB0aW9uIDogcHJvdmluY2VDb2RlO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvbW1vbi1wcm92aW5jZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb3ZpbmNlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wcm92aW5jZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm92aW5jZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Rm9ybUNvbnRyb2wgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJ1Byb3ZpbmNlJztcclxuICBASW5wdXQoKSBwcm92aW5jZUxpc3Q6IFByb3ZpbmNlTGlzdFtdID0gUFJPVklOQ0VfTElTVDtcclxuICBASW5wdXQoKSBsYWJlbGZvcklkOiBzdHJpbmcgPSAncHJvdmluY2VfJyArIHRoaXMub2JqZWN0SWQ7XHJcbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1BsZWFzZSBzZWxlY3QgYSBwcm92aW5jZSc7XHJcbiAgQElucHV0KCkgbWF4bGVuZ3RoOiBzdHJpbmcgPSAnMjUwJztcclxuICBASW5wdXQoKSB1c2VEcm9wRG93bkxpc3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHZhbHVlKCB2YWw6IHN0cmluZyApIHtcclxuICAgIGlmICggdmFsICkge1xyXG4gICAgICB0aGlzLnByb3ZpbmNlID0gdmFsO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgdmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm92aW5jZTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgYmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHJvdmluY2U6IHN0cmluZztcclxuXHJcbiAgX2RlZmF1bHRFcnJNc2c6IEVycm9yTWVzc2FnZSA9IHtcclxuICAgIHJlcXVpcmVkOiBMYWJlbFJlcGxhY2VtZW50VGFnICsgJyBpcyByZXF1aXJlZC4nLFxyXG4gICAgaW52YWxpZENoYXI6IExhYmVsUmVwbGFjZW1lbnRUYWcgKyAnIG11c3QgY29udGFpbiBsZXR0ZXJzIGFuZCBtYXkgaW5jbHVkZSBzcGVjaWFsIGNoYXJhY3RlcnMgc3VjaCBhcyBoeXBoZW5zLCAnICtcclxuICAgICAgICAgICAgICAgICAncGVyaW9kcywgYXBvc3Ryb3BoZXMgYW5kIGJsYW5rIGNoYXJhY3RlcnMuJ1xyXG4gIH07XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvciggQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgY29udHJvbERpcjogTmdDb250cm9sICkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIGlmICggY29udHJvbERpciApIHtcclxuICAgICAgY29udHJvbERpci52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICB9XHJcblxyXG4gIG9uVmFsdWVDaGFuZ2UoIHZhbHVlOiBhbnkgKSB7XHJcbiAgICBpZiAoIHZhbHVlICE9PSB0aGlzLnByb3ZpbmNlICkge1xyXG4gICAgICB0aGlzLl9vbkNoYW5nZSggdmFsdWUgKTtcclxuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KCB2YWx1ZSApO1xyXG4gICAgICB0aGlzLnByb3ZpbmNlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoIGV2ZW50OiBhbnkgKSB7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQoIGV2ZW50ICk7XHJcbiAgICB0aGlzLmJsdXIuZW1pdCggZXZlbnQgKTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUoIHZhbHVlOiBhbnkgKTogdm9pZCB7XHJcbiAgICBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XHJcbiAgICAgIHRoaXMucHJvdmluY2UgPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19