aboutsummaryrefslogtreecommitdiff
path: root/src/pages/HomePage/ReviewForm.tsx
diff options
context:
space:
mode:
authorEugene Sokolov <eug-vs@keemail.me>2020-07-05 12:38:59 +0300
committerGitHub <noreply@github.com>2020-07-05 12:38:59 +0300
commite08140bf69c10b0bd313da4bce0abdabf29ef709 (patch)
tree0c602e06fa729c3895d4aadc9b134ad3fe3cc701 /src/pages/HomePage/ReviewForm.tsx
parenta56ed602a4149a3e19ac58c84c51e0eb108358c2 (diff)
parent7ba3047602d8850bb2f80d52448e08cc47290d23 (diff)
downloadwhich-ui-e08140bf69c10b0bd313da4bce0abdabf29ef709.tar.gz
Merge pull request #62 from which-ecosystem/feedback
Feedback feature & instagram links
Diffstat (limited to 'src/pages/HomePage/ReviewForm.tsx')
-rw-r--r--src/pages/HomePage/ReviewForm.tsx74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/pages/HomePage/ReviewForm.tsx b/src/pages/HomePage/ReviewForm.tsx
new file mode 100644
index 0000000..7ad0880
--- /dev/null
+++ b/src/pages/HomePage/ReviewForm.tsx
@@ -0,0 +1,74 @@
+import React, { useState } from 'react';
+import { makeStyles } from '@material-ui/core/styles';
+import { TextField, Button } from '@material-ui/core';
+import { Rating } from '@material-ui/lab';
+import { useSnackbar } from 'notistack';
+
+import { post } from '../../requests';
+import { useNavigate } from '../../hooks/useNavigate';
+
+const version = 'v1.0.0';
+
+const useStyles = makeStyles(theme => ({
+ root: {
+ display: 'flex',
+ flexDirection: 'column'
+ },
+ textField: {
+ margin: theme.spacing(2, 0)
+ }
+}));
+
+const ReviewForm: React.FC = () => {
+ const [contents, setContents] = useState<string>('');
+ const [score, setScore] = useState<number>(0);
+ const classes = useStyles();
+ const { navigate } = useNavigate();
+ const { enqueueSnackbar } = useSnackbar();
+
+ const handleSubmit = (): void => {
+ if (contents && score) {
+ post('/feedback', { contents, score, version }).then(() => {
+ enqueueSnackbar('Your feedback has been submitted!', {
+ variant: 'success'
+ });
+ navigate('feed');
+ });
+ }
+ };
+
+ const handleChange = (event: React.ChangeEvent<HTMLInputElement>): void => {
+ setContents(event.target?.value || '');
+ };
+
+ const handleChangeRating = (event: React.ChangeEvent<Record<string, unknown>>, newScore: number | null): void => {
+ setScore(newScore || 0);
+ };
+
+ return (
+ <div className={classes.root}>
+ <Rating value={score} onChange={handleChangeRating} size="large" />
+ <TextField
+ value={contents}
+ onChange={handleChange}
+ label="Feedback"
+ variant="outlined"
+ className={classes.textField}
+ rows={4}
+ multiline
+ />
+ <div>
+ <Button
+ variant="contained"
+ color="primary"
+ size="large"
+ onClick={handleSubmit}
+ >
+ submit
+ </Button>
+ </div>
+ </div>
+ );
+};
+
+export default ReviewForm;