@zohodesk/components
Version:
Dot UI is a customizable React component library built to deliver a clean, accessible, and developer-friendly UI experience. It offers a growing set of reusable components designed to align with modern design systems and streamline application development
97 lines (95 loc) • 3.06 kB
JavaScript
import style from "./Button_v1.module.css";
import compileClassNames from '@zohodesk/utils/es/compileClassNames';
import buttonResetStyle from "../../../semantic/Button/semanticButton.module.css";
import getPaletteClasses from "../../helpers/colorHelpers/colorHelper";
import { DUMMY_OBJECT } from '@zohodesk/dotkit/es/utils/constants';
import { DISABLED_APPEARANCE, LOADER_PLACEMENT, SHAPE, SIZE, STATUS } from "../constants";
const capitalize = (value = '') => value.charAt(0).toUpperCase() + value.slice(1);
export default function cssJSLogic({
props
}) {
const {
palette,
bgAppearance,
borderAppearance,
paletteShade,
size,
status,
isDisabled,
isReadOnly,
isSelected,
shape,
loaderPlacement,
disabledAppearance,
customClass = DUMMY_OBJECT
} = props;
const {
wrapper: wrapperClass = '',
text: textClassCustom = '',
icon: iconClassCustom = ''
} = customClass;
const isLoading = status === STATUS.LOADING;
const isSuccess = status === STATUS.SUCCESS;
const isInteractive = !isDisabled && !isReadOnly;
const overlayActive = (isLoading || isSuccess) && loaderPlacement === LOADER_PLACEMENT.OVERLAY;
const {
bg,
hoverBg,
focusBg,
activeBg,
text,
hoverText,
focusText,
activeText,
border,
hoverBorder,
focusBorder,
activeBorder
} = getPaletteClasses({
palette,
bgAppearance,
borderAppearance,
paletteShade,
isSelected
});
const sizeClass = size ? style[`size${capitalize(size)}`] : '';
const shapeClass = shape ? style[`shape${capitalize(shape)}`] : '';
const shouldStrike = disabledAppearance === DISABLED_APPEARANCE.STRIKE && isDisabled;
const buttonClassName = compileClassNames({
[]: true,
[]: true,
[]: !!bg,
[]: !!hoverBg && isInteractive,
[]: !!focusBg && isInteractive,
[]: !!activeBg && isInteractive,
[]: !!text,
[]: !!hoverText && isInteractive,
[]: !!focusText && isInteractive,
[]: !!activeText && isInteractive,
[]: !!border,
[]: !!hoverBorder && isInteractive,
[]: !!focusBorder && isInteractive,
[]: !!activeBorder && isInteractive,
[]: !!sizeClass,
[]: !!shapeClass,
[]: isReadOnly || isDisabled && disabledAppearance === DISABLED_APPEARANCE.DULL,
[]: isReadOnly || isDisabled,
[]: isLoading,
[]: shouldStrike,
[]: !!wrapperClass
});
const textClassName = compileClassNames({
[]: !!textClassCustom
});
const iconClassName = compileClassNames({
[]: !!iconClassCustom
});
return {
buttonClassName,
textClassName,
contentWrapperClass: overlayActive ? style.overlayHidden : style.contentWrapper,
loaderOverlayClass: style.loaderOverlay,
successOverlayClass: style.successOverlay,
iconClassName
};
}