@wix/design-system
Version:
@wix/design-system
93 lines • 4.19 kB
JavaScript
import React, { useEffect } from 'react';
import PropTypes from 'prop-types';
import { st, classes } from './AnnouncementModalLayout.st.css.js';
import TextButton from '../TextButton';
import { dataHooks } from './constants';
import BaseModalLayout from '../BaseModalLayout';
import Button from '../Button';
import deprecationLog from '../utils/deprecationLog';
/** A layout for announcement modals, to be used inside a <Modal /> */
const AnnouncementModalLayout = ({ theme = 'standard', // TODO: add default value for skin once theme is removed
actionsSize = 'medium', ...propsWithoutDefaults }) => {
const { className, children, footnoteSkin, ...restProps } = {
theme,
actionsSize,
...propsWithoutDefaults,
};
const skin = propsWithoutDefaults.skin || theme;
useEffect(() => {
if (theme) {
deprecationLog('<AnnouncementModalLayout/> - prop "theme" is deprecated and will be removed in next major release, please use "skin" property instead.');
}
}, [theme]);
return (React.createElement(BaseModalLayout, { className: st(classes.announcementModalLayout, className), ...restProps, skin: skin },
React.createElement(BaseModalLayout.Illustration, null),
React.createElement(BaseModalLayout.Header, { titleSize: "extraLarge" }),
React.createElement(BaseModalLayout.Content, { hideTopScrollDivider: true, hideBottomScrollDivider: true }, children),
React.createElement(BaseModalLayout.Footer, null),
React.createElement(Link, { ...restProps, skin: skin }),
React.createElement("div", { className: classes.bottomSpacing }),
React.createElement(BaseModalLayout.Footnote, { skin: footnoteSkin })));
};
const Link = ({ linkText, linkOnClick, skin, }) => ((linkText || linkOnClick) && (React.createElement("div", { className: classes.link },
React.createElement(TextButton, { size: "small", weight: "normal", dataHook: dataHooks.link, onClick: linkOnClick, skin: skin }, linkText)))) ||
null;
AnnouncementModalLayout.displayName = 'AnnouncementModalLayout';
AnnouncementModalLayout.propTypes = {
className: PropTypes.string,
dataHook: PropTypes.string,
/** @deprecated use closeButtonProps instead. */
onCloseButtonClick: PropTypes.func,
/** @deprecated use helpButtonProps instead. */
onHelpButtonClick: PropTypes.func,
skin: PropTypes.oneOf(['standard', 'premium']),
theme: PropTypes.oneOf(['standard', 'premium']),
title: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
subtitle: PropTypes.string,
content: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
actionsSize: Button.propTypes.size,
primaryButtonText: PropTypes.string,
primaryButtonOnClick: PropTypes.func,
primaryButtonProps: (() => {
const { dataHook, ...buttonProps } = Button.propTypes;
return PropTypes.shape(buttonProps);
})(),
secondaryButtonText: PropTypes.string,
secondaryButtonOnClick: PropTypes.func,
secondaryButtonProps: (() => {
const { dataHook, ...buttonProps } = Button.propTypes;
return PropTypes.shape(buttonProps);
})(),
sideActions: PropTypes.node,
footnote: PropTypes.node,
footnoteSkin: PropTypes.oneOf(['neutral', 'light']),
illustration: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
linkText: PropTypes.string,
linkOnClick: PropTypes.func,
helpButtonProps: PropTypes.shape({
onClick: PropTypes.func,
size: PropTypes.oneOf(['small', 'medium', 'large']),
skin: PropTypes.oneOf([
'standard',
'standardFilled',
'light',
'lightFilled',
'dark',
'transparent',
]),
}),
closeButtonProps: PropTypes.shape({
onClick: PropTypes.func,
size: PropTypes.oneOf(['small', 'medium', 'large']),
skin: PropTypes.oneOf([
'standard',
'standardFilled',
'light',
'lightFilled',
'dark',
'transparent',
]),
}),
};
export default AnnouncementModalLayout;
//# sourceMappingURL=AnnouncementModalLayout.js.map