in src/commands/askForOptionCommands.ts [25:85]
export async function registerAdvanceAskForChoice(context: ExtensionContext): Promise<void> {
context.subscriptions.push(commands.registerCommand(JavaTestRunnerCommands.ADVANCED_ASK_CLIENT_FOR_CHOICE, async (placeHolder: string, choices: IOption[], advancedAction: string, canPickMany: boolean) => {
let result: string[] | undefined;
const disposables: Disposable[] = [];
try {
result = await new Promise<string[] | undefined>((resolve: (value: string[] | undefined) => void) => {
const quickPick: QuickPick<IOption> = window.createQuickPick<IOption>();
// if all the items are advanced item, show them directly
let showAdvancedItem: boolean = choices.filter((c: IOption) => {
return !c.isAdvanced;
}).length === 0;
quickPick.title = placeHolder;
quickPick.placeholder = placeHolder;
quickPick.items = filterOptions(showAdvancedItem, choices);
quickPick.buttons = getActionButtons(showAdvancedItem, advancedAction);
quickPick.canSelectMany = canPickMany;
quickPick.ignoreFocusOut = true;
disposables.push(quickPick.onDidTriggerButton((btn: QuickInputButton) => {
if (btn.tooltip?.endsWith(advancedAction)) {
showAdvancedItem = !showAdvancedItem;
quickPick.items = filterOptions(showAdvancedItem, choices);
quickPick.buttons = getActionButtons(showAdvancedItem, advancedAction);
}
}));
disposables.push(quickPick.onDidHide(() => {
return resolve(undefined);
}));
disposables.push(quickPick.onDidAccept(() => {
return resolve(quickPick.selectedItems.map((o: IOption) => o.value));
}));
disposables.push(quickPick);
quickPick.show();
});
} finally {
for (const d of disposables) {
d.dispose();
}
}
return result;
}));
function filterOptions(showAdvancedItem: boolean, choices: IOption[]): IOption[] {
return choices.filter((c: IOption) => {
return !c.isAdvanced || showAdvancedItem && c.isAdvanced;
});
}
function getActionButtons(showAdvancedItem: boolean, advancedAction: string): QuickInputButton[] {
if (showAdvancedItem) {
return [{
iconPath: new ThemeIcon('collapse-all'),
tooltip: `Hide ${advancedAction}`,
}];
}
return [{
iconPath: new ThemeIcon('expand-all'),
tooltip: `Show ${advancedAction}`,
}];
}
}