UNPKG

@uiowa/uiowa-mfk-material

Version:

mfk, uiowa-mfk

191 lines 16.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, Output, EventEmitter, ViewChildren, QueryList } from '@angular/core'; import { Mfk } from '../models/mfk'; import { UiowaMfkOptionsService } from '../services/uiowa-mfk-options.service'; import { DigitOnlyDirective } from '@uiowa/digit-only'; export class MfkInputComponent { /** * @param {?} optionsService */ constructor(optionsService) { this.optionsService = optionsService; this._mfk = new Mfk(); this.options = []; this.mfkChange = new EventEmitter(); } /** * @param {?} mfk * @return {?} */ set mfk(mfk) { this.options .filter((/** * @param {?} o * @return {?} */ o => o.defaultValue)) .forEach((/** * @param {?} o * @return {?} */ o => { if (!mfk[o.name]) { mfk[o.name] = o.defaultValue; } })); this._mfk = mfk; } /** * @return {?} */ get mfk() { this.options .filter((/** * @param {?} o * @return {?} */ o => o.readonly)) .forEach((/** * @param {?} o * @return {?} */ o => { this._mfk[o.name] = o.defaultValue; })); return this._mfk; } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (changes.mfk) { this.mfk = changes.mfk.currentValue; } if (changes.options) { this.options = changes.options.currentValue; this.options = this.optionsService.getOptions(this.options); } } /** * @return {?} */ ngOnInit() { this.options = this.optionsService.getAllOptions(); console.log(this.options); } /** * @return {?} */ ngAfterViewInit() { } /** * @param {?} e * @return {?} */ paste(e) { /** @type {?} */ const pastedInput = e.clipboardData.getData('text/plain').replace(/\D/g, ''); e.preventDefault(); if (!pastedInput) { return; } if (pastedInput.length < 40) { document.execCommand('insertText', false, pastedInput); } else { this.mfk.parseString(pastedInput); } this.mfkChange.emit(this.mfk); } /** * @param {?} e * @return {?} */ onKeyup(e) { this.mfkChange.emit(this.mfk); if ((e.keyCode < 48 || e.keyCode > 57) && (e.keyCode < 96 || e.keyCode > 105)) { return; // only numbers can trigger auto jump feature. } /** @type {?} */ const currentInputFieldName = e.target['name']; if (this.mfk[currentInputFieldName].length === e.target['maxLength']) { // auto jump to next input field when current field is full /** @type {?} */ const currentInputFieldIndex = this.options.findIndex((/** * @param {?} o * @return {?} */ o => o.name === currentInputFieldName)); for (let i = currentInputFieldIndex + 1; i < this.options.length; i++) { if (this.options[i].readonly) { continue; } /** @type {?} */ const nextInputField = this.mfkInputFields.find((/** * @param {?} v * @return {?} */ v => v.el.nativeElement['name'] === this.options[i].name)); nextInputField.el.nativeElement.focus(); break; } } } /** * @param {?} e * @return {?} */ onKeydown(e) { // handle "tab" key --> auto fill '0's if the input field has not completed if (e.keyCode !== 9) { return; } if (e.target['readOnly']) { return; } /** @type {?} */ const maxlength = e.target['maxLength']; while (this.mfk[e.target['name']].length < maxlength) { this.mfk[e.target['name']] = this.mfk[e.target['name']].concat('0'); } } } MfkInputComponent.decorators = [ { type: Component, args: [{ selector: 'uiowa-mfk-input', template: "<div id=\"mfk-container\">\r\n <div class=\"mfk-field\" fxLayout=\"row inline\" fxLayout.xs=\"column\" fxLayoutAlign=\"start center\"\r\n *ngFor=\"let option of options\" fxLayoutWrap fxLayoutGap=\"0.5%\">\r\n <mat-form-field class=\"form-control\" [ngStyle]=\"{'width.rem': option.width+0.5}\" appearance=\"outline\"\r\n floatLabel=\"always\" style=\" font-size: 14px;\">\r\n <mat-label>{{option.label}}</mat-label>\r\n <input matInput [attr.aria-label]=\"option.name\" [attr.name]=\"option.name\" [attr.maxlength]=\"option.length\"\r\n [readOnly]=\"option.readonly\" [(ngModel)]=\"mfk[option.name]\" (paste)=\"paste($event)\" (keyup)=\"onKeyup($event)\"\r\n (keydown)=\"onKeydown($event)\" inputmode=\"numeric\" pattern=\"[0-9]*\" digitOnly>\r\n </mat-form-field>\r\n\r\n\r\n </div>\r\n</div>\r\n", styles: [":host{display:inline-flex}.mfk-field{display:flex;flex-direction:row;flex-flow:row;vertical-align:bottom;margin-right:.25rem}.mat-form-field{padding:.375rem!important;font-size:1rem;font-weight:400;font-style:normal;font-variant:normal}.mat-label{font-size:.625rem;margin-bottom:0;white-space:nowrap}"] }] } ]; /** @nocollapse */ MfkInputComponent.ctorParameters = () => [ { type: UiowaMfkOptionsService } ]; MfkInputComponent.propDecorators = { mfk: [{ type: Input }], options: [{ type: Input }], mfkChange: [{ type: Output }], mfkInputFields: [{ type: ViewChildren, args: [DigitOnlyDirective,] }] }; if (false) { /** * @type {?} * @private */ MfkInputComponent.prototype._mfk; /** @type {?} */ MfkInputComponent.prototype.options; /** @type {?} */ MfkInputComponent.prototype.mfkChange; /** @type {?} */ MfkInputComponent.prototype.mfkInputFields; /** * @type {?} * @private */ MfkInputComponent.prototype.optionsService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWZrLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1aW93YS91aW93YS1tZmstbWF0ZXJpYWwvIiwic291cmNlcyI6WyJsaWIvbWZrLWlucHV0L21may1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFFTixZQUFZLEVBRVosWUFBWSxFQUNaLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBT3ZELE1BQU0sT0FBTyxpQkFBaUI7Ozs7SUE0QjVCLFlBQTZCLGNBQXNDO1FBQXRDLG1CQUFjLEdBQWQsY0FBYyxDQUF3QjtRQTNCM0QsU0FBSSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFxQmhCLFlBQU8sR0FBc0IsRUFBRSxDQUFDO1FBQy9CLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBS3dCLENBQUM7Ozs7O0lBMUJ2RSxJQUNJLEdBQUcsQ0FBQyxHQUFRO1FBQ2QsSUFBSSxDQUFDLE9BQU87YUFDVCxNQUFNOzs7O1FBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFDO2FBQzNCLE9BQU87Ozs7UUFBQyxDQUFDLENBQUMsRUFBRTtZQUNYLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUM7YUFDOUI7UUFDSCxDQUFDLEVBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLENB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Q0FBeUI7O0lBcUJ6QixvQ0FBeUM7O0lBQ3pDLHNDQUE4Qzs7SUFFOUMsMkNBQzhDOzs7OztJQUVsQywyQ0FBdUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIEFmdGVyVmlld0luaXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWZrIH0gZnJvbSAnLi4vbW9kZWxzL21mayc7XHJcbmltcG9ydCB7IE1ma0ZpZWxkT3B0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL21may1maWVsZC1vcHRpb24nO1xyXG5pbXBvcnQgeyBVaW93YU1ma09wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdWlvd2EtbWZrLW9wdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IERpZ2l0T25seURpcmVjdGl2ZSB9IGZyb20gJ0B1aW93YS9kaWdpdC1vbmx5JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndWlvd2EtbWZrLWlucHV0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWZrLWlucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tZmstaW5wdXQuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZmtJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcclxuICBwcml2YXRlIF9tZmsgPSBuZXcgTWZrKCk7XHJcbiAgQElucHV0KClcclxuICBzZXQgbWZrKG1mazogTWZrKSB7XHJcbiAgICB0aGlzLm9wdGlvbnNcclxuICAgICAgLmZpbHRlcihvID0+IG8uZGVmYXVsdFZhbHVlKVxyXG4gICAgICAuZm9yRWFjaChvID0+IHtcclxuICAgICAgICBpZiAoIW1ma1tvLm5hbWVdKSB7XHJcbiAgICAgICAgICBtZmtbby5uYW1lXSA9IG8uZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5fbWZrID0gbWZrO1xyXG4gIH1cclxuICBnZXQgbWZrKCk6IE1mayB7XHJcbiAgICB0aGlzLm9wdGlvbnNcclxuICAgICAgLmZpbHRlcihvID0+IG8ucmVhZG9ubHkpXHJcbiAgICAgIC5mb3JFYWNoKG8gPT4ge1xyXG4gICAgICAgIHRoaXMuX21ma1tvLm5hbWVdID0gby5kZWZhdWx0VmFsdWU7XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuX21maztcclxuICB9XHJcbiAgQElucHV0KCkgb3B0aW9ucz86IE1ma0ZpZWxkT3B0aW9uW10gPSBbXTtcclxuICBAT3V0cHV0KCkgbWZrQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNZms+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oRGlnaXRPbmx5RGlyZWN0aXZlKVxyXG4gIG1ma0lucHV0RmllbGRzOiBRdWVyeUxpc3Q8RGlnaXRPbmx5RGlyZWN0aXZlPjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvcHRpb25zU2VydmljZTogVWlvd2FNZmtPcHRpb25zU2VydmljZSkge31cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMubWZrKSB7XHJcbiAgICAgIHRoaXMubWZrID0gY2hhbmdlcy5tZmsuY3VycmVudFZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXMub3B0aW9ucykge1xyXG4gICAgICB0aGlzLm9wdGlvbnMgPSBjaGFuZ2VzLm9wdGlvbnMuY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnNTZXJ2aWNlLmdldE9wdGlvbnModGhpcy5vcHRpb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zU2VydmljZS5nZXRBbGxPcHRpb25zKCk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLm9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge31cclxuXHJcbiAgcGFzdGUoZTogQ2xpcGJvYXJkRXZlbnQpIHtcclxuICAgIGNvbnN0IHBhc3RlZElucHV0OiBzdHJpbmcgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9wbGFpbicpLnJlcGxhY2UoL1xcRC9nLCAnJyk7IC8vIGdldCBhIGRpZ2l0LW9ubHkgc3RyaW5nXHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBpZiAoIXBhc3RlZElucHV0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChwYXN0ZWRJbnB1dC5sZW5ndGggPCA0MCkge1xyXG4gICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCBwYXN0ZWRJbnB1dCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1may5wYXJzZVN0cmluZyhwYXN0ZWRJbnB1dCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1ma0NoYW5nZS5lbWl0KHRoaXMubWZrKTtcclxuICB9XHJcblxyXG4gIG9uS2V5dXAoZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgdGhpcy5tZmtDaGFuZ2UuZW1pdCh0aGlzLm1mayk7XHJcbiAgICBpZiAoKGUua2V5Q29kZSA8IDQ4IHx8IGUua2V5Q29kZSA+IDU3KSAmJiAoZS5rZXlDb2RlIDwgOTYgfHwgZS5rZXlDb2RlID4gMTA1KSkge1xyXG4gICAgICByZXR1cm47IC8vIG9ubHkgbnVtYmVycyBjYW4gdHJpZ2dlciBhdXRvIGp1bXAgZmVhdHVyZS5cclxuICAgIH1cclxuICAgIGNvbnN0IGN1cnJlbnRJbnB1dEZpZWxkTmFtZSA9IGUudGFyZ2V0WyduYW1lJ107XHJcbiAgICBpZiAodGhpcy5tZmtbY3VycmVudElucHV0RmllbGROYW1lXS5sZW5ndGggPT09IGUudGFyZ2V0WydtYXhMZW5ndGgnXSkge1xyXG4gICAgICAvLyBhdXRvIGp1bXAgdG8gbmV4dCBpbnB1dCBmaWVsZCB3aGVuIGN1cnJlbnQgZmllbGQgaXMgZnVsbFxyXG4gICAgICBjb25zdCBjdXJyZW50SW5wdXRGaWVsZEluZGV4ID0gdGhpcy5vcHRpb25zLmZpbmRJbmRleChvID0+IG8ubmFtZSA9PT0gY3VycmVudElucHV0RmllbGROYW1lKTtcclxuICAgICAgZm9yIChsZXQgaSA9IGN1cnJlbnRJbnB1dEZpZWxkSW5kZXggKyAxOyBpIDwgdGhpcy5vcHRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc1tpXS5yZWFkb25seSkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRJbnB1dEZpZWxkID0gdGhpcy5tZmtJbnB1dEZpZWxkcy5maW5kKHYgPT4gdi5lbC5uYXRpdmVFbGVtZW50WyduYW1lJ10gPT09IHRoaXMub3B0aW9uc1tpXS5uYW1lKTtcclxuICAgICAgICBuZXh0SW5wdXRGaWVsZC5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uS2V5ZG93bihlOiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAvLyBoYW5kbGUgXCJ0YWJcIiBrZXkgLS0+IGF1dG8gZmlsbCAnMCdzIGlmIHRoZSBpbnB1dCBmaWVsZCBoYXMgbm90IGNvbXBsZXRlZFxyXG4gICAgaWYgKGUua2V5Q29kZSAhPT0gOSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoZS50YXJnZXRbJ3JlYWRPbmx5J10pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWF4bGVuZ3RoID0gZS50YXJnZXRbJ21heExlbmd0aCddO1xyXG4gICAgd2hpbGUgKHRoaXMubWZrW2UudGFyZ2V0WyduYW1lJ11dLmxlbmd0aCA8IG1heGxlbmd0aCkge1xyXG4gICAgICB0aGlzLm1ma1tlLnRhcmdldFsnbmFtZSddXSA9IHRoaXMubWZrW2UudGFyZ2V0WyduYW1lJ11dLmNvbmNhdCgnMCcpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=