public SortedSet AskUserForList()

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;
        }