react-cm-ui
Version:
React UI for Healthy Church
118 lines (109 loc) • 2.47 kB
JSX
import { camelCase } from 'lodash';
import ClassNames from 'classnames';
import PropTypes from 'prop-types';
import React from 'react';
import {
BEM_MODAL_CONTENT,
} from '../../global/constants';
import makeStyles from '../../styles/makeStyles';
const propTypes = {
/**
* Defines the `align-items` style property.
* It's applied for all screen sizes.
*/
alignItems: PropTypes.oneOf([
'baseline',
'center',
'flex-end',
'flex-start',
'stretch',
]),
/**
* The content of the ModalContent
*/
children: PropTypes.node,
/**
* Override or extend the styles applied to ModalContent.
*/
classes: PropTypes.shape({
root: PropTypes.string,
}),
/**
* Assign additional class names to ModalContent.
*/
className: PropTypes.string,
/**
* The `id` of the ModalContent.
*/
id: PropTypes.string,
};
const defaultProps = {
alignItems: 'stretch',
children: null,
classes: null,
className: null,
id: null,
};
const useStyles = makeStyles(() => ({
'alignItems-baseline': {
alignItems: 'baseline',
},
'alignItems-center': {
alignItems: 'center',
},
'alignItems-flexStart': {
alignItems: 'flex-start',
},
'alignItems-flexEnd': {
alignItems: 'flex-end',
},
'alignItems-stretch': {
alignItems: 'stretch',
},
root: {
display: 'flex',
flexDirection: 'column',
'& > h2': {
margin: 0,
'& + h6': {
marginTop: 8,
},
'& + p': {
marginTop: 22,
},
},
'& > p': {
margin: [[22, 0]],
},
'& > .icon': {
'& + h2': {
marginTop: 18,
},
},
},
}));
function ModalContent(props) {
const {
alignItems,
children,
className,
id,
} = props;
const classes = useStyles(props);
return (
<div
className={ClassNames(
BEM_MODAL_CONTENT,
classes.root,
className,
classes[`alignItems-${camelCase(alignItems)}`],
)}
id={id}
>
{children}
</div>
);
}
ModalContent.propTypes = propTypes;
ModalContent.defaultProps = defaultProps;
export default ModalContent;