in src/AWS.Deploy.CLI/ConsoleUtilities.cs [58:114]
public SortedSet<string> AskUserForList<T>(
UserInputConfiguration<T> userInputConfiguration,
List<T> availableData,
OptionSettingItem optionSetting,
Recommendation recommendation)
{
const string ADD = "Add new";
const string DELETE = "Delete existing";
const string NOOP = "No action";
var operations = new List<string> { ADD, DELETE, NOOP };
var currentOptionSettingValue = _optionSettingHandler.GetOptionSettingValue<SortedSet<string>>(recommendation, optionSetting) ?? new SortedSet<string>();
while (true)
{
_interactiveService.WriteLine();
if (currentOptionSettingValue.Any())
{
_interactiveService.WriteLine("Selected values:");
var currentOptionSettingValueList = currentOptionSettingValue.ToList();
for (int i = 1; i <= currentOptionSettingValueList.Count; i++)
{
var padLength = i.ToString().Length;
_interactiveService.WriteLine($"{i.ToString().PadRight(padLength)}: {currentOptionSettingValueList[i-1]}");
}
_interactiveService.WriteLine();
}
var selectedOperation = AskUserToChoose(operations, "Select which operation you want to perform:", NOOP);
_interactiveService.WriteLine();
if (selectedOperation.Equals(ADD))
{
var userResponse = AskUserToChooseOrCreateNew(availableData, "Select value:", userInputConfiguration);
if (userResponse.SelectedOption != null)
currentOptionSettingValue.Add(userInputConfiguration.IDSelector(userResponse.SelectedOption));
}
else if (selectedOperation.Equals(DELETE) && currentOptionSettingValue.Any())
{
var selectedItem = AskUserToChoose(currentOptionSettingValue.ToList(), "Select the value you wish to delete:", null);
currentOptionSettingValue.Remove(selectedItem);
}
else if (selectedOperation.Equals(NOOP))
{
if (userInputConfiguration.CanBeEmpty || currentOptionSettingValue.Any())
break;
else
{
_interactiveService.WriteErrorLine("The list cannot be empty. You must specify at least 1 value.");
}
}
}
_interactiveService.WriteLine();
return currentOptionSettingValue;
}