import { Button, ButtonProps, Tooltip, Theme } from '@mui/material'; import { makeStyles } from '@mui/styles'; const buttonStyle = makeStyles((theme: Theme) => ({ button: { padding: theme.spacing(1, 3), textTransform: 'initial', fontWeight: 'bold', }, textBtn: { color: theme.palette.primary.main, padding: theme.spacing(1), '&:hover': { backgroundColor: theme.palette.primary.main, color: theme.palette.background.paper, }, }, containedBtn: { color: theme.palette.background.paper, backgroundColor: theme.palette.primary.main, boxShadow: 'initial', fontWeight: 'bold', lineHeight: '24px', '&:hover': { backgroundColor: theme.palette.primary.dark, boxShadow: 'initial', }, }, containedSecondary: { backgroundColor: '#fc4c02', '&:hover': { backgroundColor: '#fc4c02', }, }, disabledBtn: { pointerEvents: 'none', }, })); // props types same as Material Button const CustomButton = ( props: ButtonProps & { tooltip?: string; tooltipPlacement?: | 'bottom' | 'left' | 'right' | 'top' | 'bottom-end' | 'bottom-start' | 'left-end' | 'left-start' | 'right-end' | 'right-start' | 'top-end' | 'top-start' | undefined; } ) => { const classes = buttonStyle(); const { tooltip, tooltipPlacement, disabled, ...otherProps } = props; // wrap a span to let disabled elements show tooltip const btn = ( ); return ( <> {/* add span to let disabled elements show tooltip see https://material-ui.com/zh/components/tooltips/#disabled-elements */} {tooltip ? ( {disabled ? {btn} : btn} ) : ( )} ); }; export default CustomButton;