Move "core" folder out of "features" into "base"
This commit is contained in:
28
src/base/components/virtuoso/StyledGroupHeader.tsx
Normal file
28
src/base/components/virtuoso/StyledGroupHeader.tsx
Normal file
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (C) Contributors to the Suwayomi project
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
import { styled } from '@mui/material/styles';
|
||||
import { TypographyProps } from '@mui/material/Typography';
|
||||
import Stack from '@mui/material/Stack';
|
||||
import { shouldForwardProp } from '@/base/utils/ShouldForwardProp.ts';
|
||||
|
||||
type StyledGroupHeaderProps = {
|
||||
isFirstItem: boolean;
|
||||
};
|
||||
export const StyledGroupHeader = styled(Stack, {
|
||||
shouldForwardProp: shouldForwardProp<StyledGroupHeaderProps>(['isFirstItem']),
|
||||
})<StyledGroupHeaderProps & TypographyProps>(({ theme, isFirstItem }) => ({
|
||||
paddingLeft: theme.spacing(3),
|
||||
paddingTop: theme.spacing(0.75),
|
||||
paddingBottom: theme.spacing(2),
|
||||
fontWeight: 'bold',
|
||||
backgroundColor: theme.palette.background.default,
|
||||
[theme.breakpoints.down('sm')]: {
|
||||
paddingTop: isFirstItem ? theme.spacing(1) : theme.spacing(0.75),
|
||||
},
|
||||
}));
|
||||
17
src/base/components/virtuoso/StyledGroupItemWrapper.tsx
Normal file
17
src/base/components/virtuoso/StyledGroupItemWrapper.tsx
Normal file
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* Copyright (C) Contributors to the Suwayomi project
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
import Box from '@mui/material/Box';
|
||||
import { styled } from '@mui/material/styles';
|
||||
import { memo } from 'react';
|
||||
|
||||
export const StyledGroupItemWrapper = memo(
|
||||
styled(Box)(({ theme }) => ({
|
||||
padding: theme.spacing(0, 1, 1, 1),
|
||||
})),
|
||||
);
|
||||
49
src/base/components/virtuoso/StyledGroupedVirtuoso.tsx
Normal file
49
src/base/components/virtuoso/StyledGroupedVirtuoso.tsx
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright (C) Contributors to the Suwayomi project
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
import { ContextProp, TopItemListProps } from 'react-virtuoso';
|
||||
import { ComponentProps, useMemo } from 'react';
|
||||
import Box from '@mui/material/Box';
|
||||
import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx';
|
||||
import { GroupedVirtuosoPersisted } from '@/lib/virtuoso/Component/GroupedVirtuosoPersisted.tsx';
|
||||
|
||||
const StickyVirtuosoHeaderWithOffset =
|
||||
(topOffset: number) =>
|
||||
({ children, ...args }: TopItemListProps & ContextProp<unknown>) => (
|
||||
<Box {...args} style={{ ...args.style, top: topOffset }}>
|
||||
{children}
|
||||
</Box>
|
||||
);
|
||||
|
||||
export const StyledGroupedVirtuoso = ({
|
||||
heightToSubtract = 0,
|
||||
style,
|
||||
...props
|
||||
}: ComponentProps<typeof GroupedVirtuosoPersisted> & { heightToSubtract?: number }) => {
|
||||
const { appBarHeight, bottomBarHeight } = useNavBarContext();
|
||||
|
||||
const TopItemList = useMemo(
|
||||
() => StickyVirtuosoHeaderWithOffset(appBarHeight + heightToSubtract),
|
||||
[appBarHeight, heightToSubtract],
|
||||
);
|
||||
|
||||
return (
|
||||
<GroupedVirtuosoPersisted
|
||||
useWindowScroll
|
||||
{...props}
|
||||
components={{
|
||||
TopItemList,
|
||||
...props.components,
|
||||
}}
|
||||
style={{
|
||||
...style,
|
||||
height: `calc(100vh - ${heightToSubtract}px - ${appBarHeight}px - ${bottomBarHeight}px - ${!bottomBarHeight ? 'env(safe-area-inset-bottom)' : '0px'})`,
|
||||
}}
|
||||
/>
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user