diff --git a/src/store.js b/src/store.js index b6982c1..6eaa429 100644 --- a/src/store.js +++ b/src/store.js @@ -1,5 +1,9 @@ import { writable } from 'svelte/store'; -import { getNextPageIndexFn, getPrevPageIndexFn } from './utils/page' +import { + getNextPageIndexFn, + getPrevPageIndexFn, + getPageIndex +} from './utils/page' const initState = { currentPageIndex: 0, @@ -26,7 +30,7 @@ function createStore() { update(store => { return { ...store, - currentPageIndex: pageIndex < 0 ? 0 : Math.min(pageIndex, pagesCount - 1), + currentPageIndex: getPageIndex(pageIndex, pagesCount), } }) } diff --git a/src/utils/page.js b/src/utils/page.js index efd2f0f..489c413 100644 --- a/src/utils/page.js +++ b/src/utils/page.js @@ -23,3 +23,7 @@ export function getPrevPageIndexInfinte(currentPageIndex, pagesCount) { export function getPrevPageIndexFn(infinite) { return infinite ? getPrevPageIndexInfinte : getPrevPageIndexLimited } + +export function getPageIndex(pageIndex, pagesCount) { + return pageIndex < 0 ? 0 : Math.min(pageIndex, pagesCount - 1) +} diff --git a/src/utils/page.test.js b/src/utils/page.test.js index f491a2d..1a47877 100644 --- a/src/utils/page.test.js +++ b/src/utils/page.test.js @@ -2,7 +2,8 @@ import { getNextPageIndexLimited, getNextPageIndexInfinte, getPrevPageIndexLimited, - getPrevPageIndexInfinte + getPrevPageIndexInfinte, + getPageIndex } from './page.js'; describe('getNextPageIndexLimited', () => { @@ -64,3 +65,18 @@ describe('getPrevPageIndexInfinte', () => { }); }); }); + +describe('getPageIndex', () => { + it('returns normalized page index as expected', () => { + const testCases = [ + { pageIndex: -5, pagesCount: 3, expected: 0 }, + { pageIndex: 0, pagesCount: 3, expected: 0 }, + { pageIndex: 1, pagesCount: 3, expected: 1 }, + { pageIndex: 2, pagesCount: 3, expected: 2 }, + { pageIndex: 7, pagesCount: 3, expected: 2 }, + ] + testCases.forEach(({ pageIndex, pagesCount, expected }) => { + expect(getPageIndex(pageIndex, pagesCount)).toBe(expected); + }); + }); +});