moh-common-lib
Version:
A library of Angular components, services, and styles for B.C. Government Ministry of Health (MoH).
150 lines • 12.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { replaceLabelTag } from './error-message.interface';
import { Input } from '@angular/core';
import { Base } from './base';
import { MoHCommonLibraryError } from '../../helpers/library-error';
// Class does not get exported - used internally
/**
* @abstract
*/
export class AbstractFormControl extends Base {
constructor() {
super(...arguments);
// Default messages - must be defined in each component
this._defaultErrMsg = {};
this.disabled = false;
// Required for implementing ControlValueAccessor
this._onChange = (/**
* @param {?} _
* @return {?}
*/
(_) => { });
this._onTouched = (/**
* @param {?=} _
* @return {?}
*/
(_) => { });
}
/**
* @return {?}
*/
ngOnInit() {
this.setErrorMsg();
}
// Register change function
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this._onChange = fn;
}
// Register touched function
/**
* @param {?} fn
* @return {?}
*/
registerOnTouched(fn) {
this._onTouched = fn;
}
// Disable control
/**
* @param {?} isDisabled
* @return {?}
*/
setDisabledState(isDisabled) {
this.disabled = isDisabled;
}
/**
* @protected
* @return {?}
*/
setErrorMsg() {
this.validateLabel();
// Some components have logic based off no label being submitted - strip off '(optional)'
/** @type {?} */
const _label = this.label ? this.label.replace(/\s*\(.*?\)\s*/g, '') : 'Field';
if (this.errorMessage) {
Object.keys(this.errorMessage).map((/**
* @param {?} x
* @return {?}
*/
x => this._defaultErrMsg[x] = this.errorMessage[x]));
}
// Replace label tags with label
Object.keys(this._defaultErrMsg).map((/**
* @param {?} x
* @return {?}
*/
x => this._defaultErrMsg[x] = replaceLabelTag(this._defaultErrMsg[x], _label)));
}
/**
* Register self validating method
* @protected
* @param {?} ngControl
* @param {?} fn function for validating self
* @return {?}
*/
registerValidation(ngControl, fn) {
// Register validateSelf validator so that it will be added on component initialization.
// Makes the component a self validating component.
return Promise.resolve().then((/**
* @return {?}
*/
() => {
if (ngControl) {
/** @type {?} */
const allValidators = [fn.bind(this)];
if (ngControl.control.validator) {
allValidators.push(ngControl.control.validator);
}
ngControl.control.setValidators(allValidators);
ngControl.control.updateValueAndValidity();
return ngControl;
}
}));
}
/**
* @private
* @return {?}
*/
validateLabel() {
/** @type {?} */
const labelType = typeof this.label;
// If labelType is falsy, do not throw the error, since we have a backup label in case it's falsy.
if (labelType !== 'string' && this.label) {
/** @type {?} */
const typeMsg = `<AbstractFormControl> Invalid input provided to [label]. Label must be a string and you provided a ${labelType}`;
throw new MoHCommonLibraryError(typeMsg);
}
}
}
AbstractFormControl.propDecorators = {
label: [{ type: Input }],
disabled: [{ type: Input }],
errorMessage: [{ type: Input }]
};
if (false) {
/** @type {?} */
AbstractFormControl.prototype._defaultErrMsg;
/** @type {?} */
AbstractFormControl.prototype.label;
/** @type {?} */
AbstractFormControl.prototype.disabled;
/** @type {?} */
AbstractFormControl.prototype.errorMessage;
/** @type {?} */
AbstractFormControl.prototype._onChange;
/** @type {?} */
AbstractFormControl.prototype._onTouched;
/**
* @abstract
* @param {?} value
* @return {?}
*/
AbstractFormControl.prototype.writeValue = function (value) { };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZm9ybS1jb250cm9sLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbW9oLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvbW9kZWxzL2Fic3RyYWN0LWZvcm0tY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFOUIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7O0FBR3BFLE1BQU0sT0FBZ0IsbUJBQW9CLFNBQVEsSUFBSTtJQUF0RDs7O1FBR1csbUJBQWMsR0FBaUIsRUFBRSxDQUFDO1FBS2xDLGFBQVEsR0FBWSxLQUFLLENBQUM7O1FBT25DLGNBQVM7Ozs7UUFBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUUsQ0FBQyxFQUFDO1FBQzNCLGVBQVU7Ozs7UUFBRyxDQUFDLENBQU8sRUFBRSxFQUFFLEdBQUUsQ0FBQyxFQUFDO0lBd0UvQixDQUFDOzs7O0lBckVDLFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQzs7Ozs7O0lBTUQsZ0JBQWdCLENBQUUsRUFBTztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDOzs7Ozs7SUFHRCxpQkFBaUIsQ0FBRSxFQUFPO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7Ozs7OztJQUdELGdCQUFnQixDQUFFLFVBQW1CO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzdCLENBQUM7Ozs7O0lBRVMsV0FBVztRQUNuQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7OztjQUdmLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBRSxnQkFBZ0IsRUFBRSxFQUFFLENBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTztRQUVoRixJQUFLLElBQUksQ0FBQyxZQUFZLEVBQUc7WUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRzs7OztZQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDMUY7UUFFRCxnQ0FBZ0M7UUFDaEMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRzs7OztRQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRyxNQUFNLENBQUUsRUFBRSxDQUFDO0lBQzNILENBQUM7Ozs7Ozs7O0lBT1Msa0JBQWtCLENBQUUsU0FBb0IsRUFBRSxFQUFvQjtRQUV0RSx3RkFBd0Y7UUFDeEYsbURBQW1EO1FBRW5ELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUk7OztRQUFDLEdBQUcsRUFBRTtZQUVqQyxJQUFLLFNBQVMsRUFBRzs7c0JBRVQsYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckMsSUFBSyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRztvQkFDakMsYUFBYSxDQUFDLElBQUksQ0FBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBRSxDQUFDO2lCQUNuRDtnQkFDRCxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDL0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUMzQyxPQUFPLFNBQVMsQ0FBQzthQUNsQjtRQUNILENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7SUFFTyxhQUFhOztjQUNiLFNBQVMsR0FBRyxPQUFPLElBQUksQ0FBQyxLQUFLO1FBQ25DLGtHQUFrRztRQUNsRyxJQUFJLFNBQVMsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTs7a0JBQ2xDLE9BQU8sR0FBRyx1R0FBdUcsU0FBUyxFQUFFO1lBQ2xJLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMxQztJQUNILENBQUM7OztvQkFqRkEsS0FBSzt1QkFFTCxLQUFLOzJCQUdMLEtBQUs7Ozs7SUFSTiw2Q0FBMkM7O0lBRzNDLG9DQUFnQzs7SUFFaEMsdUNBQW1DOztJQUduQywyQ0FBb0M7O0lBSXBDLHdDQUEyQjs7SUFDM0IseUNBQTZCOzs7Ozs7SUFRN0IsZ0VBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCByZXBsYWNlTGFiZWxUYWcgfSBmcm9tICcuL2Vycm9yLW1lc3NhZ2UuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSAnLi9iYXNlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTW9IQ29tbW9uTGlicmFyeUVycm9yIH0gZnJvbSAnLi4vLi4vaGVscGVycy9saWJyYXJ5LWVycm9yJztcclxuXHJcbi8vIENsYXNzIGRvZXMgbm90IGdldCBleHBvcnRlZCAtIHVzZWQgaW50ZXJuYWxseVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RGb3JtQ29udHJvbCBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgLy8gRGVmYXVsdCBtZXNzYWdlcyAtIG11c3QgYmUgZGVmaW5lZCBpbiBlYWNoIGNvbXBvbmVudFxyXG4gIGFic3RyYWN0IF9kZWZhdWx0RXJyTXNnOiBFcnJvck1lc3NhZ2UgPSB7fTtcclxuXHJcbiAgLy8gTXVzdCBiZSBkZWZpbmVkIGluIGNvbXBvbmVudCBhcyBkZWZhdWx0IGxhYmVscyBhcmUgc3BlY2lmaWMgdG8gY29tcG9uZW50XHJcbiAgQElucHV0KCkgYWJzdHJhY3QgbGFiZWw6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gSW5wdXQgdG8gYWxsb3cgZGV2ZWxvcGVycyB0byBjaGFuZ2UgZGVmYXVsdCBtZXNzYWdlc1xyXG4gIEBJbnB1dCgpIGVycm9yTWVzc2FnZTogRXJyb3JNZXNzYWdlO1xyXG5cclxuXHJcbiAgLy8gUmVxdWlyZWQgZm9yIGltcGxlbWVudGluZyBDb250cm9sVmFsdWVBY2Nlc3NvclxyXG4gIF9vbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xyXG4gIF9vblRvdWNoZWQgPSAoXz86IGFueSkgPT4ge307XHJcblxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0RXJyb3JNc2coKTtcclxuICB9XHJcblxyXG4gIC8vIFJlcXVpcmVkIGZvciBpbXBsZW1lbnRpbmcgQ29udHJvbFZhbHVlQWNjZXNzb3JcclxuICBhYnN0cmFjdCB3cml0ZVZhbHVlKCB2YWx1ZTogYW55ICk6IHZvaWQ7XHJcblxyXG4gIC8vIFJlZ2lzdGVyIGNoYW5nZSBmdW5jdGlvblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoIGZuOiBhbnkgKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgLy8gUmVnaXN0ZXIgdG91Y2hlZCBmdW5jdGlvblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKCBmbjogYW55ICk6IHZvaWQge1xyXG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICAvLyBEaXNhYmxlIGNvbnRyb2xcclxuICBzZXREaXNhYmxlZFN0YXRlKCBpc0Rpc2FibGVkOiBib29sZWFuICk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0RXJyb3JNc2coKSB7XHJcbiAgICB0aGlzLnZhbGlkYXRlTGFiZWwoKTtcclxuXHJcbiAgICAvLyBTb21lIGNvbXBvbmVudHMgaGF2ZSBsb2dpYyBiYXNlZCBvZmYgbm8gbGFiZWwgYmVpbmcgc3VibWl0dGVkIC0gc3RyaXAgb2ZmICcob3B0aW9uYWwpJ1xyXG4gICAgY29uc3QgX2xhYmVsID0gdGhpcy5sYWJlbCA/IHRoaXMubGFiZWwucmVwbGFjZSggL1xccypcXCguKj9cXClcXHMqL2csICcnICkgOiAnRmllbGQnO1xyXG5cclxuICAgIGlmICggdGhpcy5lcnJvck1lc3NhZ2UgKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZXJyb3JNZXNzYWdlKS5tYXAoIHggPT4gdGhpcy5fZGVmYXVsdEVyck1zZ1t4XSA9IHRoaXMuZXJyb3JNZXNzYWdlW3hdICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVwbGFjZSBsYWJlbCB0YWdzIHdpdGggbGFiZWxcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuX2RlZmF1bHRFcnJNc2cpLm1hcCggeCA9PiB0aGlzLl9kZWZhdWx0RXJyTXNnW3hdID0gcmVwbGFjZUxhYmVsVGFnKCB0aGlzLl9kZWZhdWx0RXJyTXNnW3hdICwgX2xhYmVsICkgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdGVyIHNlbGYgdmFsaWRhdGluZyBtZXRob2RcclxuICAgKiBAcGFyYW0gY29udHJvbCBjb250cm9sIGRpcmVjdGl2ZVxyXG4gICAqIEBwYXJhbSBmbiBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBzZWxmXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHJlZ2lzdGVyVmFsaWRhdGlvbiggbmdDb250cm9sOiBOZ0NvbnRyb2wsIGZuOiBWYWxpZGF0aW9uRXJyb3JzKSB7XHJcblxyXG4gICAgLy8gUmVnaXN0ZXIgdmFsaWRhdGVTZWxmIHZhbGlkYXRvciBzbyB0aGF0IGl0IHdpbGwgYmUgYWRkZWQgb24gY29tcG9uZW50IGluaXRpYWxpemF0aW9uLlxyXG4gICAgLy8gTWFrZXMgdGhlIGNvbXBvbmVudCBhIHNlbGYgdmFsaWRhdGluZyBjb21wb25lbnQuXHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xyXG5cclxuICAgICAgaWYgKCBuZ0NvbnRyb2wgKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGFsbFZhbGlkYXRvcnMgPSBbZm4uYmluZCh0aGlzKV07XHJcbiAgICAgICAgaWYgKCBuZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IgKSB7XHJcbiAgICAgICAgICBhbGxWYWxpZGF0b3JzLnB1c2goIG5nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvciApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZ0NvbnRyb2wuY29udHJvbC5zZXRWYWxpZGF0b3JzKGFsbFZhbGlkYXRvcnMpO1xyXG4gICAgICAgIG5nQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICByZXR1cm4gbmdDb250cm9sO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVMYWJlbCgpIHtcclxuICAgIGNvbnN0IGxhYmVsVHlwZSA9IHR5cGVvZiB0aGlzLmxhYmVsO1xyXG4gICAgLy8gSWYgbGFiZWxUeXBlIGlzIGZhbHN5LCBkbyBub3QgdGhyb3cgdGhlIGVycm9yLCBzaW5jZSB3ZSBoYXZlIGEgYmFja3VwIGxhYmVsIGluIGNhc2UgaXQncyBmYWxzeS5cclxuICAgIGlmIChsYWJlbFR5cGUgIT09ICdzdHJpbmcnICYmIHRoaXMubGFiZWwpIHtcclxuICAgICAgY29uc3QgdHlwZU1zZyA9IGA8QWJzdHJhY3RGb3JtQ29udHJvbD4gSW52YWxpZCBpbnB1dCBwcm92aWRlZCB0byBbbGFiZWxdLiAgTGFiZWwgbXVzdCBiZSBhIHN0cmluZyBhbmQgeW91IHByb3ZpZGVkIGEgJHtsYWJlbFR5cGV9YDtcclxuICAgICAgdGhyb3cgbmV3IE1vSENvbW1vbkxpYnJhcnlFcnJvcih0eXBlTXNnKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19