in src/plugins/shared/clusterOptions/selectClusterOptions.ts [26:89]
export async function selectClusterOptions(
sessionProvider: ReadyAzureSessionProvider,
exclude?: SelectClusterOptions[],
commandId?: CommandIdForPluginResponse,
): Promise<Errorable<ClusterPreference | boolean>> {
const options = getClusterOptions();
let recentCluster: Errorable<ClusterPreference> | undefined;
try {
if (await RecentCluster.doesRecentlyUsedClusterExist()) {
recentCluster = await RecentCluster.getRecentCluster();
} else {
options.splice(0, 2); // Remove recent cluster options and separator
}
} catch {
// Ignore error if recent cluster does not exist
}
// Exclude specified cluster types if needed
if (exclude?.length) {
for (let i = options.length - 1; i >= 0; i--) {
if (exclude.includes(options[i].type)) {
options.splice(i, 1);
}
}
}
const quickPickClusterOptions: QuickPickClusterOptions[] = options.map((option) => {
const isRecentCluster = option.type === SelectClusterOptions.RecentCluster;
const isSeperator = option.label === "";
const label =
isSeperator && isRecentCluster && recentCluster?.succeeded
? recentCluster.result.clusterName
: option.label;
return {
label,
type: option.type,
kind: isSeperator ? QuickPickItemKind.Separator : QuickPickItemKind.Default,
};
});
const selectedOption = await window.showQuickPick(quickPickClusterOptions, {
canPickMany: false,
placeHolder: "Select option",
});
if (!selectedOption) {
return { succeeded: false, error: "Cluster option not selected." };
}
logGitHubCopilotPluginEvent({ clusterOptionSelected: selectedOption.type, commandId: commandId });
switch (selectedOption.type) {
case SelectClusterOptions.RecentCluster:
return await selectRecentClusterOption();
case SelectClusterOptions.ExistingCluster:
return await selectExistingClusterOption(sessionProvider);
case SelectClusterOptions.NewCluster:
return await selectNewClusterOption();
default:
return { succeeded: false, error: "Invalid cluster option selected." };
}
}