saleor-dashboard/src/components/TablePagination/TablePaginationActions.tsx

113 lines
3 KiB
TypeScript
Raw Normal View History

import { IconButton } from "@material-ui/core";
2019-06-19 14:40:52 +00:00
import { fade } from "@material-ui/core/styles/colorManipulator";
import ArrowLeft from "@material-ui/icons/ArrowLeft";
import ArrowRight from "@material-ui/icons/ArrowRight";
import useTheme from "@saleor/hooks/useTheme";
import { makeStyles, useTheme as useSaleorTheme } from "@saleor/theme";
2019-08-09 11:14:35 +00:00
import classNames from "classnames";
2019-08-09 10:26:22 +00:00
import React from "react";
2019-06-19 14:40:52 +00:00
2019-12-03 15:28:40 +00:00
const useStyles = makeStyles(
theme => ({
dark: {
2019-06-19 14:40:52 +00:00
"& svg": {
2019-12-03 15:28:40 +00:00
color: theme.palette.primary.main
},
"&$disabled": {
"& svg": {
color: fade(theme.palette.primary.main, 0.2)
}
},
"&:focus, &:hover": {
"& > span:first-of-type": {
backgroundColor: fade(theme.palette.primary.main, 0.2)
}
2019-10-30 14:34:24 +00:00
}
},
2019-12-03 15:28:40 +00:00
disabled: {},
iconButton: {
2019-10-30 14:34:24 +00:00
"& > span:first-of-type": {
2019-12-03 15:28:40 +00:00
backgroundColor: theme.palette.background.default,
borderRadius: "100%",
transition: theme.transitions.duration.standard + "ms"
},
"& svg": {
border: `solid 1px #BDBDBD`,
borderRadius: "50%"
},
"&:focus, &:hover": {
"& > span:first-of-type": {
backgroundColor: fade(theme.palette.primary.main, 0.2)
},
backgroundColor: "transparent"
2019-09-12 10:38:23 +00:00
},
2019-12-03 15:28:40 +00:00
padding: 6
2019-06-19 14:40:52 +00:00
},
2019-12-03 15:28:40 +00:00
root: {
color: theme.palette.text.secondary,
flexShrink: 0,
margin: theme.spacing(0, 2.5)
}
}),
{ name: "TablePaginationActions" }
);
2019-06-19 14:40:52 +00:00
2019-10-30 14:34:24 +00:00
export interface TablePaginationActionsProps {
2019-06-19 14:40:52 +00:00
backIconButtonProps?: any;
className?: string;
hasNextPage: boolean;
hasPreviousPage: boolean;
nextIconButtonProps?: any;
onNextPage(event);
onPreviousPage(event);
}
export const TablePaginationActions: React.FC<TablePaginationActionsProps> = props => {
2019-10-30 14:34:24 +00:00
const {
2019-06-19 14:40:52 +00:00
backIconButtonProps,
className,
hasNextPage,
hasPreviousPage,
nextIconButtonProps,
onNextPage,
onPreviousPage,
...other
2019-10-30 14:34:24 +00:00
} = props;
const classes = useStyles(props);
const { isDark } = useTheme();
const { direction } = useSaleorTheme();
2019-10-30 14:34:24 +00:00
return (
<div className={classNames(classes.root, className)} {...other}>
<IconButton
className={classNames(classes.iconButton, {
[classes.dark]: isDark,
[classes.disabled]: !hasPreviousPage
})}
onClick={onPreviousPage}
disabled={!hasPreviousPage}
data-test="button-pagination-back"
2019-10-30 14:34:24 +00:00
{...backIconButtonProps}
>
{direction === "rtl" ? <ArrowRight /> : <ArrowLeft />}
</IconButton>
<IconButton
className={classNames(classes.iconButton, {
[classes.dark]: isDark,
[classes.disabled]: !hasNextPage
})}
onClick={onNextPage}
disabled={!hasNextPage}
data-test="button-pagination-next"
2019-10-30 14:34:24 +00:00
{...nextIconButtonProps}
>
{direction === "rtl" ? <ArrowLeft /> : <ArrowRight />}
</IconButton>
</div>
);
};
2019-06-19 14:40:52 +00:00
TablePaginationActions.displayName = "TablePaginationActions";
export default TablePaginationActions;