UNPKG

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