Skip to content

Commit 32263f5

Browse files
committed
Extract PageButton
1 parent 7c238f1 commit 32263f5

File tree

2 files changed

+55
-47
lines changed

2 files changed

+55
-47
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import Button from "@material-ui/core/Button"
2+
import { makeStyles } from "@material-ui/core/styles"
3+
4+
interface PageButtonProps {
5+
activePage?: number
6+
page?: number
7+
placeholder?: string
8+
numPages?: number
9+
onPageClick?: (page: number) => void
10+
disabled?: boolean
11+
}
12+
13+
export const PageButton = ({
14+
activePage,
15+
page,
16+
placeholder = "...",
17+
numPages,
18+
onPageClick,
19+
disabled = false
20+
}: PageButtonProps): JSX.Element => {
21+
const styles = useStyles()
22+
return (
23+
<Button
24+
className={
25+
activePage === page
26+
? `${styles.pageButton} ${styles.activePageButton}`
27+
: styles.pageButton
28+
}
29+
aria-label={`${page === activePage ? "Current Page" : ""} ${
30+
page === numPages ? "Last Page" : ""
31+
} Page${page}`}
32+
name="Page button"
33+
onClick={() => onPageClick && page && onPageClick(page)}
34+
disabled={disabled}
35+
>
36+
<div>{page ?? placeholder}</div>
37+
</Button>
38+
)
39+
}
40+
41+
const useStyles = makeStyles((theme) => ({
42+
pageButton: {
43+
"&:not(:last-of-type)": {
44+
marginRight: theme.spacing(0.5),
45+
},
46+
},
47+
48+
activePageButton: {
49+
borderColor: `${theme.palette.info.main}`,
50+
backgroundColor: `${theme.palette.info.dark}`,
51+
},
52+
}))

site/src/components/PaginationWidget/PaginationWidget.tsx

Lines changed: 3 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -77,38 +77,6 @@ export const buildPagedList = (
7777
return range(1, numPages)
7878
}
7979

80-
interface PageButtonProps {
81-
activePage: number
82-
page: number
83-
numPages: number
84-
onPageClick?: (page: number) => void
85-
}
86-
87-
const PageButton = ({
88-
activePage,
89-
page,
90-
numPages,
91-
onPageClick,
92-
}: PageButtonProps): JSX.Element => {
93-
const styles = useStyles()
94-
return (
95-
<Button
96-
className={
97-
activePage === page
98-
? `${styles.pageButton} ${styles.activePageButton}`
99-
: styles.pageButton
100-
}
101-
aria-label={`${page === activePage ? "Current Page" : ""} ${
102-
page === numPages ? "Last Page" : ""
103-
} Page${page}`}
104-
name="Page button"
105-
onClick={() => onPageClick && onPageClick(page)}
106-
>
107-
<div>{page}</div>
108-
</Button>
109-
)
110-
}
111-
11280
export const PaginationWidget = ({
11381
prevLabel,
11482
nextLabel,
@@ -155,13 +123,11 @@ export const PaginationWidget = ({
155123
<Cond>
156124
{buildPagedList(numPages, activePage).map((page) =>
157125
typeof page !== "number" ? (
158-
<Button
159-
className={styles.pageButton}
126+
<PageButton
160127
key={`Page${page}`}
128+
placeholder="..."
161129
disabled
162-
>
163-
<div>...</div>
164-
</Button>
130+
/>
165131
) : (
166132
<PageButton
167133
key={`Page${page}`}
@@ -200,14 +166,4 @@ const useStyles = makeStyles((theme) => ({
200166
marginRight: `${theme.spacing(0.5)}px`,
201167
},
202168

203-
pageButton: {
204-
"&:not(:last-of-type)": {
205-
marginRight: theme.spacing(0.5),
206-
},
207-
},
208-
209-
activePageButton: {
210-
borderColor: `${theme.palette.info.main}`,
211-
backgroundColor: `${theme.palette.info.dark}`,
212-
},
213169
}))

0 commit comments

Comments
 (0)