From 36aa822455998eb723bf9f188131c814c62704bd Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Wed, 30 Apr 2025 02:40:05 +0200 Subject: [PATCH] Use window scroll for grouped virtuosos --- src/modules/browse/screens/Browse.tsx | 2 ++ src/modules/core/AppRoute.constants.ts | 2 ++ .../virtuoso/StyledGroupedVirtuoso.tsx | 23 +++++++++++++++++-- src/modules/history/screens/History.tsx | 4 ---- src/modules/updates/screens/Updates.tsx | 10 ++++---- 5 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/modules/browse/screens/Browse.tsx b/src/modules/browse/screens/Browse.tsx index 619795c2..7d1b884f 100644 --- a/src/modules/browse/screens/Browse.tsx +++ b/src/modules/browse/screens/Browse.tsx @@ -18,6 +18,7 @@ import { TabsMenu } from '@/modules/core/components/tabs/TabsMenu.tsx'; import { Migration } from '@/modules/migration/screens/Migration.tsx'; import { useResizeObserver } from '@/modules/core/hooks/useResizeObserver.tsx'; import { useNavBarContext } from '@/modules/navigation-bar/contexts/NavbarContext.tsx'; +import { GROUPED_VIRTUOSO_Z_INDEX } from '@/modules/core/AppRoute.constants.ts'; enum Tabs { SOURCE = 'source', @@ -51,6 +52,7 @@ export function Browse() { setTabSearchParam(newTab, 'replaceIn')} diff --git a/src/modules/core/AppRoute.constants.ts b/src/modules/core/AppRoute.constants.ts index 1fb52f22..1797e29b 100644 --- a/src/modules/core/AppRoute.constants.ts +++ b/src/modules/core/AppRoute.constants.ts @@ -181,3 +181,5 @@ type ExtractStringPaths = T extends { path: infer P } : ExtractChildRouteStringPaths; export type StaticAppRoute = ExtractStringPaths<(typeof AppRoutes)[keyof typeof AppRoutes]>; + +export const GROUPED_VIRTUOSO_Z_INDEX = 2; diff --git a/src/modules/core/components/virtuoso/StyledGroupedVirtuoso.tsx b/src/modules/core/components/virtuoso/StyledGroupedVirtuoso.tsx index 5da4a647..b18415dd 100644 --- a/src/modules/core/components/virtuoso/StyledGroupedVirtuoso.tsx +++ b/src/modules/core/components/virtuoso/StyledGroupedVirtuoso.tsx @@ -6,10 +6,19 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { GroupedVirtuoso } from 'react-virtuoso'; -import { ComponentProps } from 'react'; +import { ContextProp, GroupedVirtuoso, TopItemListProps } from 'react-virtuoso'; +import { ComponentProps, useMemo } from 'react'; +import Box from '@mui/material/Box'; import { useNavBarContext } from '@/modules/navigation-bar/contexts/NavbarContext.tsx'; +const StickyVirtuosoHeaderWithOffset = + (topOffset: number) => + ({ children, ...args }: TopItemListProps & ContextProp) => ( + + {children} + + ); + export const StyledGroupedVirtuoso = ({ heightToSubtract = 0, style, @@ -17,9 +26,19 @@ export const StyledGroupedVirtuoso = ({ }: ComponentProps & { heightToSubtract?: number }) => { const { appBarHeight, bottomBarHeight } = useNavBarContext(); + const TopItemList = useMemo( + () => StickyVirtuosoHeaderWithOffset(appBarHeight + heightToSubtract), + [appBarHeight, heightToSubtract], + ); + return ( { return ( (isLoading ? : null), }} diff --git a/src/modules/updates/screens/Updates.tsx b/src/modules/updates/screens/Updates.tsx index 8f90634f..ffb04896 100644 --- a/src/modules/updates/screens/Updates.tsx +++ b/src/modules/updates/screens/Updates.tsx @@ -23,9 +23,11 @@ import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { ChapterUpdateCard } from '@/modules/updates/components/ChapterUpdateCard.tsx'; import { useNavBarContext } from '@/modules/navigation-bar/contexts/NavbarContext.tsx'; import { Chapters } from '@/modules/chapter/services/Chapters.ts'; +import { GROUPED_VIRTUOSO_Z_INDEX } from '@/modules/core/AppRoute.constants.ts'; export const Updates: React.FC = () => { const { t } = useTranslation(); + const { appBarHeight } = useNavBarContext(); const { setTitle, setAction } = useNavBarContext(); const { @@ -107,6 +109,10 @@ export const Updates: React.FC = () => { ({ [theme.breakpoints.up('sm')]: { paddingTop: '6px' } }), }} @@ -117,10 +123,6 @@ export const Updates: React.FC = () => { (isLoading ? : null), }}