fix(module: select): multiple fixes and optimizations #1087
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
馃 This is a ...
馃敆 Related issue link
#257
#594
#662
#877
#878
#1065
and a number of other issues discovered during fixing.
馃挕 Background and solution
I started fixing the
Select
component because I wanted to fix searchable multiple choice and tags + tokenization. This is fixed now, but there are a lot of changes. There is aHashset
structure that stores all selectable items. I noticed this structure was being traversed very often in multiple different methods. Often the algorithm time complexity for a method was O(2n), O(3n), O(n*n). I decided to introduce new variables to store the items for different scenarios and different parts of the component. I managed to reduce the complexity to mostly O(n) or even O(1). In several places I moved toforeach
loop instead oflinq
loops, just to cover more ground in single loop instead of callinglinq
2 or 3 times.There is still room for optimization. What needs to be done is a very careful tracking of
[Parameter]
properties to see which of them are causing unnecessary component re-rendering.馃摑 Changelog
AllowCustomTags
andOnCreateCustomTag
added
PrefixIcon
鈽戯笍 Self Check before Merge