Files
suwayomi-material-you-webui/src/modules/reader/components/ReaderPageNumber.tsx

72 lines
2.6 KiB
TypeScript
Raw Normal View History

2024-12-07 00:13:00 +01:00
/*
* 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 { useMemo } from 'react';
import Typography from '@mui/material/Typography';
import Stack from '@mui/material/Stack';
import Box from '@mui/material/Box';
import { ReaderService } from '@/modules/reader/services/ReaderService.ts';
import { ProgressBarType } from '@/modules/reader/types/Reader.types.ts';
import { userReaderStatePagesContext } from '@/modules/reader/contexts/state/ReaderStatePagesContext.tsx';
import { getPage } from '@/modules/reader/utils/ReaderProgressBar.utils.tsx';
import { useNavBarContext } from '@/modules/navigation-bar/contexts/NavbarContext.tsx';
import { useReaderProgressBarContext } from '@/modules/reader/contexts/ReaderProgressBarContext.tsx';
2024-11-04 18:00:35 +01:00
import { useReaderScrollbarContext } from '@/modules/reader/contexts/ReaderScrollbarContext.tsx';
2024-12-07 00:13:00 +01:00
export const ReaderPageNumber = () => {
2024-11-04 18:00:35 +01:00
const { isDesktop } = ReaderService.useOverlayMode();
const { scrollbarXSize } = useReaderScrollbarContext();
2024-12-07 00:13:00 +01:00
const { readerNavBarWidth } = useNavBarContext();
const { isMaximized } = useReaderProgressBarContext();
const { currentPageIndex, pages, totalPages } = userReaderStatePagesContext();
2024-11-04 18:00:35 +01:00
const { progressBarType, shouldShowPageNumber } = ReaderService.useSettings();
2024-12-07 00:13:00 +01:00
const pageName = useMemo(() => getPage(currentPageIndex, pages).name, [currentPageIndex, pages]);
2024-11-04 18:00:35 +01:00
if (!shouldShowPageNumber) {
2024-12-07 00:13:00 +01:00
return null;
}
if (isMaximized) {
return null;
}
2024-11-04 18:00:35 +01:00
if (isDesktop && progressBarType === ProgressBarType.STANDARD) {
2024-12-07 00:13:00 +01:00
return null;
}
if (isMaximized && progressBarType === ProgressBarType.HIDDEN) {
return null;
}
return (
<Stack
sx={{
position: 'fixed',
left: readerNavBarWidth,
right: 0,
2024-11-04 18:00:35 +01:00
bottom: (theme) => `calc(${theme.spacing(1)} + ${scrollbarXSize}px)`,
2024-12-07 00:13:00 +01:00
alignItems: 'center',
transition: (theme) => `left 0.${theme.transitions.duration.shortest}s`,
}}
>
<Box
sx={{
p: 0.5,
borderRadius: 1,
backgroundColor: 'rgba(0, 0, 0, 0.3)',
}}
>
<Typography sx={{ color: 'white' }}>
{pageName}/{totalPages}
</Typography>
</Box>
</Stack>
);
};