@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
111 lines • 14.8 kB
JavaScript
import { __decorate, __extends, __metadata } from "tslib";
import { IgxDropDownItemNavigationDirective } from '../drop-down/drop-down-navigation.directive';
import { Directive, Input, HostListener } from '@angular/core';
import { Subscription, timer } from 'rxjs';
/** @hidden @internal */
var IgxSelectItemNavigationDirective = /** @class */ (function (_super) {
__extends(IgxSelectItemNavigationDirective, _super);
function IgxSelectItemNavigationDirective() {
var _this = _super.call(this, null) || this;
// tslint:disable:member-ordering
_this.inputStream = '';
_this.clearStream$ = Subscription.EMPTY;
return _this;
}
/** Captures keydown events and calls the appropriate handlers on the target component */
IgxSelectItemNavigationDirective.prototype.handleKeyDown = function (event) {
if (!event || event.shiftKey) {
return;
}
var key = event.key.toLowerCase();
if (event.altKey && (key === 'arrowdown' || key === 'arrowup' || key === 'down' || key === 'up')) {
this.target.toggle();
return;
}
if (this.target.collapsed) {
switch (key) {
case 'space':
case 'spacebar':
case ' ':
case 'enter':
event.preventDefault();
this.target.open();
return;
case 'arrowdown':
case 'down':
this.target.navigateNext();
this.target.selectItem(this.target.focusedItem);
event.preventDefault();
return;
case 'arrowup':
case 'up':
this.target.navigatePrev();
this.target.selectItem(this.target.focusedItem);
event.preventDefault();
return;
default:
break;
}
}
_super.prototype.handleKeyDown.call(this, event);
};
/** Handle continuous letter typing navigation */
IgxSelectItemNavigationDirective.prototype.captureKey = function (event) {
var _this = this;
// relying only on key, available on all major browsers:
// https://caniuse.com/#feat=keyboardevent-key (IE/Edge quirk doesn't affect letter typing)
if (!event || !event.key || event.key.length > 1) {
// ignore longer keys ('Alt', 'ArrowDown', etc)
return;
}
this.clearStream$.unsubscribe();
this.clearStream$ = timer(500).subscribe(function () {
_this.inputStream = '';
});
this.inputStream += event.key;
var focusedItem = this.target.focusedItem;
// select the item
if (focusedItem && this.inputStream.length > 1 && focusedItem.itemText.toLowerCase().startsWith(this.inputStream.toLowerCase())) {
return;
}
this.activateItemByText(this.inputStream);
};
IgxSelectItemNavigationDirective.prototype.activateItemByText = function (text) {
var items = this.target.items;
var activeItemIndex = items.indexOf(this.target.focusedItem) || 0;
// ^ this is focused OR selected if the dd is closed
var nextItem = items.slice(activeItemIndex + 1).find(function (x) { return !x.disabled && (x.itemText.toLowerCase().startsWith(text.toLowerCase())); });
if (!nextItem) {
nextItem = items.slice(0, activeItemIndex).find(function (x) { return !x.disabled && (x.itemText.toLowerCase().startsWith(text.toLowerCase())); });
}
if (!nextItem) {
return;
}
if (this.target.collapsed) {
this.target.selectItem(nextItem);
}
this.target.navigateItem(items.indexOf(nextItem));
};
IgxSelectItemNavigationDirective.prototype.ngOnDestroy = function () {
this.clearStream$.unsubscribe();
};
__decorate([
Input('igxSelectItemNavigation'),
__metadata("design:type", Object)
], IgxSelectItemNavigationDirective.prototype, "target", void 0);
__decorate([
HostListener('keyup', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxSelectItemNavigationDirective.prototype, "captureKey", null);
IgxSelectItemNavigationDirective = __decorate([
Directive({
selector: '[igxSelectItemNavigation]'
}),
__metadata("design:paramtypes", [])
], IgxSelectItemNavigationDirective);
return IgxSelectItemNavigationDirective;
}(IgxDropDownItemNavigationDirective));
export { IgxSelectItemNavigationDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LW5hdmlnYXRpb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9zZWxlY3Qvc2VsZWN0LW5hdmlnYXRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJM0Msd0JBQXdCO0FBSXhCO0lBQXNELG9EQUFrQztJQUtwRjtRQUFBLFlBQWdCLGtCQUFNLElBQUksQ0FBQyxTQUFHO1FBMkM5QixpQ0FBaUM7UUFDekIsaUJBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsa0JBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDOztJQTdDYixDQUFDO0lBRTlCLHlGQUF5RjtJQUN6Rix3REFBYSxHQUFiLFVBQWMsS0FBb0I7UUFDOUIsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQzFCLE9BQU87U0FDVjtRQUVELElBQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxLQUFLLFdBQVcsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxNQUFNLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQzlGLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckIsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUN2QixRQUFRLEdBQUcsRUFBRTtnQkFDVCxLQUFLLE9BQU8s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LENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUF4RSxDQUF3RSxDQUFDLENBQUM7U0FDbEk7UUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNwQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsc0RBQVcsR0FBWDtRQUNJLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQS9GRDtRQURDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQzs7b0VBQ0o7SUFtRDdCO1FBREMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzt5Q0FDVCxhQUFhOztzRUFvQnJDO0lBMUVRLGdDQUFnQztRQUg1QyxTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsMkJBQTJCO1NBQ3hDLENBQUM7O09BQ1csZ0NBQWdDLENBbUc1QztJQUFELHVDQUFDO0NBQUEsQUFuR0QsQ0FBc0Qsa0NBQWtDLEdBbUd2RjtTQW5HWSxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJZ3hEcm9wRG93bkl0ZW1OYXZpZ2F0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZHJvcC1kb3duL2Ryb3AtZG93bi1uYXZpZ2F0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBIb3N0TGlzdGVuZXIsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSWd4U2VsZWN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vc2VsZWN0LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IElneFNlbGVjdEJhc2UgfSBmcm9tICcuL3NlbGVjdC5jb21tb24nO1xuXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneFNlbGVjdEl0ZW1OYXZpZ2F0aW9uXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4U2VsZWN0SXRlbU5hdmlnYXRpb25EaXJlY3RpdmUgZXh0ZW5kcyBJZ3hEcm9wRG93bkl0ZW1OYXZpZ2F0aW9uRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIEBJbnB1dCgnaWd4U2VsZWN0SXRlbU5hdmlnYXRpb24nKVxuICAgIHB1YmxpYyB0YXJnZXQ6IElneFNlbGVjdEJhc2U7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIobnVsbCk7IH1cblxuICAgIC8qKiBDYXB0dXJlcyBrZXlkb3duIGV2ZW50cyBhbmQgY2FsbHMgdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXJzIG9uIHRoZSB0YXJnZXQgY29tcG9uZW50ICovXG4gICAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGV2ZW50LmFsdEtleSAmJiAoa2V5ID09PSAnYXJyb3dkb3duJyB8fCBrZXkgPT09ICdhcnJvd3VwJyB8fCBrZXkgPT09ICdkb3duJyB8fCBrZXkgPT09ICd1cCcpKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldC50b2dnbGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRhcmdldC5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3NwYWNlYmFyJzpcbiAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICBjYXNlICdlbnRlcic6XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0Lm9wZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Fycm93ZG93bic6XG4gICAgICAgICAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0Lm5hdmlnYXRlTmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldC5zZWxlY3RJdGVtKHRoaXMudGFyZ2V0LmZvY3VzZWRJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Fycm93dXAnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3VwJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXQubmF2aWdhdGVQcmV2KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LnNlbGVjdEl0ZW0odGhpcy50YXJnZXQuZm9jdXNlZEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5oYW5kbGVLZXlEb3duKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTptZW1iZXItb3JkZXJpbmdcbiAgICBwcml2YXRlIGlucHV0U3RyZWFtID0gJyc7XG4gICAgcHJpdmF0ZSBjbGVhclN0cmVhbSQgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgICAvKiogSGFuZGxlIGNvbnRpbnVvdXMgbGV0dGVyIHR5cGluZyBuYXZpZ2F0aW9uICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBjYXB0dXJlS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIC8vIHJlbHlpbmcgb25seSBvbiBrZXksIGF2YWlsYWJsZSBvbiBhbGwgbWFqb3IgYnJvd3NlcnM6XG4gICAgICAgIC8vIGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9a2V5Ym9hcmRldmVudC1rZXkgKElFL0VkZ2UgcXVpcmsgZG9lc24ndCBhZmZlY3QgbGV0dGVyIHR5cGluZylcbiAgICAgICAgaWYgKCFldmVudCB8fCAhZXZlbnQua2V5IHx8IGV2ZW50LmtleS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAvLyBpZ25vcmUgbG9uZ2VyIGtleXMgKCdBbHQnLCAnQXJyb3dEb3duJywgZXRjKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGVhclN0cmVhbSQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5jbGVhclN0cmVhbSQgPSB0aW1lcig1MDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlucHV0U3RyZWFtID0gJyc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlucHV0U3RyZWFtICs9IGV2ZW50LmtleTtcbiAgICAgICAgY29uc3QgZm9jdXNlZEl0ZW0gPSB0aGlzLnRhcmdldC5mb2N1c2VkSXRlbSBhcyBJZ3hTZWxlY3RJdGVtQ29tcG9uZW50O1xuXG4gICAgICAgIC8vIHNlbGVjdCB0aGUgaXRlbVxuICAgICAgICBpZiAoZm9jdXNlZEl0ZW0gJiYgdGhpcy5pbnB1dFN0cmVhbS5sZW5ndGggPiAxICYmIGZvY3VzZWRJdGVtLml0ZW1UZXh0LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCh0aGlzLmlucHV0U3RyZWFtLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmF0ZUl0ZW1CeVRleHQodGhpcy5pbnB1dFN0cmVhbSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjdGl2YXRlSXRlbUJ5VGV4dCh0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLnRhcmdldC5pdGVtcyBhcyBJZ3hTZWxlY3RJdGVtQ29tcG9uZW50W107XG4gICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW1JbmRleCA9IGl0ZW1zLmluZGV4T2YodGhpcy50YXJnZXQuZm9jdXNlZEl0ZW0gYXMgSWd4U2VsZWN0SXRlbUNvbXBvbmVudCkgfHwgMDtcbiAgICAgICAgLy8gXiB0aGlzIGlzIGZvY3VzZWQgT1Igc2VsZWN0ZWQgaWYgdGhlIGRkIGlzIGNsb3NlZFxuICAgICAgICBsZXQgbmV4dEl0ZW0gPSBpdGVtcy5zbGljZShhY3RpdmVJdGVtSW5kZXggKyAxKS5maW5kKHggPT4gIXguZGlzYWJsZWQgJiYgKHguaXRlbVRleHQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHRleHQudG9Mb3dlckNhc2UoKSkpKTtcblxuICAgICAgICBpZiAoIW5leHRJdGVtKSB7XG4gICAgICAgICAgICBuZXh0SXRlbSA9IGl0ZW1zLnNsaWNlKDAsIGFjdGl2ZUl0ZW1JbmRleCkuZmluZCh4ID0+ICF4LmRpc2FibGVkICYmICh4Lml0ZW1UZXh0LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCh0ZXh0LnRvTG93ZXJDYXNlKCkpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5leHRJdGVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YXJnZXQuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldC5zZWxlY3RJdGVtKG5leHRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhcmdldC5uYXZpZ2F0ZUl0ZW0oaXRlbXMuaW5kZXhPZihuZXh0SXRlbSkpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyU3RyZWFtJC51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cbiJdfQ==