table-pagination #27

Merged
nik.polishuk merged 2 commits from table-pagination into main 2024-03-19 16:40:16 +03:00
6 changed files with 89 additions and 4 deletions
Showing only changes of commit 6afccb19d8 - Show all commits

View File

@ -1,4 +1,5 @@
import React, { Component } from "react";
import { Fallback } from "./Fallback";
class ErrorBoundary extends Component {
state = {
@ -13,7 +14,7 @@ class ErrorBoundary extends Component {
const { error } = this.state;
if (error) {
return <div>Что-то пошло не так =( {error}</div>;
return <Fallback />;
}
return this.props.children;
}

20
src/hoc/Fallback.jsx Normal file
View File

@ -0,0 +1,20 @@
import React from "react";
import logo from "assets/images/logo/ITguild.svg";
import rightArrow from "assets/icons/arrows/arrowRight.svg";
import './fallback.scss'
export const Fallback = () => {
return (
<div className="fallback">
<img src={logo} alt="logo" className="logo" />
<h1>Произошла непредвиденная ошибка</h1>
<a href='/profile'>
Вернуться назад
<img src={rightArrow} alt="arrow" />
</a>
</div>
);
};

19
src/hoc/fallback.scss Normal file
View File

@ -0,0 +1,19 @@
.fallback {
display: flex;
flex-direction: column;
align-items: center;
padding: 100px;
gap: 15px;
img {
max-width: 250px;
}
a {
display: flex;
column-gap: 10px;
align-items: center;
font-size: 16px;
color: black;
}
}

View File

@ -1,13 +1,16 @@
import React from "react";
import ReactDOM from "react-dom/client";
import { Provider } from "react-redux";
import ErrorBoundary from "./hoc/ErrorBoundary";
import App from "./App";
import "./index.css";
import { store } from "./store/store";
ReactDOM.createRoot(document.getElementById("root")).render(
<Provider store={store}>
<App />
</Provider>
<ErrorBoundary>
<Provider store={store}>
<App />
</Provider>
</ErrorBoundary>
);

View File

@ -14,6 +14,7 @@ import { Loader } from "@components/Common/Loader/Loader";
import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import { usePagination } from "@table-library/react-table-library/pagination";
import rightArrow from "assets/icons/arrows/arrowRight.svg";
@ -101,6 +102,13 @@ export const PartnerCategories = () => {
}
);
const pagination = usePagination(data, {
state: {
page: 0,
size: 5,
}
});
useEffect(() => {
setLoader(true);
apiRequest("/project/my-employee").then((el) => {
@ -259,7 +267,27 @@ export const PartnerCategories = () => {
data={data}
theme={theme}
sort={sort}
pagination={pagination}
/>
<div className="table__pagination">
<span>Total Pages: {pagination.state.getTotalPages(data.nodes)}</span>
<span className="table__pages">
Page:{" "}
{pagination.state.getPages(data.nodes).map((_, index) => (
<button
key={index}
type="button"
style={{
fontWeight: pagination.state.page === index ? "bold" : "normal",
}}
onClick={() => pagination.fns.onSetPage(index)}
>
{index + 1}
</button>
))}
</span>
</div>
</>
) : (
<div className="partner-categories__empty">

View File

@ -176,5 +176,19 @@
font-size: 16px;
align-items: center;
}
&__pagination {
width: 100%;
display: flex;
justify-content: space-between;
font-size: 16px;
align-items: center;
}
&__pages {
display: flex;
column-gap: 5px;
align-items: center;
}
}
}