@pablo-amberflo/ui-kit-test
Version:
Amberflo UI Kit
116 lines (108 loc) • 2.86 kB
JSX
import React from "react";
import { Button, Typography, Tooltip } from "@mui/material";
import { withStyles } from "@mui/styles";
import { styles } from "./styles";
const ActionButtonRaw = (props) => {
const {
onClick,
text,
selectedTabButton,
selectedTabButtonStyles,
disabled,
buttonStyle,
iconStyle,
classes,
icon,
submitType,
shouldRenderTooltip,
tooltipText,
variant,
} = props;
const getClassName = (type) => {
switch (type) {
case "primary":
return classes.primaryButton;
case "secondary":
return classes.secondaryButton;
case "white":
if (disabled) {
return classes.whiteButtonDisabled;
}
return classes.whiteButton;
case "tab":
if (selectedTabButton) {
return `${classes.selectedTabButton} ${selectedTabButtonStyles}`;
}
return classes.tabButton;
default:
return classes.defaultButton;
}
};
const getTypoClassName = (type) => {
switch (type) {
case "primary":
return classes.primaryButtonText;
case "secondary":
if (disabled) {
return classes.secondaryButtonTextDisabled;
}
return classes.secondaryButtonText;
case "white":
if (disabled) {
return classes.whiteButtonTextDisabled;
}
return classes.whiteButtonText;
case "tab":
if (selectedTabButton) {
return classes.selectedTabButtonTitle;
}
return classes.tabButtonTitle;
case "selectedTabButton":
return classes.selectedTabButtonTitle;
default:
return classes.defaultButtonText;
}
};
const button = (
<Button
disabled={disabled}
onClick={onClick}
color="primary"
variant="contained"
type={submitType && "submit"}
size="medium"
className={
variant && variant !== "" ? getClassName(variant) : buttonStyle
}
>
<div className={classes.container}>
{icon && (
<img
src={icon}
className={`${classes.buttonIcon} ${iconStyle}`}
alt="button-icon"
/>
)}
<Typography variant="button" className={getTypoClassName(variant)}>
{text}
</Typography>
</div>
</Button>
);
/**
* the span inside the tooltip is used because of this
* https://material-ui.com/components/tooltips/#disabled-elements
*/
const renderActionButton = () => {
if (shouldRenderTooltip) {
return (
<Tooltip disableFocusListener arrow title={tooltipText} placement="top">
<span>{button}</span>
</Tooltip>
);
}
return button;
};
return renderActionButton();
};
export const ActionButton = withStyles(styles)(ActionButtonRaw);