Newer
Older
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
import Link from "next/link";
import { PagedCollection } from "../../types/collection";
interface Props {
collection: PagedCollection<unknown>;
// eslint-disable-next-line no-unused-vars
getPagePath: (path: string) => string;
}
const Pagination = ({ collection, getPagePath }: Props) => {
const view = collection && collection["hydra:view"];
if (!view) return null;
const {
"hydra:first": first,
"hydra:previous": previous,
"hydra:next": next,
"hydra:last": last,
} = view;
return (
<div className="text-center">
<nav
className="text-xs font-bold inline-flex mx-auto divide-x-2 divide-gray-200 flex-row flex-wrap items-center justify-center mb-4 border-2 border-gray-200 rounded-2xl overflow-hidden"
aria-label="Page navigation"
>
<Link
href={first ? getPagePath(first) : "#"}
className={`text-black p-3 hover:text-cyan-500 hover:bg-cyan-50 ${
previous ? "" : " text-gray-500 pointer-events-none"
}`}
aria-label="First page"
>
<span aria-hidden="true">⇐</span> First
</Link>
<Link
href={previous ? getPagePath(previous) : "#"}
className={`text-black p-3 hover:text-cyan-500 hover:bg-cyan-50 ${
previous ? "" : " text-gray-500 pointer-events-none"
}`}
aria-label="Previous page"
>
<span aria-hidden="true">←</span> Previous
</Link>
<Link
href={next ? getPagePath(next) : "#"}
className={`text-black p-3 hover:text-cyan-500 hover:bg-cyan-50 ${
next ? "" : " text-gray-500 pointer-events-none"
}`}
aria-label="Next page"
>
Next <span aria-hidden="true">→</span>
</Link>
<Link
href={last ? getPagePath(last) : "#"}
className={`text-black p-3 hover:text-cyan-500 hover:bg-cyan-50 ${
next ? "" : "text-gray-500 pointer-events-none"
}`}
aria-label="Last page"
>
Last <span aria-hidden="true">⇒</span>
</Link>
</nav>
</div>
);
};
export default Pagination;