Создать мульти-выбор с typeahead в EpiServer - PullRequest
1 голос
/ 08 апреля 2020

Мне нужно создать компонент, который по сути позволит редактору выбрать пару пользователей из организации и затем отобразить эту информацию на странице. Информация о пользователях поступает из конечной точки службы REST, но на данный момент это не самая важная информация.

Свойство должно позволять:

  1. выбирать несколько значений
  2. allow typeahead (потому что организация может иметь тысячи пользователей)

Я уже пробовал:

  1. определить свойство как IList<string>, что дает мне приятный пользовательский интерфейс для редактирования, но не имеет заголовка типа:

    public virtual IList<string> Users { get; set; }

  2. создал реализацию для ISelectionQuery, чтобы обеспечить заголовок и фильтрацию для указанного запроса, но это не позволяет несколько значений и переопределяет пользовательский интерфейс и выдает ошибку при сохранении:

    [ServiceConfiguration(typeof(ISelectionQuery))]
    public class UserSelectionQuery : ISelectionQuery
    {
        private readonly SelectItem[] _items;
    
        public UserSelectionQuery()
        {
            _items = new[]
            {
                new SelectItem() {Text = String.Empty, Value = string.Empty},
                new SelectItem() {Text = "John Doe", Value = "john.doe@alloy.com"},
                new SelectItem() {Text = "Jane Doe", Value = "jane.doe@alloy.com"}
    
            };
        }
    
        public ISelectItem GetItemByValue(string value)
        {
            return _items.FirstOrDefault(i => i.Value.Equals(value));
        }
    
    
    
        public IEnumerable<ISelectItem> GetItems(string query)
        {
            return _items.Where(i => i.Text.Contains(query));
        }
    }
    

    Использовал это так:

    [AutoSuggestSelection(typeof(UserSelectionQuery))]
    public virtual IList<string> Users { get; set; }
    

Я бы хотел, чтобы все было просто и максимально использовать возможности OOTB. Я также открыт для предложений, как обойти проблему.

...