@theia/core
Version:
Theia is a cloud & desktop IDE framework implemented in TypeScript.
70 lines (56 loc) • 3.61 kB
text/typescript
// *****************************************************************************
// Copyright (C) 2018 TypeFox and others.
//
// This program and the accompanying materials are made available under the
// terms of the Eclipse Public License v. 2.0 which is available at
// http://www.eclipse.org/legal/epl-2.0.
//
// This Source Code may also be made available under the following Secondary
// Licenses when the conditions for such availability set forth in the Eclipse
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
// with the GNU Classpath Exception which is available at
// https://www.gnu.org/software/classpath/license.html.
//
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
// *****************************************************************************
import { injectable, inject, optional } from 'inversify';
import { Emitter } from '../../common/event';
import { QuickPickSeparator, QuickPickService } from '../../common/quick-pick-service';
import { QuickInputService, QuickPickItem, QuickInputButtonHandle, QuickPick, QuickPickOptions } from './quick-input-service';
()
export class QuickPickServiceImpl implements QuickPickService {
(QuickInputService) ()
protected readonly quickInputService: QuickInputService;
private readonly onDidHideEmitter = new Emitter<void>();
readonly onDidHide = this.onDidHideEmitter.event;
private readonly onDidChangeValueEmitter = new Emitter<{ quickPick: QuickPick<QuickPickItem>, filter: string }>();
readonly onDidChangeValue = this.onDidChangeValueEmitter.event;
private readonly onDidAcceptEmitter = new Emitter<void>();
readonly onDidAccept = this.onDidAcceptEmitter.event;
private readonly onDidChangeActiveEmitter = new Emitter<{ quickPick: QuickPick<QuickPickItem>, activeItems: Array<QuickPickItem> }>();
readonly onDidChangeActive = this.onDidChangeActiveEmitter.event;
private readonly onDidChangeSelectionEmitter = new Emitter<{ quickPick: QuickPick<QuickPickItem>, selectedItems: Array<QuickPickItem> }>();
readonly onDidChangeSelection = this.onDidChangeSelectionEmitter.event;
private readonly onDidTriggerButtonEmitter = new Emitter<QuickInputButtonHandle>();
readonly onDidTriggerButton = this.onDidTriggerButtonEmitter.event;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
private items: Array<any> = [];
async show<T extends QuickPickItem>(items: Array<T | QuickPickSeparator>, options?: QuickPickOptions<T>): Promise<T | undefined> {
this.items = items;
const opts = Object.assign({}, options, {
onDidAccept: () => this.onDidAcceptEmitter.fire(),
onDidChangeActive: (quickPick: QuickPick<T>, activeItems: Array<QuickPickItem>) => this.onDidChangeActiveEmitter.fire({ quickPick, activeItems }),
onDidChangeSelection: (quickPick: QuickPick<T>, selectedItems: Array<QuickPickItem>) => this.onDidChangeSelectionEmitter.fire({ quickPick, selectedItems }),
onDidChangeValue: (quickPick: QuickPick<T>, filter: string) => this.onDidChangeValueEmitter.fire({ quickPick, filter }),
onDidHide: () => this.onDidHideEmitter.fire(),
onDidTriggerButton: (btn: QuickInputButtonHandle) => this.onDidTriggerButtonEmitter.fire(btn),
});
return this.quickInputService?.showQuickPick<T>(this.items, opts);
}
hide(): void {
this.quickInputService?.hide();
}
setItems<T>(items: Array<QuickPickItem>): void {
this.items = items;
}
}