-
Notifications
You must be signed in to change notification settings - Fork 181
Expand file tree
/
Copy pathNavigation.js
More file actions
127 lines (117 loc) · 4.03 KB
/
Navigation.js
File metadata and controls
127 lines (117 loc) · 4.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import React, { useContext, useState } from "react";
import { Container, Pagination } from "react-bootstrap";
import Filter from "./Buttons/Filter";
import Sort from "./Buttons/Sort";
//Context
import { ThemeContext } from "../Context/themeContext";
import "./Navigation.css";
import Darkmode from "./Buttons/Darkmode";
const Navigation = ({
setPageNumber,
pageNumber,
maxPageNumber,
setSortByForks,
setSortByStars,
reducedState,
setReducedState,
hidePagination,
hasFilters,
removePagination,
}) => {
const { theme, changeTheme } = useContext(ThemeContext);
let paginationItems = [];
if (maxPageNumber <= 5) {
pushItems(1, maxPageNumber);// First 3 pages
}else if (pageNumber <=3) pushItems(1, 5); // First 5 pages
else if (maxPageNumber - 2 <= pageNumber)
pushItems(maxPageNumber - 4, maxPageNumber); // Last 3 pages
else pushItems(pageNumber - 2, pageNumber + 2); // Other Pages
// Pushes items i to j (inclusive) to paginationItems
function pushItems(i, j) {
for (let idx = i; idx <= j; idx++) {
paginationItems.push(
<div
className={`hover:scale-105 transition-all ease-linear duration-200 cursor-pointer rounded-full w-5 h-5 flex justify-center items-center p-1 ${
pageNumber === idx
? "text-black bg-[#d9d9d9] font-bold scale-125"
: "text-black bg-white "
} `}
key={idx}
active={idx === pageNumber}
onClick={() => {
setPageNumber(idx);
}}
>
{idx}
</div>
);
}
}
return (
!hidePagination && (
<Container variant={theme.mode} className="nav ">
{removePagination ? null : (
<>
{/* <ControlPages></ControlPages> */}
<div className="flex justify-center items-center gap-2 mb-20">
<div
onClick={() => {
if (pageNumber > 1) setPageNumber(pageNumber - 1);
}}
className={`cursor-pointer hover:scale-105 transition-all ease-linear duration-200 w-9 h-9 ${
theme.mode === "light" ? "bg-black" : "bg-white"
} rounded-full flex justify-center items-center`}
>
<div
className={`w-5 h-5 border-r-4 border-b-4 rotate-[130deg] ${
theme.mode === "light" ? "border-white" : "border-black"
} `}
></div>
</div>
{paginationItems}
<div
onClick={() => {
if(pageNumber < maxPageNumber) setPageNumber(pageNumber + 1);
}}
className={`cursor-pointer hover:scale-105 transition-all ease-linear duration-200 w-9 h-9 ${
theme.mode === "light" ? "bg-black" : "bg-white"
} rounded-full flex justify-center items-center`}
>
<div
className={`w-5 h-5 border-l-4 border-t-4 rotate-[130deg] ${
theme.mode === "light" ? "border-white" : "border-black"
}`}
></div>
</div>
</div>
</>
)}
{hasFilters && (
<div className="flex flex-col items-center justify-center gap-3 sm:flex-row ">
<div className="flex gap-[1px]">
<Filter
reducedState={reducedState}
setReducedState={setReducedState}
/>
<Sort
setSortByStars={setSortByStars}
setSortByForks={setSortByForks}
/>
</div>
<div
onClick={changeTheme}
className={
"cursor-pointer sm:ml-10 max-lg:!block hidden hover:scale-105 transition-all ease-linear duration-200"
}
style={{ fontSize: "1.5rem" }}
aria-hidden="true"
>
<Darkmode />
</div>
</div>
)}
</Container>
)
);
};
export default Navigation;