Prevent potential out-of-bound index access when selecting reader page
This commit is contained in:
@@ -10,6 +10,7 @@ import { TReaderProgressCurrentPage } from '@/features/reader/overlay/progress-b
|
|||||||
import { getOptionForDirection as getOptionForDirectionImpl } from '@/features/theme/services/ThemeCreator.ts';
|
import { getOptionForDirection as getOptionForDirectionImpl } from '@/features/theme/services/ThemeCreator.ts';
|
||||||
import { ProgressBarPosition, ReaderStatePages } from '@/features/reader/Reader.types.ts';
|
import { ProgressBarPosition, ReaderStatePages } from '@/features/reader/Reader.types.ts';
|
||||||
import { coerceIn } from '@/lib/HelperFunctions.ts';
|
import { coerceIn } from '@/lib/HelperFunctions.ts';
|
||||||
|
import { DirectionOffset } from '@/base/Base.types.ts';
|
||||||
|
|
||||||
export const getPage = (pageIndex: number, pages: ReaderStatePages['pages']): TReaderProgressCurrentPage => {
|
export const getPage = (pageIndex: number, pages: ReaderStatePages['pages']): TReaderProgressCurrentPage => {
|
||||||
const pagesIndex = pages.findIndex(({ primary, secondary }) =>
|
const pagesIndex = pages.findIndex(({ primary, secondary }) =>
|
||||||
@@ -34,14 +35,9 @@ export const getNextPageIndex = (
|
|||||||
pagesIndex: number,
|
pagesIndex: number,
|
||||||
pages: ReaderStatePages['pages'],
|
pages: ReaderStatePages['pages'],
|
||||||
): number => {
|
): number => {
|
||||||
switch (offset) {
|
const offsetNumber = offset === 'previous' ? DirectionOffset.PREVIOUS : DirectionOffset.NEXT;
|
||||||
case 'previous':
|
|
||||||
return getNextIndexFromPage(pages[Math.max(0, pagesIndex - 1)]);
|
return getNextIndexFromPage(pages[coerceIn(pagesIndex + offsetNumber, 0, pages.length - 1)]);
|
||||||
case 'next':
|
|
||||||
return getNextIndexFromPage(pages[Math.min(pages.length - 1, pagesIndex + 1)]);
|
|
||||||
default:
|
|
||||||
throw new Error(`Unexpected offset "${offset}"`);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getPageForMousePos = (
|
export const getPageForMousePos = (
|
||||||
|
|||||||
Reference in New Issue
Block a user