diff --git a/src/renderer/components/item-list/item-grid-list/item-grid-list.tsx b/src/renderer/components/item-list/item-grid-list/item-grid-list.tsx index ef5511ac4..3a7d39397 100644 --- a/src/renderer/components/item-list/item-grid-list/item-grid-list.tsx +++ b/src/renderer/components/item-list/item-grid-list/item-grid-list.tsx @@ -179,6 +179,7 @@ export interface GridItemProps { } export interface ItemGridListProps { + currentPage?: number; data: unknown[]; enableExpansion?: boolean; enableSelection?: boolean; @@ -199,6 +200,7 @@ export interface ItemGridListProps { } export const ItemGridList = ({ + currentPage, data, enableExpansion = true, enableSelection = true, @@ -331,8 +333,23 @@ export const ItemGridList = ({ ], ); + // Scroll to top when currentPage changes + useEffect(() => { + if (currentPage !== undefined && tableMeta?.itemHeight) { + scrollToGridOffset(0); + } + }, [currentPage, scrollToGridOffset, tableMeta?.itemHeight]); + useEffect(() => { if (!initialTop || isInitialScrollPositionSet.current || !tableMeta?.itemHeight) return; + + // Only set initial scroll position if we haven't done it yet AND we're not on a page change + // This prevents the initial scroll position from being restored on every page change + if (currentPage !== undefined && currentPage > 0) { + isInitialScrollPositionSet.current = true; + return; + } + isInitialScrollPositionSet.current = true; if (initialTop.type === 'offset') { @@ -343,7 +360,7 @@ export const ItemGridList = ({ index: initialTop.to, }); } - }, [initialTop, itemGridRef, scrollToGridOffset, tableMeta?.itemHeight]); + }, [initialTop, itemGridRef, scrollToGridOffset, tableMeta?.itemHeight, currentPage]); const imperativeHandle: ItemListHandle = useMemo(() => { return { diff --git a/src/renderer/components/item-list/item-table-list/item-table-list.tsx b/src/renderer/components/item-list/item-table-list/item-table-list.tsx index fafe4ce52..f30aac050 100644 --- a/src/renderer/components/item-list/item-table-list/item-table-list.tsx +++ b/src/renderer/components/item-list/item-table-list/item-table-list.tsx @@ -403,6 +403,7 @@ interface ItemTableListProps { CellComponent: JSXElementConstructor>; cellPadding?: 'lg' | 'md' | 'sm' | 'xl' | 'xs'; columns: ItemTableListColumnConfig[]; + currentPage?: number; data: unknown[]; enableAlternateRowColors?: boolean; enableExpansion?: boolean; @@ -435,6 +436,7 @@ export const ItemTableList = ({ CellComponent, cellPadding = 'sm', columns, + currentPage, data, enableAlternateRowColors = false, enableExpansion = true, @@ -1079,6 +1081,13 @@ export const ItemTableList = ({ } }, [initialTop, scrollToTableIndex, scrollToTableOffset]); + // Scroll to top when currentPage changes + useEffect(() => { + if (currentPage !== undefined) { + scrollToTableOffset(0); + } + }, [currentPage, scrollToTableOffset]); + const imperativeHandle: ItemListHandle = useMemo(() => { return { clearExpanded: () => { diff --git a/src/renderer/features/albums/components/album-list-paginated-grid.tsx b/src/renderer/features/albums/components/album-list-paginated-grid.tsx index 93c3d2327..48af9cf34 100644 --- a/src/renderer/features/albums/components/album-list-paginated-grid.tsx +++ b/src/renderer/features/albums/components/album-list-paginated-grid.tsx @@ -64,6 +64,7 @@ export const AlbumListPaginatedGrid = forwardRef pageCount={pageCount} totalItemCount={totalItemCount} > - + ); }, diff --git a/src/renderer/features/songs/components/song-list-paginated-table.tsx b/src/renderer/features/songs/components/song-list-paginated-table.tsx index 11956f9a4..8f4ea8148 100644 --- a/src/renderer/features/songs/components/song-list-paginated-table.tsx +++ b/src/renderer/features/songs/components/song-list-paginated-table.tsx @@ -68,6 +68,7 @@ export const SongListPaginatedTable = forwardRef