Merge pull request 'table-pagination' (#27) from table-pagination into main
Reviewed-on: #27
This commit was merged in pull request #27.
	This commit is contained in:
		| @@ -286,15 +286,15 @@ export const ProfileCalendarComponent = React.memo( | ||||
|                 ? `${getCorrectDate(startDate)} - ${getCorrectDate(endDate)}` | ||||
|                 : `${getCorrectDate(endDate)} - ${getCorrectDate(startDate)}` | ||||
|               : activePeriod | ||||
|                 ? "Выберите диапазон на календаре" | ||||
|                 : "Выбрать диапазон"} | ||||
|               ? "Выберите диапазон на календаре" | ||||
|               : "Выбрать диапазон"} | ||||
|           </span> | ||||
|           <span> | ||||
|             {totalRangeHours | ||||
|               ? `${totalRangeHours} ${hourOfNum(totalRangeHours)}` | ||||
|               : endDate | ||||
|                 ? "0 часов" | ||||
|                 : ""} | ||||
|               ? "0 часов" | ||||
|               : ""} | ||||
|           </span> | ||||
|           {endDate && ( | ||||
|             <BaseButton | ||||
|   | ||||
| @@ -1,5 +1,7 @@ | ||||
| import React, { Component } from "react"; | ||||
| 
 | ||||
| import { Fallback } from "./Fallback"; | ||||
| 
 | ||||
| class ErrorBoundary extends Component { | ||||
|   state = { | ||||
|     error: null | ||||
| @@ -13,7 +15,7 @@ class ErrorBoundary extends Component { | ||||
|     const { error } = this.state; | ||||
| 
 | ||||
|     if (error) { | ||||
|       return <div>Что-то пошло не так =( {error}</div>; | ||||
|       return <Fallback />; | ||||
|     } | ||||
|     return this.props.children; | ||||
|   } | ||||
							
								
								
									
										19
									
								
								src/hoc/Fallback.jsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/hoc/Fallback.jsx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| import React from "react"; | ||||
|  | ||||
| import rightArrow from "assets/icons/arrows/arrowRight.svg"; | ||||
| import logo from "assets/images/logo/ITguild.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
									
								
							
							
						
						
									
										19
									
								
								src/hoc/fallback.scss
									
									
									
									
									
										Normal 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; | ||||
|   } | ||||
| } | ||||
| @@ -3,11 +3,14 @@ import ReactDOM from "react-dom/client"; | ||||
| import { Provider } from "react-redux"; | ||||
|  | ||||
| import App from "./App"; | ||||
| import ErrorBoundary from "./hoc/ErrorBoundary"; | ||||
| 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> | ||||
| ); | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| import { getTheme } from "@table-library/react-table-library/baseline"; | ||||
| import { CompactTable } from "@table-library/react-table-library/compact"; | ||||
| import { usePagination } from "@table-library/react-table-library/pagination"; | ||||
| import { useSort } from "@table-library/react-table-library/sort"; | ||||
| import { useTheme } from "@table-library/react-table-library/theme"; | ||||
| import React, { useEffect, useState } from "react"; | ||||
| @@ -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,30 @@ 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"> | ||||
|   | ||||
| @@ -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; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user