Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 22 additions & 5 deletions frontend/src/static/js/components/webstatus-typeahead.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import {
type TemplateResult,
css,
html,
nothing,
} from 'lit';
import {customElement, property, state} from 'lit/decorators.js';
import {SHARED_STYLES} from '../css/shared-css.js';
Expand Down Expand Up @@ -289,6 +290,7 @@ export class WebstatusTypeahead extends LitElement {
@click=${(e: Event) => e.preventDefault()}
@sl-select=${this.handleCandidateSelected}
>
<webstatus-typeahead-invisible-item></webstatus-typeahead-invisible-item>
${this.candidates.map(
c => html`
<webstatus-typeahead-item
Expand Down Expand Up @@ -318,7 +320,11 @@ export class WebstatusTypeahead extends LitElement {
@customElement('webstatus-typeahead-dropdown')
export class WebstatusTypeaheadDropdown extends SlDropdown {
getCurrentItem(): SlMenuItem | undefined {
return this.getMenu()!.getCurrentItem();
const item = this.getMenu()!.getCurrentItem();
if (!item || item instanceof WebstatusTypeaheadInvisibleItem) {
return undefined;
}
return item;
}

setCurrentItem(newCurrentItem: SlMenuItem) {
Expand All @@ -327,6 +333,13 @@ export class WebstatusTypeaheadDropdown extends SlDropdown {
newCurrentItem.scrollIntoView({block: 'nearest', behavior: 'smooth'});
}

getAllVisibleItems(menu: SlMenu): SlMenuItem[] {
const items = menu.getAllItems();
return items.filter(
item => !(item instanceof WebstatusTypeaheadInvisibleItem),
);
}

resetSelection() {
const currentItem = this.getCurrentItem();
currentItem?.setAttribute('tabindex', '-1');
Expand All @@ -337,10 +350,7 @@ export class WebstatusTypeaheadDropdown extends SlDropdown {
if (!menu) {
return;
}
const menuItems = menu.getAllItems();
if (menuItems.length === 0) {
return;
}
const menuItems = this.getAllVisibleItems(menu);
const currentItem = menu.getCurrentItem();

// Handle menu selection keys.
Expand Down Expand Up @@ -480,3 +490,10 @@ export class WebstatusTypeaheadItem extends LitElement {
`;
}
}

@customElement('webstatus-typeahead-invisible-item')
export class WebstatusTypeaheadInvisibleItem extends WebstatusTypeaheadItem {
override render(): TemplateResult {
return html`${nothing}`;
}
}