@eureca/eureca-ui
Version:
UI component library of Eureca's user and admin apps
86 lines (74 loc) • 2.12 kB
JavaScript
import React from 'react';
import PropTypes from 'prop-types';
import { Box, Typography, useTheme } from '@material-ui/core';
import { IconContext } from 'react-icons';
import { colors } from '../../theme/colors';
import { useWindowSize } from '../../hooks/useWindowSizeSSR';
import { Card } from './card';
import { Flex } from '../Flex';
const styles = isTablet => ({
text: {
color: colors.gray3,
textAlign: isTablet ? 'left' : 'center',
},
});
function UserHomeCard({ icon, color, title, children, onClick, ...props }) {
const { breakpoints } = useTheme();
const size = useWindowSize();
const style = styles(size?.width < breakpoints.values.md);
function handleClick() {
if (onClick) {
onClick();
}
}
return (
<Card
p={3}
onClick={handleClick}
minHeight={[null, null, 210]}
style={{ cursor: onClick && 'pointer', boxSizing: 'border-box' }}
{...props}
>
<Flex alignCenter flexDirection={['row', 'row', 'column']}>
<Flex
mr={[1, 1, 0]}
alignCenter
justifyCenter
borderRadius="50%"
minWidth={72}
minHeight={72}
bgcolor={color}
>
<IconContext.Provider value={{ color: colors.white, size: 32 }}>
{icon}
</IconContext.Provider>
</Flex>
<Flex justifyCenter alignItems={['flex-start', 'flex-start', 'center']}>
<Box py={1}>
<Typography variant="subtitle1" style={{ color: color }}>
{title}
</Typography>
</Box>
<Typography variant="subtitle2" style={style.text}>
{children}
</Typography>
</Flex>
</Flex>
</Card>
);
}
export { UserHomeCard };
UserHomeCard.defaultProps = {
icon: null,
title: '',
onClick: () => {},
color: 'transparent',
children: null,
};
UserHomeCard.propTypes = {
icon: PropTypes.object,
title: PropTypes.string,
onClick: PropTypes.func,
color: PropTypes.string,
children: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,
};