diff options
author | ilyayudovin <ilyayudovin123@gmail.com> | 2020-06-23 19:41:43 +0300 |
---|---|---|
committer | ilyayudovin <ilyayudovin123@gmail.com> | 2020-06-23 19:41:43 +0300 |
commit | 8930046d41841cba6cf368076b86e26088807848 (patch) | |
tree | f3188a6c232d1d2b59dee99d6e33480e64085171 | |
parent | bff39941e2da37db8d971b2dc1b84bce8b1fbbc2 (diff) | |
download | which-ui-8930046d41841cba6cf368076b86e26088807848.tar.gz |
feat:add percentage line
-rw-r--r-- | src/components/PollCard/PollCard.tsx | 51 |
1 files changed, 39 insertions, 12 deletions
diff --git a/src/components/PollCard/PollCard.tsx b/src/components/PollCard/PollCard.tsx index baf896f..190d001 100644 --- a/src/components/PollCard/PollCard.tsx +++ b/src/components/PollCard/PollCard.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, {useState} from 'react'; import { makeStyles } from '@material-ui/core/styles'; import { Card, @@ -9,6 +9,8 @@ import { } from '@material-ui/core/'; import { Poll } from '../../types'; import PercentageBar from './PercentageBar'; +import {post} from '../../requests'; +import teal from "@material-ui/core/colors/teal"; interface PropTypes { poll: Poll; @@ -18,32 +20,56 @@ interface PropTypes { const useStyles = makeStyles(theme => ({ root: { maxWidth: theme.spacing(75), - height: theme.spacing(63), - margin: '20px auto' + height: 488, + margin: '40px auto', }, images: { height: theme.spacing(50), - width: theme.spacing(38) + width: 300 }, imagesBlock: { display: 'flex' }, avatar: { cursor: 'pointer' - } + }, + rateLine: { + position:'relative', + margin: '0 auto', + width: '100%', + height:16, + backgroundColor: teal[100] + }, + fillRateLine: { + height:16, + backgroundColor: teal[800], + transitionDuration: '0.5s' + }, })); - const PollCard: React.FC<PropTypes> = ({ poll, navigate }) => { const classes = useStyles(); const { author, contents } = poll; + const [rate, setRate] = useState<{left: number, right: number}>({left: contents.left.votes,right: contents.right.votes}); const handleNavigate = () => { navigate('profile', poll.author._id); }; - const leftPercentage = Math.round(100 * (contents.left.votes / (contents.left.votes + contents.right.votes))); - const rightPercentage = 100 - leftPercentage; + const vote = (which: 'left' | 'right') => { + post(`polls/${ poll._id }/votes/`,{ which }).then((response)=>{ + console.log(response.data); + const leftV = response.data.contents.left.votes; + const rightV = response.data.contents.right.votes; + setRate({left: leftV, right: rightV}); + }) + .catch(error => { + console.log(error.response) + }); + }; + + const leftPercentage = Math.round(100 * (rate.left / (rate.left + rate.right))); + const rightPercentage = 100 - leftPercentage; return ( <Card className={classes.root}> @@ -60,14 +86,14 @@ const PollCard: React.FC<PropTypes> = ({ poll, navigate }) => { title={author.name} /> <div className={classes.imagesBlock}> - <CardActionArea> + <CardActionArea onDoubleClick={() => vote('left')}> <CardMedia className={classes.images} image={contents.left.url} /> <PercentageBar value={leftPercentage} which="left" /> </CardActionArea> - <CardActionArea> + <CardActionArea onDoubleClick={() => vote('right')}> <CardMedia className={classes.images} image={contents.right.url} @@ -75,10 +101,11 @@ const PollCard: React.FC<PropTypes> = ({ poll, navigate }) => { <PercentageBar value={rightPercentage} which="right" /> </CardActionArea> </div> + <div className={classes.rateLine}> + <div className={classes.fillRateLine} style={{width: `${leftPercentage}%`}} /> + </div> </Card> ); }; - export default PollCard; - |