-
Notifications
You must be signed in to change notification settings - Fork 62
/
Copy pathPageNumbers.js
96 lines (88 loc) · 2.48 KB
/
PageNumbers.js
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
import React from "react";
import { useRouter } from "next/router";
import { json2query } from "../util";
export const PageNumbers = (props) => {
const router = useRouter();
const { pages } = props;
let { page_id = 0 } = router.query;
page_id = parseInt(page_id);
let pageElems = Array.from({ length: pages }, (x, i) => i + 1);
let start = pageElems.slice(page_id, page_id + 3);
let end = pageElems.slice(-3);
const manyPages = () => {
return (
<>
<a
className="bg-gray-200 mr-4 hover:bg-gray-400 text-gray-800 font-bold py-2 px-4 rounded-md ="
onClick={() =>
router.push(
`?${json2query({ ...router.query, page_id: parseInt(0) })}`
)
}
>
🏠
</a>
{start.map((val) => (
<a
className="bg-gray-200 mr-4 hover:bg-gray-400 text-gray-800 font-bold py-2 px-4 rounded-md"
onClick={() =>
router.push(
`?${json2query({ ...router.query, page_id: parseInt(val) })}`
)
}
>
{val}
</a>
))}
<a className="hidden sm:block mr-4 text-gray-800 font-bold py-2 px-4">
...
</a>
{end.map((val) => (
<a
className="hidden sm:block bg-gray-200 mr-4 hover:bg-gray-400 text-gray-800 font-bold py-2 px-4 rounded-md"
onClick={() =>
router.push(
`?${json2query({ ...router.query, page_id: parseInt(val) })}`
)
}
>
{val}
</a>
))}
</>
);
};
const fewPages = () => {
return (
<>
<a
className="bg-gray-200 mr-4 hover:bg-gray-400 text-gray-800 font-bold py-2 px-4 rounded-md ="
onClick={() =>
router.push(
`?${json2query({ ...router.query, page_id: parseInt(0) })}`
)
}
>
🏠
</a>
{pageElems.map((val) => (
<a
className="bg-gray-200 mr-4 hover:bg-gray-400 text-gray-800 font-bold py-2 px-4 rounded-md"
onClick={() =>
router.push(
`?${json2query({ ...router.query, page_id: parseInt(val) })}`
)
}
>
{val}
</a>
))}
</>
);
};
return (
<div className="flex mt-8 cursor-pointer text-xs">
{pageElems.length > 5 ? manyPages() : fewPages()}
</div>
);
};