import clsx from 'clsx'; import React from 'react'; import { Insets } from '@/types/misc'; import { PageInfo, TimeInfo } from '@/types/book'; import { useEnv } from '@/context/EnvContext'; import { useReaderStore } from '@/store/readerStore'; import { useTranslation } from '@/hooks/useTranslation'; import { useBookDataStore } from '@/store/bookDataStore'; import { formatNumber, formatProgress } from '@/utils/progress'; interface PageInfoProps { bookKey: string; section?: PageInfo; pageinfo?: PageInfo; timeinfo?: TimeInfo; horizontalGap: number; contentInsets: Insets; gridInsets: Insets; } const ProgressInfoView: React.FC = ({ bookKey, section, pageinfo, timeinfo, horizontalGap, contentInsets, gridInsets, }) => { const _ = useTranslation(); const { appService } = useEnv(); const { getBookData } = useBookDataStore(); const { getView, getViewSettings } = useReaderStore(); const view = getView(bookKey); const bookData = getBookData(bookKey); const viewSettings = getViewSettings(bookKey)!; const showDoubleBorder = viewSettings.vertical && viewSettings.doubleBorder; const isScrolled = viewSettings.scrolled; const isVertical = viewSettings.vertical; const isEink = viewSettings.isEink; const { progressStyle: readingProgressStyle } = viewSettings; const template = readingProgressStyle === 'fraction' ? isVertical ? '{current} ยท {total}' : '{current} / {total}' : '{percent}%'; const lang = localStorage?.getItem('i18nextLng') || ''; const localize = isVertical && lang.toLowerCase().startsWith('zh'); const progress = bookData?.isFixedLayout ? section : pageinfo; const progressInfo = formatProgress(progress?.current, progress?.total, template, localize, lang); const timeLeft = timeinfo ? _('{{time}} min left in chapter', { time: formatNumber(Math.round(timeinfo.section), localize, lang), }) : ''; const { page = 0, pages = 0 } = view?.renderer || {}; const pageLeft = pages - 1 > page ? localize ? _('{{number}} pages left in chapter', { number: formatNumber(pages - page - 1, localize, lang), }) : _('{{count}} pages left in chapter', { count: pages - page - 1, }) : ''; return (
); }; export default ProgressInfoView;