UNPKG

@uiowa/uiowa-mfk-material

Version:

mfk, uiowa-mfk

224 lines 18.1 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'; var MfkInputComponent = /** @class */ (function () { function MfkInputComponent(optionsService) { this.optionsService = optionsService; this._mfk = new Mfk(); this.options = []; this.mfkChange = new EventEmitter(); } Object.defineProperty(MfkInputComponent.prototype, "mfk", { get: /** * @return {?} */ function () { var _this = this; this.options .filter((/** * @param {?} o * @return {?} */ function (o) { return o.readonly; })) .forEach((/** * @param {?} o * @return {?} */ function (o) { _this._mfk[o.name] = o.defaultValue; })); return this._mfk; }, set: /** * @param {?} mfk * @return {?} */ function (mfk) { this.options .filter((/** * @param {?} o * @return {?} */ function (o) { return o.defaultValue; })) .forEach((/** * @param {?} o * @return {?} */ function (o) { if (!mfk[o.name]) { mfk[o.name] = o.defaultValue; } })); this._mfk = mfk; }, enumerable: true, configurable: true }); /** * @param {?} changes * @return {?} */ MfkInputComponent.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (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 {?} */ MfkInputComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.options = this.optionsService.getAllOptions(); console.log(this.options); }; /** * @return {?} */ MfkInputComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { }; /** * @param {?} e * @return {?} */ MfkInputComponent.prototype.paste = /** * @param {?} e * @return {?} */ function (e) { /** @type {?} */ var 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 {?} */ MfkInputComponent.prototype.onKeyup = /** * @param {?} e * @return {?} */ function (e) { var _this = this; 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 {?} */ var currentInputFieldName = e.target['name']; if (this.mfk[currentInputFieldName].length === e.target['maxLength']) { // auto jump to next input field when current field is full /** @type {?} */ var currentInputFieldIndex = this.options.findIndex((/** * @param {?} o * @return {?} */ function (o) { return o.name === currentInputFieldName; })); var _loop_1 = function (i) { if (this_1.options[i].readonly) { return "continue"; } /** @type {?} */ var nextInputField = this_1.mfkInputFields.find((/** * @param {?} v * @return {?} */ function (v) { return v.el.nativeElement['name'] === _this.options[i].name; })); nextInputField.el.nativeElement.focus(); return "break"; }; var this_1 = this; for (var i = currentInputFieldIndex + 1; i < this.options.length; i++) { var state_1 = _loop_1(i); if (state_1 === "break") break; } } }; /** * @param {?} e * @return {?} */ MfkInputComponent.prototype.onKeydown = /** * @param {?} e * @return {?} */ function (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 {?} */ var 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 = function () { return [ { type: UiowaMfkOptionsService } ]; }; MfkInputComponent.propDecorators = { mfk: [{ type: Input }], options: [{ type: Input }], mfkChange: [{ type: Output }], mfkInputFields: [{ type: ViewChildren, args: [DigitOnlyDirective,] }] }; return MfkInputComponent; }()); export { MfkInputComponent }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWZrLWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1aW93YS91aW93YS1tZmstbWF0ZXJpYWwvIiwic291cmNlcyI6WyJsaWIvbWZrLWlucHV0L21may1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFFTixZQUFZLEVBRVosWUFBWSxFQUNaLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXZEO0lBaUNFLDJCQUE2QixjQUFzQztRQUF0QyxtQkFBYyxHQUFkLGNBQWMsQ0FBd0I7UUEzQjNELFNBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBcUJoQixZQUFPLEdBQXNCLEVBQUUsQ0FBQztRQUMvQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUt3QixDQUFDO0lBMUJ2RSxzQkFDSSxrQ0FBRzs7OztRQVdQO1lBQUEsaUJBT0M7WUFOQyxJQUFJLENBQUMsT0FBTztpQkFDVCxNQUFNOzs7O1lBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsUUFBUSxFQUFWLENBQVUsRUFBQztpQkFDdkIsT0FBTzs7OztZQUFDLFVBQUEsQ0FBQztnQkFDUixLQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQ3JDLENBQUMsRUFBQyxDQUFDO1lBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25CLENBQUM7Ozs7O1FBbkJELFVBQ1EsR0FBUTtZQUNkLElBQUksQ0FBQyxPQUFPO2lCQUNULE1BQU07Ozs7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aUJBRTFDOzs7O2dCQVBRLHNCQUFzQjs7O3NCQVU1QixLQUFLOzBCQW9CTCxLQUFLOzRCQUNMLE1BQU07aUNBRU4sWUFBWSxTQUFDLGtCQUFrQjs7SUFxRWxDLHdCQUFDO0NBQUEsQUFuR0QsSUFtR0M7U0E5RlksaUJBQWlCOzs7Ozs7SUFDNUIsaUNBQXlCOztJQXFCekIsb0NBQXlDOztJQUN6QyxzQ0FBOEM7O0lBRTlDLDJDQUM4Qzs7Ozs7SUFFbEMsMkNBQXVEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBBZnRlclZpZXdJbml0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1mayB9IGZyb20gJy4uL21vZGVscy9tZmsnO1xyXG5pbXBvcnQgeyBNZmtGaWVsZE9wdGlvbiB9IGZyb20gJy4uL21vZGVscy9tZmstZmllbGQtb3B0aW9uJztcclxuaW1wb3J0IHsgVWlvd2FNZmtPcHRpb25zU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Vpb3dhLW1may1vcHRpb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWdpdE9ubHlEaXJlY3RpdmUgfSBmcm9tICdAdWlvd2EvZGlnaXQtb25seSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Vpb3dhLW1may1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21may1pbnB1dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbWZrLWlucHV0LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWZrSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHJpdmF0ZSBfbWZrID0gbmV3IE1maygpO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG1mayhtZms6IE1maykge1xyXG4gICAgdGhpcy5vcHRpb25zXHJcbiAgICAgIC5maWx0ZXIobyA9PiBvLmRlZmF1bHRWYWx1ZSlcclxuICAgICAgLmZvckVhY2gobyA9PiB7XHJcbiAgICAgICAgaWYgKCFtZmtbby5uYW1lXSkge1xyXG4gICAgICAgICAgbWZrW28ubmFtZV0gPSBvLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX21mayA9IG1maztcclxuICB9XHJcbiAgZ2V0IG1maygpOiBNZmsge1xyXG4gICAgdGhpcy5vcHRpb25zXHJcbiAgICAgIC5maWx0ZXIobyA9PiBvLnJlYWRvbmx5KVxyXG4gICAgICAuZm9yRWFjaChvID0+IHtcclxuICAgICAgICB0aGlzLl9tZmtbby5uYW1lXSA9IG8uZGVmYXVsdFZhbHVlO1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLl9tZms7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIG9wdGlvbnM/OiBNZmtGaWVsZE9wdGlvbltdID0gW107XHJcbiAgQE91dHB1dCgpIG1ma0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWZrPigpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKERpZ2l0T25seURpcmVjdGl2ZSlcclxuICBtZmtJbnB1dEZpZWxkczogUXVlcnlMaXN0PERpZ2l0T25seURpcmVjdGl2ZT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uc1NlcnZpY2U6IFVpb3dhTWZrT3B0aW9uc1NlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLm1maykge1xyXG4gICAgICB0aGlzLm1mayA9IGNoYW5nZXMubWZrLmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzLm9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5vcHRpb25zID0gY2hhbmdlcy5vcHRpb25zLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zU2VydmljZS5nZXRPcHRpb25zKHRoaXMub3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9uc1NlcnZpY2UuZ2V0QWxsT3B0aW9ucygpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5vcHRpb25zKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gIHBhc3RlKGU6IENsaXBib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBwYXN0ZWRJbnB1dDogc3RyaW5nID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQvcGxhaW4nKS5yZXBsYWNlKC9cXEQvZywgJycpOyAvLyBnZXQgYSBkaWdpdC1vbmx5IHN0cmluZ1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKCFwYXN0ZWRJbnB1dCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAocGFzdGVkSW5wdXQubGVuZ3RoIDwgNDApIHtcclxuICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgcGFzdGVkSW5wdXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tZmsucGFyc2VTdHJpbmcocGFzdGVkSW5wdXQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tZmtDaGFuZ2UuZW1pdCh0aGlzLm1mayk7XHJcbiAgfVxyXG5cclxuICBvbktleXVwKGU6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIHRoaXMubWZrQ2hhbmdlLmVtaXQodGhpcy5tZmspO1xyXG4gICAgaWYgKChlLmtleUNvZGUgPCA0OCB8fCBlLmtleUNvZGUgPiA1NykgJiYgKGUua2V5Q29kZSA8IDk2IHx8IGUua2V5Q29kZSA+IDEwNSkpIHtcclxuICAgICAgcmV0dXJuOyAvLyBvbmx5IG51bWJlcnMgY2FuIHRyaWdnZXIgYXV0byBqdW1wIGZlYXR1cmUuXHJcbiAgICB9XHJcbiAgICBjb25zdCBjdXJyZW50SW5wdXRGaWVsZE5hbWUgPSBlLnRhcmdldFsnbmFtZSddO1xyXG4gICAgaWYgKHRoaXMubWZrW2N1cnJlbnRJbnB1dEZpZWxkTmFtZV0ubGVuZ3RoID09PSBlLnRhcmdldFsnbWF4TGVuZ3RoJ10pIHtcclxuICAgICAgLy8gYXV0byBqdW1wIHRvIG5leHQgaW5wdXQgZmllbGQgd2hlbiBjdXJyZW50IGZpZWxkIGlzIGZ1bGxcclxuICAgICAgY29uc3QgY3VycmVudElucHV0RmllbGRJbmRleCA9IHRoaXMub3B0aW9ucy5maW5kSW5kZXgobyA9PiBvLm5hbWUgPT09IGN1cnJlbnRJbnB1dEZpZWxkTmFtZSk7XHJcbiAgICAgIGZvciAobGV0IGkgPSBjdXJyZW50SW5wdXRGaWVsZEluZGV4ICsgMTsgaSA8IHRoaXMub3B0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnNbaV0ucmVhZG9ubHkpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0SW5wdXRGaWVsZCA9IHRoaXMubWZrSW5wdXRGaWVsZHMuZmluZCh2ID0+IHYuZWwubmF0aXZlRWxlbWVudFsnbmFtZSddID09PSB0aGlzLm9wdGlvbnNbaV0ubmFtZSk7XHJcbiAgICAgICAgbmV4dElucHV0RmllbGQuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbktleWRvd24oZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgLy8gaGFuZGxlIFwidGFiXCIga2V5IC0tPiBhdXRvIGZpbGwgJzAncyBpZiB0aGUgaW5wdXQgZmllbGQgaGFzIG5vdCBjb21wbGV0ZWRcclxuICAgIGlmIChlLmtleUNvZGUgIT09IDkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGUudGFyZ2V0WydyZWFkT25seSddKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG1heGxlbmd0aCA9IGUudGFyZ2V0WydtYXhMZW5ndGgnXTtcclxuICAgIHdoaWxlICh0aGlzLm1ma1tlLnRhcmdldFsnbmFtZSddXS5sZW5ndGggPCBtYXhsZW5ndGgpIHtcclxuICAgICAgdGhpcy5tZmtbZS50YXJnZXRbJ25hbWUnXV0gPSB0aGlzLm1ma1tlLnRhcmdldFsnbmFtZSddXS5jb25jYXQoJzAnKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19