diff --git a/src/App.tsx b/src/App.tsx
index 189a990c8..4b8648bc7 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,25 +1,55 @@
-import React from 'react';
import './App.css';
import { getNumbers } from './utils';
-
-// eslint-disable-next-line @typescript-eslint/no-unused-vars
+import { Pagination } from './components/Pagination';
+import { useSearchParams } from 'react-router-dom';
+import React from 'react';
const items = getNumbers(1, 42).map(n => `Item ${n}`);
export const App: React.FC = () => {
+ const [searchParams, setSearchParams] = useSearchParams();
+
+ const currentPage = Number(searchParams.get('page')) || 1;
+ const perPage = Number(searchParams.get('perPage')) || 5;
+
+ function onPageChange(newPage: number): void {
+ const params = new URLSearchParams(searchParams);
+
+ params.set('page', newPage.toString());
+ setSearchParams(params);
+ }
+
+ function onPerPageChange(newPerPage: number): void {
+ const params = new URLSearchParams(searchParams);
+
+ params.set('perPage', newPerPage.toString());
+ params.set('page', '1');
+ setSearchParams(params);
+ }
+
+ const startIndex = (currentPage - 1) * perPage;
+ const calculatedEndIndex = startIndex + perPage;
+ const endIndex = Math.min(calculatedEndIndex, items.length);
+
return (
Items with Pagination
- Page 1 (items 1 - 5 of 42)
+ {`Page ${currentPage} (items ${startIndex + 1} - ${endIndex} of ${items.length})`}
+ {/* зміна items на сторінці */}
- {/* Move this markup to Pagination */}
-
+
+
+ {/*Items - список який відображаєтьс на сторінці, змінюється в залежності від вибраної кількості*/}
- - Item 1
- - Item 2
- - Item 3
- - Item 4
- - Item 5
+ {items.slice(startIndex, endIndex).map(item => (
+ -
+ {item}
+
+ ))}
);
diff --git a/src/components/Pagination/Pagination.tsx b/src/components/Pagination/Pagination.tsx
index e417a09fc..c09554890 100644
--- a/src/components/Pagination/Pagination.tsx
+++ b/src/components/Pagination/Pagination.tsx
@@ -1 +1,70 @@
-export const Pagination = () => {};
+import { pagesArray } from '../../utils';
+import { Link } from 'react-router-dom';
+
+interface PaginationType {
+ total: number;
+ perPage: number;
+ currentPage?: number;
+ onPageChange?: (page: number) => void;
+}
+
+// total - загальна кількісьть елементів
+// perPage - кількість елементів на сторінці
+// currentPage = 1 - //кількість сторінок яка може бути
+
+export const Pagination = ({
+ total,
+ perPage,
+ currentPage = 1,
+}: PaginationType) => {
+ const pagesAmount = Math.ceil(total / perPage);
+ const pagesCountArray: number[] = pagesArray(pagesAmount);
+
+ return (
+
+ -
+
+ «
+
+
+
+ {pagesCountArray.map(page => (
+ -
+
+ {page}
+
+
+ ))}
+ -
+
+ »
+
+
+
+ );
+};
diff --git a/src/index.tsx b/src/index.tsx
index 226f3f4bd..202bc516f 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,5 +1,10 @@
import { createRoot } from 'react-dom/client';
+import { BrowserRouter } from 'react-router-dom';
import { App } from './App';
-createRoot(document.getElementById('root') as HTMLElement).render(
);
+createRoot(document.getElementById('root') as HTMLElement).render(
+
+
+ ,
+);
diff --git a/src/utils.ts b/src/utils.ts
index ab24e2b56..6f32ca84f 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -7,3 +7,13 @@ export function getNumbers(from: number, to: number): number[] {
return numbers;
}
+
+export function pagesArray(number: number): number[] {
+ const pages = [];
+
+ for (let i = 1; i <= number; i++) {
+ pages.push(i);
+ }
+
+ return pages;
+}