NavItem.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import * as React from "react";
  2. import { ListItem, ListItemIcon, ListItemText } from "@material-ui/core";
  3. import { Link } from "react-router-dom";
  4. import { makeStyles } from "@material-ui/styles";
  5. const NavItem = ({ active, href, name, onClick, secondary, title, icon }) => {
  6. const useStyles = makeStyles({
  7. root: {
  8. cursor: "pointer",
  9. "&:hover": {
  10. backgroundColor: "#ebebeb",
  11. },
  12. "&:selected": {
  13. backgroundColor: "#e1e1e1",
  14. },
  15. },
  16. text: {
  17. maxWidth: 200,
  18. overflow: "hidden",
  19. textOverflow: "ellipsis",
  20. whiteSpace: "nowrap",
  21. },
  22. activeIcon: {
  23. color: "#346ef2",
  24. minWidth: 36,
  25. },
  26. activeText: {
  27. color: "#346ef2",
  28. },
  29. icon: {
  30. color: "#4e4e4e",
  31. minWidth: 36,
  32. },
  33. });
  34. const classes = useStyles();
  35. const listItemIconClasses = { root: classes.icon };
  36. const listItemTextClasses = {
  37. secondary: classes.text,
  38. };
  39. if (active) {
  40. listItemIconClasses.root = classes.activeIcon;
  41. listItemTextClasses.primary = classes.activeText;
  42. }
  43. const renderListItemCore = () => (
  44. <ListItem
  45. className={active ? "active" : ""}
  46. classes={{ root: classes.root }}
  47. onClick={(e) => {
  48. if (onClick) {
  49. onClick();
  50. e.stopPropagation();
  51. }
  52. }}
  53. selected={active}
  54. title={title}
  55. >
  56. <ListItemIcon classes={listItemIconClasses}>{icon}</ListItemIcon>
  57. <ListItemText
  58. classes={listItemTextClasses}
  59. primary={name}
  60. secondary={secondary}
  61. />
  62. </ListItem>
  63. );
  64. return href && !active ? (
  65. <Link style={{ textDecoration: "none", color: "inherit" }} to={`${href}`}>
  66. {renderListItemCore()}
  67. </Link>
  68. ) : (
  69. renderListItemCore()
  70. );
  71. };
  72. export { NavItem };