From 1595805b832e1352eebe6c179cc885f36df822f1 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Wed, 11 Mar 2026 19:12:11 -0700 Subject: [PATCH] add additional render optimizations to ArtistAlbums --- .../album-artist-detail-content.tsx | 96 +++++++++---------- 1 file changed, 47 insertions(+), 49 deletions(-) diff --git a/src/renderer/features/artists/components/album-artist-detail-content.tsx b/src/renderer/features/artists/components/album-artist-detail-content.tsx index b777d1729..1918be81a 100644 --- a/src/renderer/features/artists/components/album-artist-detail-content.tsx +++ b/src/renderer/features/artists/components/album-artist-detail-content.tsx @@ -4,8 +4,8 @@ import { useSuspenseQuery, UseSuspenseQueryResult, } from '@tanstack/react-query'; -import { LayoutGroup, motion } from 'motion/react'; -import { Suspense, useCallback, useMemo, useRef, useState } from 'react'; +import { motion } from 'motion/react'; +import { memo, Suspense, useCallback, useMemo, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { createSearchParams, generatePath, Link, useLocation, useParams } from 'react-router'; @@ -1182,8 +1182,8 @@ export const AlbumArtistDetailContent = ({ interface AlbumSectionProps { albums: Album[]; controls: ItemControls; - cq: ReturnType; enableExpansion?: boolean; + itemsPerRow: number; releaseType: string; rows: DataRow[] | undefined; title: React.ReactNode | string; @@ -1203,18 +1203,16 @@ const getItemsPerRow = (cq: ReturnType) => { return 2; }; -const AlbumSection = ({ +const AlbumSection = memo(function AlbumSection({ albums, controls, - cq, enableExpansion, + itemsPerRow, releaseType, rows, title, -}: AlbumSectionProps) => { +}: AlbumSectionProps) { const { t } = useTranslation(); - - const itemsPerRow = getItemsPerRow(cq); const albumCount = albums.length; const [showAll, setShowAll] = useState(false); const player = usePlayer(); @@ -1259,6 +1257,27 @@ const AlbumSection = ({ }, }); + const DisplayedAlbumsMemo = useMemo(() => { + return displayedAlbums.map((album) => ( + + + + )); + }, [controls, displayedAlbums, enableExpansion, releaseType, rows]); + return (
@@ -1320,30 +1339,7 @@ const AlbumSection = ({ } as React.CSSProperties } > - {displayedAlbums.map((album) => ( - - - - ))} + {DisplayedAlbumsMemo}
{hasMoreAlbums && !showAll && ( @@ -1354,7 +1350,7 @@ const AlbumSection = ({ )}
); -}; +}); import { useArtistAlbumsGrouped } from '/@/renderer/features/artists/hooks/use-artist-albums-grouped'; @@ -1412,6 +1408,23 @@ const ArtistAlbums = ({ albumsQuery, order }: ArtistAlbumsProps) => { ], ]); + const itemsPerRow = getItemsPerRow(cq); + + const ReleaseTypeEntriesMemo = useMemo(() => { + return releaseTypeEntries.map(({ albums, displayName, releaseType }) => ( + + )); + }, [releaseTypeEntries, itemsPerRow, controls, rows]); + return ( @@ -1459,22 +1472,7 @@ const ArtistAlbums = ({ albumsQuery, order }: ArtistAlbumsProps) => { {releaseTypeEntries.length > 0 && (
- {cq.isCalculated && ( - - {releaseTypeEntries.map(({ albums, displayName, releaseType }) => ( - - ))} - - )} + {cq.isCalculated && <>{ReleaseTypeEntriesMemo}}
)}