提交 aae33579 编写于 作者: C Christof Marti

T extends QuickPickItem (#49340)

上级 ede8a0f3
......@@ -109,7 +109,7 @@ export interface IQuickInput {
dispose(): void;
}
export interface IQuickPick extends IQuickInput {
export interface IQuickPick<T extends IQuickPickItem> extends IQuickInput {
value: string;
......@@ -123,7 +123,7 @@ export interface IQuickPick extends IQuickInput {
readonly onDidTriggerButton: Event<IQuickInputButton>;
items: ReadonlyArray<IQuickPickItem>;
items: ReadonlyArray<T>;
canSelectMany: boolean;
......@@ -131,13 +131,13 @@ export interface IQuickPick extends IQuickInput {
matchOnDetail: boolean;
activeItems: ReadonlyArray<IQuickPickItem>;
activeItems: ReadonlyArray<T>;
readonly onDidChangeActive: Event<IQuickPickItem[]>;
readonly onDidChangeActive: Event<T[]>;
selectedItems: ReadonlyArray<IQuickPickItem>;
selectedItems: ReadonlyArray<T>;
readonly onDidChangeSelection: Event<IQuickPickItem[]>;
readonly onDidChangeSelection: Event<T[]>;
}
export interface IInputBox extends IQuickInput {
......@@ -186,7 +186,7 @@ export interface IQuickInputService {
backButton: IQuickInputButton;
createQuickPick(): IQuickPick;
createQuickPick<T extends IQuickPickItem>(): IQuickPick<T>;
createInputBox(): IInputBox;
focus(): void;
......
......@@ -525,7 +525,7 @@ declare module 'vscode' {
export const quickInputBackButton: QuickInputButton;
export function createQuickPick(): QuickPick;
export function createQuickPick<T extends QuickPickItem>(): QuickPick<T>;
export function createInputBox(): InputBox;
}
......@@ -553,7 +553,7 @@ declare module 'vscode' {
dispose(): void;
}
export interface QuickPick extends QuickInput {
export interface QuickPick<T extends QuickPickItem> extends QuickInput {
value: string;
......@@ -567,7 +567,7 @@ declare module 'vscode' {
readonly onDidTriggerButton: Event<QuickInputButton>;
items: ReadonlyArray<QuickPickItem>;
items: ReadonlyArray<T>;
canSelectMany: boolean;
......@@ -575,13 +575,13 @@ declare module 'vscode' {
matchOnDetail: boolean;
activeItems: ReadonlyArray<QuickPickItem>;
activeItems: ReadonlyArray<T>;
readonly onDidChangeActive: Event<QuickPickItem[]>;
readonly onDidChangeActive: Event<T[]>;
selectedItems: ReadonlyArray<QuickPickItem>;
selectedItems: ReadonlyArray<T>;
readonly onDidChangeSelection: Event<QuickPickItem[]>;
readonly onDidChangeSelection: Event<T[]>;
}
export interface InputBox extends QuickInput {
......
......@@ -460,7 +460,7 @@ export function createApiFactory(
return extHostQuickOpen.backButton;
})();
},
createQuickPick: proposedApiFunction(extension, (): vscode.QuickPick => {
createQuickPick: proposedApiFunction(extension, <T extends vscode.QuickPickItem>(): vscode.QuickPick<T> => {
return extHostQuickOpen.createQuickPick(extension.id);
}),
createInputBox: proposedApiFunction(extension, (): vscode.InputBox => {
......
......@@ -155,7 +155,7 @@ export class ExtHostQuickOpen implements ExtHostQuickOpenShape {
backButton = backButton;
createQuickPick(extensionId: string): QuickPick {
createQuickPick<T extends QuickPickItem>(extensionId: string): QuickPick<T> {
const session = new ExtHostQuickPick(this._proxy, extensionId, () => this._sessions.delete(session._id));
this._sessions.set(session._id, session);
return session;
......@@ -451,18 +451,18 @@ function getIconUri(iconPath: string | URI) {
return URI.file(iconPath);
}
class ExtHostQuickPick extends ExtHostQuickInput implements QuickPick {
class ExtHostQuickPick<T extends QuickPickItem> extends ExtHostQuickInput implements QuickPick<T> {
private _items: QuickPickItem[] = [];
private _handlesToItems = new Map<number, QuickPickItem>();
private _itemsToHandles = new Map<QuickPickItem, number>();
private _items: T[] = [];
private _handlesToItems = new Map<number, T>();
private _itemsToHandles = new Map<T, number>();
private _canSelectMany = false;
private _matchOnDescription = true;
private _matchOnDetail = true;
private _activeItems: QuickPickItem[] = [];
private _onDidChangeActiveEmitter = new Emitter<QuickPickItem[]>();
private _selectedItems: QuickPickItem[] = [];
private _onDidChangeSelectionEmitter = new Emitter<QuickPickItem[]>();
private _activeItems: T[] = [];
private _onDidChangeActiveEmitter = new Emitter<T[]>();
private _selectedItems: T[] = [];
private _onDidChangeSelectionEmitter = new Emitter<T[]>();
constructor(proxy: MainThreadQuickOpenShape, extensionId: string, onDispose: () => void) {
super(proxy, extensionId, onDispose);
......@@ -477,7 +477,7 @@ class ExtHostQuickPick extends ExtHostQuickInput implements QuickPick {
return this._items;
}
set items(items: QuickPickItem[]) {
set items(items: T[]) {
this._items = items.slice();
this._handlesToItems.clear();
this._itemsToHandles.clear();
......@@ -527,7 +527,7 @@ class ExtHostQuickPick extends ExtHostQuickInput implements QuickPick {
return this._activeItems;
}
set activeItems(activeItems: QuickPickItem[]) {
set activeItems(activeItems: T[]) {
this._activeItems = activeItems.filter(item => this._itemsToHandles.has(item));
this.update({ activeItems: this._activeItems.map(item => this._itemsToHandles.get(item)) });
}
......@@ -538,7 +538,7 @@ class ExtHostQuickPick extends ExtHostQuickInput implements QuickPick {
return this._selectedItems;
}
set selectedItems(selectedItems: QuickPickItem[]) {
set selectedItems(selectedItems: T[]) {
this._selectedItems = selectedItems.filter(item => this._itemsToHandles.has(item));
this.update({ selectedItems: this._selectedItems.map(item => this._itemsToHandles.get(item)) });
}
......
......@@ -276,23 +276,23 @@ class QuickInput implements IQuickInput {
}
}
class QuickPick extends QuickInput implements IQuickPick {
class QuickPick<T extends IQuickPickItem> extends QuickInput implements IQuickPick<T> {
private _value = '';
private _placeholder;
private onDidChangeValueEmitter = new Emitter<string>();
private onDidAcceptEmitter = new Emitter<string>();
private _items: IQuickPickItem[] = [];
private _items: T[] = [];
private itemsUpdated = false;
private _canSelectMany = false;
private _matchOnDescription = true;
private _matchOnDetail = true;
private _activeItems: IQuickPickItem[] = [];
private _activeItems: T[] = [];
private activeItemsUpdated = false;
private onDidChangeActiveEmitter = new Emitter<IQuickPickItem[]>();
private _selectedItems: IQuickPickItem[] = [];
private onDidChangeActiveEmitter = new Emitter<T[]>();
private _selectedItems: T[] = [];
private selectedItemsUpdated = false;
private onDidChangeSelectionEmitter = new Emitter<IQuickPickItem[]>();
private onDidChangeSelectionEmitter = new Emitter<T[]>();
private quickNavigate = false;
constructor(ui: QuickInputUI) {
......@@ -331,7 +331,7 @@ class QuickPick extends QuickInput implements IQuickPick {
return this._items;
}
set items(items: IQuickPickItem[]) {
set items(items: T[]) {
this._items = items;
this.itemsUpdated = true;
this.update();
......@@ -368,7 +368,7 @@ class QuickPick extends QuickInput implements IQuickPick {
return this._activeItems;
}
set activeItems(activeItems: IQuickPickItem[]) {
set activeItems(activeItems: T[]) {
this._activeItems = activeItems;
this.activeItemsUpdated = true;
this.update();
......@@ -380,7 +380,7 @@ class QuickPick extends QuickInput implements IQuickPick {
return this._selectedItems;
}
set selectedItems(selectedItems: IQuickPickItem[]) {
set selectedItems(selectedItems: T[]) {
this._selectedItems = selectedItems;
this.selectedItemsUpdated = true;
this.update();
......@@ -433,8 +433,8 @@ class QuickPick extends QuickInput implements IQuickPick {
if (!focusedItems.length && !this._activeItems.length) {
return;
}
this._activeItems = focusedItems;
this.onDidChangeActiveEmitter.fire(focusedItems);
this._activeItems = focusedItems as T[];
this.onDidChangeActiveEmitter.fire(focusedItems as T[]);
}),
this.ui.list.onDidChangeSelection(selectedItems => {
if (this.canSelectMany) {
......@@ -444,16 +444,16 @@ class QuickPick extends QuickInput implements IQuickPick {
if (!selectedItems.length && !this._selectedItems.length) {
return;
}
this._selectedItems = selectedItems;
this.onDidChangeSelectionEmitter.fire(selectedItems);
this._selectedItems = selectedItems as T[];
this.onDidChangeSelectionEmitter.fire(selectedItems as T[]);
this.onDidAcceptEmitter.fire();
}),
this.ui.list.onChangedCheckedElements(checkedItems => {
if (!this.canSelectMany) {
return;
}
this._selectedItems = checkedItems;
this.onDidChangeSelectionEmitter.fire(checkedItems);
this._selectedItems = checkedItems as T[];
this.onDidChangeSelectionEmitter.fire(checkedItems as T[]);
}),
);
}
......@@ -893,12 +893,12 @@ export class QuickInputService extends Component implements IQuickInputService {
resolve(undefined);
return;
}
const input = this.createQuickPick();
const input = this.createQuickPick<T>();
const disposables = [
input,
input.onDidAccept(() => {
if (input.canSelectMany) {
resolve(<any>input.selectedItems); // TODO: generify interface to use T extends IQuickPickItem
resolve(<any>input.selectedItems.slice());
input.hide();
} else {
const result = input.activeItems[0];
......@@ -1005,9 +1005,9 @@ export class QuickInputService extends Component implements IQuickInputService {
backButton = backButton;
createQuickPick(): IQuickPick {
createQuickPick<T extends IQuickPickItem>(): IQuickPick<T> {
this.create();
return new QuickPick(this.ui);
return new QuickPick<T>(this.ui);
}
createInputBox(): IInputBox {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册