From d35452091048fcb23d49fda35f582988a26e0f67 Mon Sep 17 00:00:00 2001 From: Clem Date: Thu, 17 Aug 2023 17:34:09 +0200 Subject: [PATCH] fix(core/selector): avoid selectedIndex to go NaN if filteredOptions empty --- .../src/components/selectorModal.component.ts | 54 ++++++++++--------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/tabby-core/src/components/selectorModal.component.ts b/tabby-core/src/components/selectorModal.component.ts index 76092314..255dd44f 100644 --- a/tabby-core/src/components/selectorModal.component.ts +++ b/tabby-core/src/components/selectorModal.component.ts @@ -29,34 +29,36 @@ export class SelectorModalComponent { } @HostListener('keydown', ['$event']) onKeyUp (event: KeyboardEvent): void { - if (event.key === 'PageUp' || event.key === 'ArrowUp' && event.metaKey) { - this.selectedIndex -= 10 - event.preventDefault() - } else if (event.key === 'PageDown' || event.key === 'ArrowDown' && event.metaKey) { - this.selectedIndex += 10 - event.preventDefault() - } else if (event.key === 'ArrowUp') { - this.selectedIndex-- - event.preventDefault() - } else if (event.key === 'ArrowDown') { - this.selectedIndex++ - event.preventDefault() - } else if (event.key === 'Enter') { - this.selectOption(this.filteredOptions[this.selectedIndex]) - } else if (event.key === 'Escape') { + if (event.key === 'Escape') { this.close() - } - if (event.key === 'Backspace' && this.canEditSelected()) { - event.preventDefault() - this.filter = this.filteredOptions[this.selectedIndex].freeInputEquivalent! - this.onFilterChange() - } + } else if (this.filteredOptions.length > 0) { + if (event.key === 'PageUp' || event.key === 'ArrowUp' && event.metaKey) { + this.selectedIndex -= 10 + event.preventDefault() + } else if (event.key === 'PageDown' || event.key === 'ArrowDown' && event.metaKey) { + this.selectedIndex += 10 + event.preventDefault() + } else if (event.key === 'ArrowUp') { + this.selectedIndex-- + event.preventDefault() + } else if (event.key === 'ArrowDown') { + this.selectedIndex++ + event.preventDefault() + } else if (event.key === 'Enter') { + this.selectOption(this.filteredOptions[this.selectedIndex]) + } else if (event.key === 'Backspace' && this.canEditSelected()) { + event.preventDefault() + this.filter = this.filteredOptions[this.selectedIndex].freeInputEquivalent! + this.onFilterChange() + } - this.selectedIndex = (this.selectedIndex + this.filteredOptions.length) % this.filteredOptions.length - Array.from(this.itemChildren)[this.selectedIndex]?.nativeElement.scrollIntoView({ - behavior: 'smooth', - block: 'nearest', - }) + this.selectedIndex = (this.selectedIndex + this.filteredOptions.length) % this.filteredOptions.length + + Array.from(this.itemChildren)[this.selectedIndex]?.nativeElement.scrollIntoView({ + behavior: 'smooth', + block: 'nearest', + }) + } } onFilterChange (): void {