NOTA: Este problema potencialmente resolve alguns problemas de desempenho identificados em #843 (e outros).
Sua solicitação de recurso está relacionada a um problema?
O atual Dropdown/Multiselect que enviamos com o IDS foi criado como uma camada de interação sobre o elemento HTML padrão <select>
, manipulando a seleção de suas opções em configurações simples/múltiplas.
Os casos de uso para este componente aumentaram ao longo do tempo para incluir a filtragem das opções disponíveis, o que levou as equipes a usar o menu suspenso/multiseleção para conjuntos de dados extremamente grandes (superando mais de 2.000 itens por vez, em alguns casos). Embora nossa equipe afirme que não recomendamos o uso desse componente para conjuntos de dados tão grandes, continuamos a ter problemas solicitando que abordemos o desempenho nesses níveis. Alguns problemas anteriores que corrigimos incluem:
Muitas dessas questões deixam a ressalva de "isso ainda não é ótimo, mas é melhor". A razão para isso é porque o design do Dropdown/Multiselect em seu núcleo não se adapta bem a conjuntos de dados tão grandes. Se quisermos corrigir problemas de desempenho, precisamos abordar os fundamentos de seu design.
Descreva a solução que você deseja
Um possível caminho de solução para corrigir o desempenho do Dropdown/Multiselect:
<select>
como a fonte de dados primária. Algumas melhorias recentes de #267 começaram a mapear como uma chamada AJAX pode gerar um objeto de dados para Dropdown que podemos armazenar no cliente. Acho que devemos avançar para o uso de um objeto com alguns estados simples (desativado/selecionado/etc) como o principal driver do comportamento do componente, em vez de pegar essas informações de um elemento DOM. A renderização da tag <select>
e seus <option>
s ainda serão necessários para coisas como envio de formulários, mas devemos definir o objeto de dados como a "fonte da verdade" e desenhar a tag select com base no objeto (não vice-versa).<select>
em nenhum sentido. Pode ser um caso de uso razoável para um desenvolvedor que utiliza o Dropdown/Multiselect com tantos itens para simplesmente interceptar uma solicitação de envio de formulário e enviar o estado do objeto de fonte de dados em vez de depender do processo normal de envio de formulário. Atualmente, esse tipo de uso não é possível.Descreva as alternativas que você considerou
Algumas outras ideias que já sugerimos no passado:
<select>
e as estiliza, em vez de gerar pseudo-marcações para interações. Isso pode ser capaz de lidar melhor com a lista maior, pois não a duplicaria. Ainda teríamos que lidar com 2.000 elementos de uma só vez neste caso.Também poderíamos implementar um recurso genérico de rolagem virtual e aplicá-lo a vários componentes. https://github.com/infor-design/enterprise/issues/460
@tmcconechy Vejo isso acontecendo com muito mais facilidade quando removemos a dependência da tag <select>
.
Tudo o que importa é o elemento selecionado. Então eu acho que o dom conteria apenas um select com apenas o elemento selecionado nele e poderia satisfazer os dois casos.
Fechando isso em favor de https://github.com/infor-design/enterprise/issues/1463