monday-ui-react-core
Version:
Official monday.com UI resources for application development in React.js
107 lines (101 loc) • 3.49 kB
JSX
import cx from "classnames";
import PropTypes from "prop-types";
import { BEMClass } from "../../helpers/bem-helper";
import { NOOP } from "../../utils/function-utils";
import Button from "../Button/Button";
import { DISMISS_BUTTON_TEXT, SUBMIT_BUTTON_TEXT } from "./TipseenConstants";
import TipseenBasicContent from "./TipseenBasicContent";
import "./TipseenContent.scss";
import { backwardCompatibilityForProperties } from "../../helpers/backwardCompatibilityForProperties";
const BASE_CSS_CLASS = "monday-style-tipseen-content";
const bemHelper = BEMClass(BASE_CSS_CLASS);
const EMPTY_OBJECT = {};
const TipseenContent = ({
title,
children,
isDismissHidden,
isSubmitHidden,
submitButtonText,
onSubmit,
dismissButtonText,
onDismiss,
// Backward compatibility for props naming
dismissButtonProps,
// Backward compatibility for props naming
submitButtonProps
}) => {
const {
content: dismissContent,
className: dismissClassName,
onClick: dismissDeprecatedOnClick,
...otherDismissButtonProps
} = dismissButtonProps || EMPTY_OBJECT;
const overrideDismissContent = backwardCompatibilityForProperties(
[dismissButtonText, dismissContent],
DISMISS_BUTTON_TEXT
);
const overrideDismissOnClick = backwardCompatibilityForProperties([onDismiss, dismissDeprecatedOnClick], NOOP);
const {
content: submitContent,
className: submitClassName,
onClick: submitDeprecatedOnClick,
...otherSubmitButtonProps
} = submitButtonProps || EMPTY_OBJECT;
const overrideSubmitContent = backwardCompatibilityForProperties(
[submitButtonText, submitContent],
SUBMIT_BUTTON_TEXT
);
const overrideSubmitOnClick = backwardCompatibilityForProperties([onSubmit, submitDeprecatedOnClick], NOOP);
return (
<TipseenBasicContent title={title} className={BASE_CSS_CLASS}>
{children ? <span className={bemHelper({ element: "content" })}>{children}</span> : null}
<div className={bemHelper({ element: "buttons" })}>
{isDismissHidden ? null : (
<Button
kind={Button.kinds.TERTIARY}
color={Button.colors.ON_PRIMARY_COLOR}
className={cx(bemHelper({ element: "dismiss" }), dismissClassName)}
size={Button.sizes.SMALL}
onClick={overrideDismissOnClick}
{...otherDismissButtonProps}
>
{overrideDismissContent}
</Button>
)}
{isSubmitHidden ? null : (
<Button
kind={Button.kinds.PRIMARY}
color={Button.colors.ON_PRIMARY_COLOR}
size={Button.sizes.SMALL}
className={cx(bemHelper({ element: "submit" }), submitClassName)}
onClick={overrideSubmitOnClick}
{...otherSubmitButtonProps}
>
{overrideSubmitContent}
</Button>
)}
</div>
</TipseenBasicContent>
);
};
TipseenContent.propTypes = {
title: PropTypes.string,
isDismissHidden: PropTypes.bool,
children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),
isSubmitHidden: PropTypes.bool,
submitButtonText: PropTypes.string,
onSubmit: PropTypes.func,
dismissButtonText: PropTypes.string,
onDismiss: PropTypes.func
};
TipseenContent.defaultProps = {
title: undefined,
children: null,
isDismissHidden: true,
isSubmitHidden: false,
submitButtonText: undefined,
onSubmit: NOOP,
dismissButtonText: undefined,
onDismiss: NOOP
};
export default TipseenContent;