import React from "react"; // nodejs library that concatenates classes import classNames from "classnames"; // nodejs library to set properties for components import PropTypes from "prop-types"; // @material-ui/core components import { makeStyles } from "@material-ui/core/styles"; import MenuItem from "@material-ui/core/MenuItem"; import MenuList from "@material-ui/core/MenuList"; import ClickAwayListener from "@material-ui/core/ClickAwayListener"; import Paper from "@material-ui/core/Paper"; import Grow from "@material-ui/core/Grow"; import Divider from "@material-ui/core/Divider"; import Icon from "@material-ui/core/Icon"; import Popper from "@material-ui/core/Popper"; // core components import Button from "components/CustomButtons/Button.js"; import styles from "assets/jss/nextjs-material-kit/components/customDropdownStyle.js"; const useStyles = makeStyles(styles); export default function CustomDropdown(props) { const [anchorEl, setAnchorEl] = React.useState(null); const handleClick = event => { if (anchorEl && anchorEl.contains(event.target)) { setAnchorEl(null); } else { setAnchorEl(event.currentTarget); } }; const handleClose = param => { setAnchorEl(null); if (props && props.onClick) { props.onClick(param); } }; const handleCloseAway = event => { if (anchorEl.contains(event.target)) { return; } setAnchorEl(null); }; const classes = useStyles(); const { buttonText, buttonIcon, dropdownList, buttonProps, dropup, dropdownHeader, caret, hoverColor, left, rtlActive, noLiPadding, navDropdown } = props; const caretClasses = classNames({ [classes.caret]: true, [classes.caretActive]: Boolean(anchorEl), [classes.caretRTL]: rtlActive }); const dropdownItem = classNames({ [classes.dropdownItem]: true, [classes[hoverColor + "Hover"]]: true, [classes.noLiPadding]: noLiPadding, [classes.dropdownItemRTL]: rtlActive }); let icon = null; switch (typeof buttonIcon) { case "object": icon = ; break; case "string": icon = {props.buttonIcon}; break; default: icon = null; break; } return (
{() => ( {dropdownHeader !== undefined ? ( handleClose(dropdownHeader)} className={classes.dropdownHeader} > {dropdownHeader} ) : null} {dropdownList.map((prop, key) => { if (prop.divider) { return ( handleClose("divider")} className={classes.dropdownDividerItem} /> ); } return ( handleClose(prop)} className={dropdownItem} > {prop} ); })} )}
); } CustomDropdown.defaultProps = { caret: true, hoverColor: "primary" }; CustomDropdown.propTypes = { hoverColor: PropTypes.oneOf([ "black", "primary", "info", "success", "warning", "danger", "rose" ]), buttonText: PropTypes.node, buttonIcon: PropTypes.oneOfType([PropTypes.object, PropTypes.string]), dropdownList: PropTypes.array, buttonProps: PropTypes.object, dropup: PropTypes.bool, dropdownHeader: PropTypes.node, rtlActive: PropTypes.bool, caret: PropTypes.bool, left: PropTypes.bool, noLiPadding: PropTypes.bool, navDropdown: PropTypes.bool, // function that retuns the selected item onClick: PropTypes.func };