Skip to content

Commit 713c17a

Browse files
authored
feat(material-icons-extended): add fuzzy search and improve performance (#3835)
1 parent 59b8b00 commit 713c17a

6 files changed

Lines changed: 169 additions & 65 deletions

File tree

live-editing/configs/IconConfigGenerator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export class IconConfigGenerator implements IConfigGenerator {
5555
configs.push(new Config({
5656
component: 'MaterialIconsExtendedComponent',
5757
appConfig: BaseAppConfig,
58-
additionalDependencies: ['file-saver', '@igniteui/material-icons-extended'],
58+
additionalDependencies: ['file-saver', '@igniteui/material-icons-extended', 'fuse.js'],
5959
shortenComponentPathBy: "/data-display/icon/"
6060
}));
6161

package-lock.json

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
"dompurify": "^3.2.7",
7272
"express": "^4.18.2",
7373
"file-saver": "^2.0.2",
74+
"fuse.js": "^7.1.0",
7475
"hammerjs": "^2.0.8",
7576
"igniteui-angular": "^21.0.0",
7677
"igniteui-angular-charts": "^20.2.0",

src/app/data-display/icon/material-icons-extended/material-icons-extended.component.html

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
[value]="selectedCategory"
88
>
99
<label igxLabel>Select category</label>
10-
@for (option of categories; track option) {
10+
@for (option of categories; track option.category) {
1111
<igx-select-item
1212
[value]="option.category"
1313
>
@@ -17,39 +17,37 @@
1717
</igx-select>
1818
</div>
1919
<igx-input-group class="sample__header-search" type="search">
20-
<input #input igxInput placeholder="Search by icon name or keyword" />
20+
<input #input igxInput placeholder="Search by icon name or keyword" (input)="onSearchInput(input.value)" />
2121
<igx-prefix>
2222
<igx-icon>search</igx-icon>
2323
</igx-prefix>
2424
@if (input.value.length > 0) {
2525
<igx-suffix
26-
(click)="input.value = ''"
26+
(click)="input.value = ''; clearSearch()"
2727
>
2828
<igx-icon>clear</igx-icon>
2929
</igx-suffix>
3030
}
3131
</igx-input-group>
3232
</div>
3333
<div class="sample__body">
34-
@if ((allIcons | filterByName: input.value | categoriesFilter: selectedCategory); as fResults) {
35-
@for (group of fResults; track group) {
34+
@if (filteredResults$ | async; as fResults) {
35+
@for (group of fResults; track trackByCategory($index, group)) {
3636
<article class="sample__body-inner">
3737
<header class="sample__body-title">
3838
{{ group.category }}
3939
</header>
4040
<section class="sample__body-section">
4141
<div class="sample__grid">
42-
@for (icon of group.icons; track icon) {
42+
@for (icon of group.icons; track trackByIcon($index, icon)) {
4343
<div
4444
class="sample__grid-item"
45+
(mouseenter)="onIconMouseEnter(icon)"
46+
(mouseleave)="onIconMouseLeave()"
4547
>
4648
<button
4749
[value]="icon.name"
48-
[title]="
49-
'Copy &quot;' +
50-
icon.name +
51-
'&quot; to clipboard'
52-
"
50+
[title]="'Copy &quot;' + icon.name + '&quot; to clipboard'"
5351
(click)="copyValue($event, icon.name)"
5452
class="sample__grid-item-clipboard"
5553
>
@@ -59,25 +57,26 @@
5957
<igx-icon
6058
class="sample__grid-icon"
6159
family="imx-icons"
62-
name="{{ icon.name }}"
63-
></igx-icon>
60+
[name]="icon.name">
61+
</igx-icon>
6462
<span
6563
class="sample__grid-icon-name"
66-
title="{{ icon.name }}"
67-
>{{ icon.name }}</span
68-
>
69-
</div>
64+
[title]="icon.name">
65+
{{ icon.name }}
66+
</span>
67+
</div>
68+
@if (hoveredIcon === icon) {
7069
<button
7170
(click)="downloadFile(icon)"
72-
igxripple
7371
class="sample__grid-item-download"
7472
igxButton="contained"
75-
>
73+
igxRipple>
7674
<igx-icon>arrow_downward</igx-icon>
7775
<span>SVG</span>
7876
</button>
79-
</div>
80-
}
77+
}
78+
</div>
79+
}
8180
</div>
8281
</section>
8382
</article>

src/app/data-display/icon/material-icons-extended/material-icons-extended.component.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ $clipboardSuccessColor: color($color: 'success');
152152
padding: $grid-item-padding;
153153
position: relative;
154154
border: $grid-item-border-width solid transparent;
155+
contain: layout;
155156

156157
&:hover,
157158
&:focus {

0 commit comments

Comments
 (0)