diff --git a/src/common/components/AppPages.js b/src/common/components/AppPages.js
index 7698fd9f..f95c64c9 100644
--- a/src/common/components/AppPages.js
+++ b/src/common/components/AppPages.js
@@ -20,6 +20,7 @@ export default {
},
},
ABOUT: '/about',
+ FEEDBACK: '/feedback',
PRIVACY_POLICY: '/privacy-policy',
LOADING: '/loading',
NOT_FOUND: '/404',
diff --git a/src/common/components/AppRouter.js b/src/common/components/AppRouter.js
index 59a00251..f09ca25e 100644
--- a/src/common/components/AppRouter.js
+++ b/src/common/components/AppRouter.js
@@ -3,6 +3,7 @@ import { Redirect, Route, Switch } from 'react-router-dom';
import Upload from './layouts/pages/upload/Upload';
import About from './layouts/pages/about/About';
+import Feedback from './layouts/pages/feedback/Feedback';
import PrivacyPolicy from './layouts/pages/privacyPolicy/PrivacyPolicy';
import Settings from './layouts/pages/settings/Settings';
import JobStatus from './layouts/pages/status/JobStatus';
@@ -19,6 +20,7 @@ function AppRouter() {
+
diff --git a/src/common/components/layouts/header/Header.js b/src/common/components/layouts/header/Header.js
index 34702ec9..657c6bbf 100644
--- a/src/common/components/layouts/header/Header.js
+++ b/src/common/components/layouts/header/Header.js
@@ -1,8 +1,10 @@
-import React from 'react';
+import React, { useMemo } from 'react';
import { Link, useLocation } from 'react-router-dom';
import classNames from 'classnames';
-import { Link as MaterialLink } from '@material-ui/core';
+import { Link as MaterialLink, Typography } from '@material-ui/core';
import HelpOutline from '@material-ui/icons/HelpOutline';
+import Feedback from '@material-ui/icons/Feedback';
+import Policy from '@material-ui/icons/Policy';
import ResetButton from '../../shared/resetButton/ResetButton';
import AppPages from '../../AppPages';
@@ -13,6 +15,10 @@ import './Header.scss';
function Header() {
const location = useLocation();
+ const hideLinks = useMemo(
+ () => [AppPages.ABOUT, AppPages.FEEDBACK, AppPages.PRIVACY_POLICY].includes(location.pathname),
+ [location.pathname]
+ );
return (
@@ -21,15 +27,29 @@ function Header() {
+
+
+ FEEDBACK
+
+ ABOUT
+
+
+
+ PRIVACY POLICY
diff --git a/src/common/components/layouts/header/Header.scss b/src/common/components/layouts/header/Header.scss
index bbda5484..1b8d01b3 100644
--- a/src/common/components/layouts/header/Header.scss
+++ b/src/common/components/layouts/header/Header.scss
@@ -1,6 +1,7 @@
@import "../../variables";
.app-header {
+ overflow: auto;
position: fixed;
top: 0;
height: 85px;
@@ -19,9 +20,11 @@
&__left,
&__right {
height: 100%;
+ min-width: 160px;
display: flex;
flex-direction: row;
align-items: center;
+ margin-left: 20px;
}
&__left {
@@ -38,16 +41,47 @@
justify-content: flex-end;
}
+ @media (max-width: 620px) {
+ .app-header__right {
+ .text-link {
+ display: none !important;
+ }
+ }
+ }
+
.app-link {
+ display: flex;
+ vertical-align: middle;
+ padding: 5px 10px;
transition: $linear;
- color: $text-color--basic;
+ color: $link-color--basic;
+ border-radius: 4px;
+ border: 1px solid rgba(100, 51, 70, 0.5);
+
+ .text-link {
+ display: inline-block;
+ vertical-align: middle;
+ line-height: 25px;
+ margin-left: 5px;
+ font-weight: 500;
+ font-size: 0.875rem;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ font-family: $font-family;
+ }
&:hover {
- color: $link-color--basic;
+ border: 1px solid $color-primary;
+ background-color: rgba(0, 0, 0, 0.04);
}
&_hidden {
display: none;
}
}
+
+ .about-link {
+ margin: 0 20px;
+ }
}
diff --git a/src/common/components/layouts/pages/feedback/Feedback.js b/src/common/components/layouts/pages/feedback/Feedback.js
new file mode 100644
index 00000000..8589c4b8
--- /dev/null
+++ b/src/common/components/layouts/pages/feedback/Feedback.js
@@ -0,0 +1,138 @@
+import React, { useCallback, useState } from 'react';
+import {
+ Box,
+ Radio,
+ Button,
+ TextField,
+ Typography,
+ RadioGroup,
+ FormLabel,
+ FormControl,
+ FormControlLabel,
+} from '@material-ui/core';
+
+import './Feedback.scss';
+
+const FormItemName = {
+ SERVICE_QUALITY: 'serviceQuality',
+ COMMENT: 'comment',
+ REQUEST_ANALYSIS: 'requestAnalysis',
+ USERNAME: 'username',
+ EMAIL: 'email',
+};
+
+function Feedback() {
+ const [isAnalysisVisible, setIsAnalysisVisible] = useState(false);
+ const [isCommentVisible, setIsCommentVisible] = useState(false);
+ const handleValidationStatusChange = useCallback((e, value) => {
+ if (value === 'yes') {
+ setIsCommentVisible(false);
+ setIsAnalysisVisible(false);
+ } else setIsCommentVisible(true);
+ }, []);
+ const handleRequestAnalysisChange = useCallback((e, value) => {
+ if (value === 'no') setIsAnalysisVisible(false);
+ else setIsAnalysisVisible(true);
+ }, []);
+ const handleSubmit = useCallback(e => {
+ e.preventDefault();
+ const { target } = e;
+ if (target) {
+ const data = {
+ [FormItemName.SERVICE_QUALITY]: target.elements[FormItemName.SERVICE_QUALITY].value,
+ [FormItemName.COMMENT]: target.elements[FormItemName.COMMENT]?.value ?? '',
+ userData:
+ target.elements[FormItemName.REQUEST_ANALYSIS]?.value !== 'yes'
+ ? null
+ : {
+ [FormItemName.EMAIL]: target.elements[FormItemName.EMAIL].value,
+ [FormItemName.USERNAME]: target.elements[FormItemName.USERNAME].value,
+ },
+ };
+ console.log('Form data:', data);
+ }
+ }, []);
+ return (
+
+ );
+}
+
+export default Feedback;
diff --git a/src/common/components/layouts/pages/feedback/Feedback.scss b/src/common/components/layouts/pages/feedback/Feedback.scss
new file mode 100644
index 00000000..f9a659cd
--- /dev/null
+++ b/src/common/components/layouts/pages/feedback/Feedback.scss
@@ -0,0 +1,29 @@
+@import "../../../variables";
+
+.feedback {
+ font-size: 24px;
+ padding: 0 20px;
+
+ .form-header {
+ font-size: 24px;
+ font-weight: 700;
+ margin: 19.92px 0px;
+ }
+
+ .form-block {
+ display: grid;
+ margin-bottom: 15px;
+ }
+
+ .form-button {
+ margin: 15px 0 30px 0;
+ }
+
+ .MuiFormLabel-root.Mui-focused {
+ color: rgba(0, 0, 0, 0.75);
+ }
+
+ .MuiOutlinedInput-root {
+ margin-top: 10px;
+ }
+}