UNPKG

igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

140 lines • 14.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { IgxDropDownItemNavigationDirective } from '../drop-down/drop-down-navigation.directive'; import { Directive, Input, HostListener } from '@angular/core'; import { Subscription, timer } from 'rxjs'; /** * @hidden \@internal */ export class IgxSelectItemNavigationDirective extends IgxDropDownItemNavigationDirective { constructor() { super(null); // tslint:disable:member-ordering this.inputStream = ''; this.clearStream$ = Subscription.EMPTY; } /** * Captures keydown events and calls the appropriate handlers on the target component * @param {?} event * @return {?} */ handleKeyDown(event) { if (!event || event.shiftKey) { return; } /** @type {?} */ const 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.handleKeyDown(event); } /** * Handle continuous letter typing navigation * @param {?} event * @return {?} */ captureKey(event) { // 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(() => { this.inputStream = ''; }); this.inputStream += event.key; /** @type {?} */ const focusedItem = (/** @type {?} */ (this.target.focusedItem)); // select the item if (focusedItem && this.inputStream.length > 1 && focusedItem.itemText.toLowerCase().startsWith(this.inputStream.toLowerCase())) { return; } this.activateItemByText(this.inputStream); } /** * @param {?} text * @return {?} */ activateItemByText(text) { /** @type {?} */ const items = (/** @type {?} */ (this.target.items)); /** @type {?} */ const activeItemIndex = items.indexOf((/** @type {?} */ (this.target.focusedItem))) || 0; // ^ this is focused OR selected if the dd is closed /** @type {?} */ let nextItem = items.slice(activeItemIndex + 1).find(x => !x.disabled && (x.itemText.toLowerCase().startsWith(text.toLowerCase()))); if (!nextItem) { nextItem = items.slice(0, activeItemIndex).find(x => !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)); } /** * @return {?} */ ngOnDestroy() { this.clearStream$.unsubscribe(); } } IgxSelectItemNavigationDirective.decorators = [ { type: Directive, args: [{ selector: '[igxSelectItemNavigation]' },] } ]; /** @nocollapse */ IgxSelectItemNavigationDirective.ctorParameters = () => []; IgxSelectItemNavigationDirective.propDecorators = { target: [{ type: Input, args: ['igxSelectItemNavigation',] }], captureKey: [{ type: HostListener, args: ['keyup', ['$event'],] }] }; if (false) { /** @type {?} */ IgxSelectItemNavigationDirective.prototype.target; /** * @type {?} * @private */ IgxSelectItemNavigationDirective.prototype.inputStream; /** * @type {?} * @private */ IgxSelectItemNavigationDirective.prototype.clearStream$; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LW5hdmlnYXRpb24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9zZWxlY3Qvc2VsZWN0LW5hdmlnYXRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFRM0MsTUFBTSxPQUFPLGdDQUFpQyxTQUFRLGtDQUFrQztJQUtwRjtRQUFnQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7O1FBNENwQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixpQkFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7SUE3Q2IsQ0FBQzs7Ozs7O0lBRzlCLGFBQWEsQ0FBQyxLQUFvQjtRQUM5QixJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDMUIsT0FBTztTQUNWOztjQUVLLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRTtRQUNuQyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLEtBQUssV0FBVyxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDOUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3ZCLFFBQVEsR0FBRyxFQUFFO2dCQUNULEtBQUssT0FBTyxDQUFDO2dCQUNiLEtBQUssVUFBVSxDQUFDO2dC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QUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsSTtRQUVELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxPQUFPO1NBQ1Y7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Ozs7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDOzs7WUFyR0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSwyQkFBMkI7YUFDeEM7Ozs7O3FCQUdJLEtBQUssU0FBQyx5QkFBeUI7eUJBbUQvQixZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOzs7O0lBbkRqQyxrREFDNkI7Ozs7O0lBOEM3Qix1REFBeUI7Ozs7O0lBQ3pCLHdEQUEwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi9kcm9wLWRvd24vZHJvcC1kb3duLW5hdmlnYXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJZ3hTZWxlY3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9zZWxlY3QtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4U2VsZWN0QmFzZSB9IGZyb20gJy4vc2VsZWN0LmNvbW1vbic7XG5cbi8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4U2VsZWN0SXRlbU5hdmlnYXRpb25dJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hTZWxlY3RJdGVtTmF2aWdhdGlvbkRpcmVjdGl2ZSBleHRlbmRzIElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCdpZ3hTZWxlY3RJdGVtTmF2aWdhdGlvbicpXG4gICAgcHVibGljIHRhcmdldDogSWd4U2VsZWN0QmFzZTtcblxuICAgIGNvbnN0cnVjdG9yKCkgeyBzdXBlcihudWxsKTsgfVxuXG4gICAgLyoqIENhcHR1cmVzIGtleWRvd24gZXZlbnRzIGFuZCBjYWxscyB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcnMgb24gdGhlIHRhcmdldCBjb21wb25lbnQgKi9cbiAgICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQgfHwgZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoZXZlbnQuYWx0S2V5ICYmIChrZXkgPT09ICdhcnJvd2Rvd24nIHx8IGtleSA9PT0gJ2Fycm93dXAnIHx8IGtleSA9PT0gJ2Rvd24nIHx8IGtleSA9PT0gJ3VwJykpIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnRvZ2dsZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0LmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnc3BhY2ViYXInOlxuICAgICAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2VudGVyJzpcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXQub3BlbigpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkb3duJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXQubmF2aWdhdGVOZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LnNlbGVjdEl0ZW0odGhpcy50YXJnZXQuZm9jdXNlZEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY2FzZSAnYXJyb3d1cCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndXAnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldC5uYXZpZ2F0ZVByZXYoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXQuc2VsZWN0SXRlbSh0aGlzLnRhcmdldC5mb2N1c2VkSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLmhhbmRsZUtleURvd24oZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIHRzbGludDpkaXNhYmxlOm1lbWJlci1vcmRlcmluZ1xuICAgIHByaXZhdGUgaW5wdXRTdHJlYW0gPSAnJztcbiAgICBwcml2YXRlIGNsZWFyU3RyZWFtJCA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICAgIC8qKiBIYW5kbGUgY29udGludW91cyBsZXR0ZXIgdHlwaW5nIG5hdmlnYXRpb24gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIGNhcHR1cmVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgLy8gcmVseWluZyBvbmx5IG9uIGtleSwgYXZhaWxhYmxlIG9uIGFsbCBtYWpvciBicm93c2VyczpcbiAgICAgICAgLy8gaHR0cHM6Ly9jYW5pdXNlLmNvbS8jZmVhdD1rZXlib2FyZGV2ZW50LWtleSAoSUUvRWRnZSBxdWlyayBkb2Vzbid0IGFmZmVjdCBsZXR0ZXIgdHlwaW5nKVxuICAgICAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5rZXkgfHwgZXZlbnQua2V5Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZSBsb25nZXIga2V5cyAoJ0FsdCcsICdBcnJvd0Rvd24nLCBldGMpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsZWFyU3RyZWFtJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmNsZWFyU3RyZWFtJCA9IHRpbWVyKDUwMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRTdHJlYW0gPSAnJztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5wdXRTdHJlYW0gKz0gZXZlbnQua2V5O1xuICAgICAgICBjb25zdCBmb2N1c2VkSXRlbSA9IHRoaXMudGFyZ2V0LmZvY3VzZWRJdGVtIGFzIElneFNlbGVjdEl0ZW1Db21wb25lbnQ7XG5cbiAgICAgICAgLy8gc2VsZWN0IHRoZSBpdGVtXG4gICAgICAgIGlmIChmb2N1c2VkSXRlbSAmJiB0aGlzLmlucHV0U3RyZWFtLmxlbmd0aCA+IDEgJiYgZm9jdXNlZEl0ZW0uaXRlbVRleHQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHRoaXMuaW5wdXRTdHJlYW0udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2YXRlSXRlbUJ5VGV4dCh0aGlzLmlucHV0U3RyZWFtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWN0aXZhdGVJdGVtQnlUZXh0KHRleHQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMudGFyZ2V0Lml0ZW1zIGFzIElneFNlbGVjdEl0ZW1Db21wb25lbnRbXTtcbiAgICAgICAgY29uc3QgYWN0aXZlSXRlbUluZGV4ID0gaXRlbXMuaW5kZXhPZih0aGlzLnRhcmdldC5mb2N1c2VkSXRlbSBhcyBJZ3hTZWxlY3RJdGVtQ29tcG9uZW50KSB8fCAwO1xuICAgICAgICAvLyBeIHRoaXMgaXMgZm9jdXNlZCBPUiBzZWxlY3RlZCBpZiB0aGUgZGQgaXMgY2xvc2VkXG4gICAgICAgIGxldCBuZXh0SXRlbSA9IGl0ZW1zLnNsaWNlKGFjdGl2ZUl0ZW1JbmRleCArIDEpLmZpbmQoeCA9PiAheC5kaXNhYmxlZCAmJiAoeC5pdGVtVGV4dC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodGV4dC50b0xvd2VyQ2FzZSgpKSkpO1xuXG4gICAgICAgIGlmICghbmV4dEl0ZW0pIHtcbiAgICAgICAgICAgIG5leHRJdGVtID0gaXRlbXMuc2xpY2UoMCwgYWN0aXZlSXRlbUluZGV4KS5maW5kKHggPT4gIXguZGlzYWJsZWQgJiYgKHguaXRlbVRleHQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHRleHQudG9Mb3dlckNhc2UoKSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbmV4dEl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRhcmdldC5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LnNlbGVjdEl0ZW0obmV4dEl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFyZ2V0Lm5hdmlnYXRlSXRlbShpdGVtcy5pbmRleE9mKG5leHRJdGVtKSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJTdHJlYW0kLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuIl19