UNPKG

@furystack/shades-common-components

Version:

72 lines 3.27 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; import { Injectable } from '@furystack/inject'; import { debounce, ObservableValue } from '@furystack/utils'; let CommandPaletteManager = class CommandPaletteManager { commandProviders; isOpened = new ObservableValue(false); isLoading = new ObservableValue(false); term = new ObservableValue(''); selectedIndex = new ObservableValue(0); currentSuggestions = new ObservableValue([]); keyPressListener = ((ev) => { if (ev.key && ev.key.toLowerCase() === 'p' && ev.ctrlKey) { this.isOpened.setValue(true); this.currentSuggestions.setValue([]); } if (ev.key === 'Escape') { this.isOpened.setValue(false); } }).bind(this); [Symbol.dispose]() { window.removeEventListener('keyup', this.keyPressListener); this.isOpened[Symbol.dispose](); this.isLoading[Symbol.dispose](); this.term[Symbol.dispose](); this.selectedIndex[Symbol.dispose](); this.currentSuggestions[Symbol.dispose](); } selectSuggestion(injector, index = this.selectedIndex.getValue()) { const selectedSuggestion = this.currentSuggestions.getValue()[index]; this.isOpened.setValue(false); selectedSuggestion.onSelected({ injector }); } lastGetSuggestionOptions; getSuggestion = debounce(async (options) => { try { if (this.lastGetSuggestionOptions?.term === options.term) { return; } this.isLoading.setValue(true); this.lastGetSuggestionOptions = options; this.currentSuggestions.setValue([]); this.selectedIndex.setValue(0); await Promise.all(this.commandProviders.map(async (cp) => { const value = await cp(options); if (this.lastGetSuggestionOptions === options) { this.currentSuggestions.setValue([...this.currentSuggestions.getValue(), ...value].sortBy('score')); } })); } finally { this.isLoading.setValue(false); } }, 250); constructor(commandProviders) { this.commandProviders = commandProviders; window.addEventListener('keyup', this.keyPressListener, true); } }; CommandPaletteManager = __decorate([ Injectable({ lifetime: 'singleton' }), __metadata("design:paramtypes", [Array]) ], CommandPaletteManager); export { CommandPaletteManager }; //# sourceMappingURL=command-palette-manager.js.map