perf(08-02): migrate cover-grid, artists-view, and genres-view virtualizers to repeat() directive

- cover-grid: all 3 virtualizers (single, before-split, after-split) use repeat() with album.ID key
- artists-view uses repeat() with artist.ID key
- genres-view uses repeat() with genre.name key
- Removed gridKeyFunction (now inlined in repeat calls)
- Removed .renderItem and .keyFunction properties from all virtualizers
This commit is contained in:
2026-03-04 23:16:55 -05:00
parent d2d7d8c6ce
commit 1c3514da1d
3 changed files with 28 additions and 27 deletions
@@ -10,6 +10,7 @@ import type {
VisibilityChangedEvent,
} from '@lit-labs/virtualizer';
import { grid } from '@lit-labs/virtualizer/layouts/grid.js';
import { repeat } from 'lit/directives/repeat.js';
import {
GetAlbumsByArtist,
GetAlbumTracks,
@@ -1216,15 +1217,13 @@ export class ArtistsView
>
<lit-virtualizer
.items=${entries}
.renderItem=${(
entry: ArtistEntry,
) =>
this.renderArtistCard(
entry,
)}
.layout=${this.gridLayout}
@visibilityChanged=${this.onVisibilityChanged}
></lit-virtualizer>
>${repeat(
entries,
(entry) => entry.artist.ID,
(entry) => this.renderArtistCard(entry),
)}</lit-virtualizer>
</div>
${this.renderContextMenu()}
`;
@@ -11,6 +11,7 @@ import type {
VisibilityChangedEvent,
} from '@lit-labs/virtualizer';
import { grid } from '@lit-labs/virtualizer/layouts/grid.js';
import { repeat } from 'lit/directives/repeat.js';
import { GetAlbumTracks } from '@go/library/Library';
import { library } from '@go/models';
import { LibraryController } from '@store/controllers/library-controller';
@@ -924,12 +925,6 @@ export class CoverGrid
);
}
private gridKeyFunction = (
entry: GridEntry,
) => {
return `a-${entry.album.ID}`;
};
/* ====================================================================
* Dropdown (expand/collapse)
* ==================================================================== */
@@ -1853,15 +1848,17 @@ export class CoverGrid
<lit-virtualizer
id="grid-single"
.items=${this.buildGridEntries()}
.renderItem=${this.renderGridEntry}
.keyFunction=${this.gridKeyFunction}
.layout=${this.gridLayout}
@click=${this.onGridAlbumClick}
@dblclick=${this.onGridAlbumDblClick}
@keydown=${this.onGridAlbumKeydown}
@contextmenu=${this.onGridAlbumContextMenu}
@visibilityChanged=${this.onVisibilityChanged}
></lit-virtualizer>
>${repeat(
this.buildGridEntries(),
(entry) => entry.album.ID,
(entry) => this.renderGridEntry(entry),
)}</lit-virtualizer>
`;
}
@@ -1880,15 +1877,17 @@ export class CoverGrid
<lit-virtualizer
id="grid-before"
.items=${this.getBeforeEntries()}
.renderItem=${this.renderGridEntry}
.keyFunction=${this.gridKeyFunction}
.layout=${this.gridLayout}
@click=${this.onGridAlbumClick}
@dblclick=${this.onGridAlbumDblClick}
@keydown=${this.onGridAlbumKeydown}
@contextmenu=${this.onGridAlbumContextMenu}
@visibilityChanged=${this.onVisibilityChanged}
></lit-virtualizer>
>${repeat(
this.getBeforeEntries(),
(entry) => entry.album.ID,
(entry) => this.renderGridEntry(entry),
)}</lit-virtualizer>
<album-dropdown
.tracks=${this.expandedTracks}
@@ -1909,14 +1908,16 @@ export class CoverGrid
<lit-virtualizer
id="grid-after"
.items=${afterEntries}
.renderItem=${this.renderGridEntry}
.keyFunction=${this.gridKeyFunction}
.layout=${this.gridLayoutAfter}
@click=${this.onGridAlbumClick}
@dblclick=${this.onGridAlbumDblClick}
@keydown=${this.onGridAlbumKeydown}
@contextmenu=${this.onGridAlbumContextMenu}
></lit-virtualizer>
>${repeat(
afterEntries,
(entry) => entry.album.ID,
(entry) => this.renderGridEntry(entry),
)}</lit-virtualizer>
`
: nothing}
`;
@@ -10,6 +10,7 @@ import type {
VisibilityChangedEvent,
} from '@lit-labs/virtualizer';
import { grid } from '@lit-labs/virtualizer/layouts/grid.js';
import { repeat } from 'lit/directives/repeat.js';
import { GetTracksByGenre } from '@go/library/Library';
import type { library } from '@go/models';
import { LibraryController } from '@store/controllers/library-controller';
@@ -1168,13 +1169,13 @@ export class GenresView
>
<lit-virtualizer
.items=${entries}
.renderItem=${(
entry: GenreEntry,
) =>
this.renderGenreCard(entry)}
.layout=${this.gridLayout}
@visibilityChanged=${this.onVisibilityChanged}
></lit-virtualizer>
>${repeat(
entries,
(entry) => entry.genre.name,
(entry) => this.renderGenreCard(entry),
)}</lit-virtualizer>
</div>
${this.renderContextMenu()}
`;