import { on } from '@ember/modifier'; import { action } from '@ember/object'; import { guidFor } from '@ember/object/internals'; import Component from '@glimmer/component'; import { tracked } from '@glimmer/tracking'; import onClickOutside from 'ember-click-outside/modifiers/on-click-outside'; import onArrowDownUpAction from '../modifiers/on-arrow-down-up-action'; import onEscapeAction from '../modifiers/on-escape-action'; import PixButton from './pix-button'; import PixFloating from './pix-floating'; import PixSelectList from './pix-select-list'; export default class PixStructureSwitcher extends Component { constructor(...args) { super(...args); this.switcherId = 'structure-switcher-' + guidFor(this); this.listId = `listbox-${this.switcherId}`; } @tracked isMenuOpen = false; @action toggleMenu() { this.isMenuOpen = !this.isMenuOpen; } @action onSelectListChange(structure, event) { this.args.onChange(structure); this.closeMenu(event); document.getElementById(this.switcherId).focus(); } @action openMenu(event) { if (this.isMenuOpen) return; event.preventDefault(); this.isMenuOpen = true; } @action closeMenu(event) { if (!this.isMenuOpen) return; event.preventDefault(); this.isMenuOpen = false; } @action lockTab(event) { if (event.code === 'Tab' && this.isMenuOpen) { event.preventDefault(); } } @action focus() { document.getElementById(this.listId).querySelector("[aria-selected='true']").focus(); } }