Ghost/ghost/admin/app/components/gh-search-input-trigger.js

60 lines
1.5 KiB
JavaScript
Raw Normal View History

/* global key */
import Component from '@glimmer/component';
import {action} from '@ember/object';
import {isBlank} from '@ember/utils';
export default class GhSearchInputTrigger extends Component {
@action
registerInput(elem) {
this.inputElem = elem;
}
@action
captureMousedown(e) {
e.stopPropagation();
}
@action
search(event) {
let term = event.target.value;
// open dropdown if not open and term is present
// close dropdown if open and term is blank
if (isBlank(term) === this.args.select.isOpen) {
isBlank(term) ? this.close() : this.open();
// ensure focus isn't lost when dropdown is closed
if (isBlank(term) && this.inputElem) {
this.inputElem.focus();
}
}
this.args.select.actions.search(term);
}
// hacky workaround to let Escape clear the input if there's text,
// but still allow it to close the search modal if there's no text
@action
handleKeydown(e) {
if ((e.key === 'Escape' && e.target.value) || e.key === 'Enter') {
this._previousKeyScope = key.getScope();
key.setScope('ignore');
}
}
@action
handleKeyup() {
if (key.getScope() === 'ignore') {
key.setScope(this._previousKeyScope);
}
}
open() {
this.args.select.actions.open();
}
close() {
this.args.select.actions.close();
}
}