diff options
author | eug-vs <eug-vs@keemail.me> | 2020-06-14 19:52:35 +0300 |
---|---|---|
committer | eug-vs <eug-vs@keemail.me> | 2020-06-14 19:52:35 +0300 |
commit | c7f2999ee797ea5e3bfb29517a4f13206162cc6f (patch) | |
tree | f1aa1f0183720e509894e641cd2f5d1b2f9cd163 /src/components/PollCard/PollCard.tsx | |
parent | fabc53130685f70078343a6fd96d9a597b22008f (diff) | |
download | which-ui-c7f2999ee797ea5e3bfb29517a4f13206162cc6f.tar.gz |
refactor: use lowercase in folder names
Diffstat (limited to 'src/components/PollCard/PollCard.tsx')
-rw-r--r-- | src/components/PollCard/PollCard.tsx | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/src/components/PollCard/PollCard.tsx b/src/components/PollCard/PollCard.tsx new file mode 100644 index 0000000..8995a30 --- /dev/null +++ b/src/components/PollCard/PollCard.tsx @@ -0,0 +1,100 @@ +import React from 'react'; +import { makeStyles } from '@material-ui/core/styles'; +import { + Card, + CardActionArea, + CardMedia, + Avatar, + CardHeader +} from '@material-ui/core/'; +import { Poll } from '../../types'; + +interface PropTypes { + poll: Poll; +} + +interface PercentageBarPropTypes { + value: number; + which: 'left' | 'right'; +} + +const useStyles = makeStyles(theme => ({ + root: { + maxWidth: theme.spacing(75), + height: theme.spacing(63), + margin: '20px auto' + }, + images: { + height: theme.spacing(50), + width: theme.spacing(38) + }, + imagesBlock: { + display: 'flex' + }, + percentage: { + position: 'absolute', + color: 'white', + top: '86%', + fontSize: 20, + textShadow: '0 0 3px black' + }, + percentageLeft: { + left: 30 + }, + percentageRight: { + right: 30 + } +})); + + +const PercentageBar: React.FC<PercentageBarPropTypes> = ({ value, which }) => { + const classes = useStyles(); + const positionClassName = which === 'left' ? 'percentageLeft' : 'percentageRight'; + + return ( + <div className={`${classes.percentage} ${classes[positionClassName]}`}> + {value} + % + </div> + ); +}; + + +const PollCard: React.FC<PropTypes> = ({ poll }) => { + const classes = useStyles(); + const { author, contents } = poll; + + const leftPercentage = Math.round(100 * (contents.left.votes / (contents.left.votes + contents.right.votes))); + const rightPercentage = 100 - leftPercentage; + + + return ( + <Card className={classes.root}> + <CardHeader + avatar={( + <Avatar aria-label="avatar" src={author.avatarUrl} alt={author.name[0].toUpperCase()} /> + )} + title={author.name} + /> + <div className={classes.imagesBlock}> + <CardActionArea> + <CardMedia + className={classes.images} + image={contents.left.url} + /> + <PercentageBar value={leftPercentage} which="left" /> + </CardActionArea> + <CardActionArea> + <CardMedia + className={classes.images} + image={contents.right.url} + /> + <PercentageBar value={rightPercentage} which="right" /> + </CardActionArea> + </div> + </Card> + ); +}; + +export default PollCard; + |