2021-05-14 08:15:15 +00:00
|
|
|
import { TableCell } from "@material-ui/core";
|
|
|
|
import { TableCellProps } from "@material-ui/core/TableCell";
|
2021-03-30 07:40:18 +00:00
|
|
|
import { makeStyles } from "@saleor/theme";
|
2019-09-02 09:02:56 +00:00
|
|
|
import classNames from "classnames";
|
|
|
|
import React from "react";
|
|
|
|
|
|
|
|
import ArrowSort from "../../icons/ArrowSort";
|
|
|
|
|
2019-12-03 15:28:40 +00:00
|
|
|
const useStyles = makeStyles(
|
|
|
|
theme => ({
|
|
|
|
arrow: {
|
|
|
|
transition: theme.transitions.duration.short + "ms"
|
|
|
|
},
|
|
|
|
arrowLeft: {
|
|
|
|
marginLeft: -24
|
|
|
|
},
|
|
|
|
arrowUp: {
|
|
|
|
transform: "rotate(180deg)"
|
|
|
|
},
|
2019-12-17 17:13:56 +00:00
|
|
|
disableClick: {
|
|
|
|
"&&": {
|
|
|
|
cursor: "unset"
|
|
|
|
}
|
|
|
|
},
|
2019-12-03 15:28:40 +00:00
|
|
|
label: {
|
|
|
|
alignSelf: "center",
|
|
|
|
display: "inline-block"
|
|
|
|
},
|
|
|
|
labelContainer: {
|
|
|
|
"&:hover": {
|
|
|
|
color: theme.palette.text.primary
|
|
|
|
},
|
|
|
|
display: "flex",
|
|
|
|
height: 24
|
|
|
|
},
|
|
|
|
labelContainerActive: {
|
2019-09-16 13:33:24 +00:00
|
|
|
color: theme.palette.text.primary
|
|
|
|
},
|
2019-12-03 15:28:40 +00:00
|
|
|
labelContainerCenter: {
|
|
|
|
justifyContent: "center"
|
|
|
|
},
|
|
|
|
labelContainerRight: {
|
|
|
|
justifyContent: "flex-end"
|
|
|
|
},
|
|
|
|
root: {
|
|
|
|
cursor: "pointer"
|
|
|
|
}
|
|
|
|
}),
|
|
|
|
{ name: "TableCellHeader" }
|
|
|
|
);
|
2019-09-02 09:02:56 +00:00
|
|
|
|
|
|
|
export type TableCellHeaderArrowDirection = "asc" | "desc";
|
|
|
|
export type TableCellHeaderArrowPosition = "left" | "right";
|
2019-09-13 11:33:42 +00:00
|
|
|
export interface TableCellHeaderProps extends TableCellProps {
|
2019-09-02 09:02:56 +00:00
|
|
|
arrowPosition?: TableCellHeaderArrowPosition;
|
|
|
|
direction?: TableCellHeaderArrowDirection;
|
2019-12-17 17:13:56 +00:00
|
|
|
disableClick?: boolean;
|
2019-09-13 11:33:42 +00:00
|
|
|
textAlign?: "left" | "center" | "right";
|
2019-09-02 09:02:56 +00:00
|
|
|
}
|
|
|
|
|
2019-09-13 11:33:42 +00:00
|
|
|
const TableCellHeader: React.FC<TableCellHeaderProps> = props => {
|
2019-09-02 09:02:56 +00:00
|
|
|
const classes = useStyles(props);
|
2019-09-13 11:33:42 +00:00
|
|
|
const {
|
|
|
|
arrowPosition,
|
|
|
|
children,
|
|
|
|
className,
|
|
|
|
direction,
|
2019-12-17 17:13:56 +00:00
|
|
|
disableClick,
|
2019-09-13 11:33:42 +00:00
|
|
|
textAlign,
|
|
|
|
...rest
|
|
|
|
} = props;
|
2019-09-02 09:02:56 +00:00
|
|
|
|
|
|
|
return (
|
2019-12-17 17:13:56 +00:00
|
|
|
<TableCell
|
|
|
|
{...rest}
|
|
|
|
className={classNames(classes.root, className, {
|
|
|
|
[classes.disableClick]: disableClick
|
|
|
|
})}
|
|
|
|
>
|
2019-09-13 11:33:42 +00:00
|
|
|
<div
|
|
|
|
className={classNames(classes.labelContainer, {
|
2019-09-16 13:33:24 +00:00
|
|
|
[classes.labelContainerActive]: !!direction && !!arrowPosition,
|
2019-09-13 11:33:42 +00:00
|
|
|
[classes.labelContainerCenter]: textAlign === "center",
|
|
|
|
[classes.labelContainerRight]: textAlign === "right"
|
|
|
|
})}
|
|
|
|
>
|
2019-09-02 09:02:56 +00:00
|
|
|
{!!direction && arrowPosition === "left" && (
|
|
|
|
<ArrowSort
|
|
|
|
className={classNames(classes.arrow, classes.arrowLeft, {
|
|
|
|
[classes.arrowUp]: direction === "asc"
|
|
|
|
})}
|
|
|
|
/>
|
|
|
|
)}
|
|
|
|
<div className={classes.label}>{children}</div>
|
|
|
|
{!!direction && arrowPosition === "right" && (
|
|
|
|
<ArrowSort
|
|
|
|
className={classNames(classes.arrow, {
|
|
|
|
[classes.arrowUp]: direction === "asc"
|
|
|
|
})}
|
|
|
|
/>
|
|
|
|
)}
|
|
|
|
</div>
|
|
|
|
</TableCell>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
TableCellHeader.displayName = "TableCellHeader";
|
|
|
|
TableCellHeader.defaultProps = {
|
2019-09-13 11:33:42 +00:00
|
|
|
arrowPosition: "left",
|
|
|
|
textAlign: "left"
|
2019-09-02 09:02:56 +00:00
|
|
|
};
|
|
|
|
export default TableCellHeader;
|