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 ( +
+ Feedback +
+ + + Have we validated your PDF correctly? + + } label="Yes" /> + } label="No" /> + } + /> + + + {isCommentVisible && ( + + + Please provide any additional information if you like + + + + Would you like us to analyze the issues and come back to you? + + } + /> + } + /> + + + {isAnalysisVisible && ( + + Enter your contact information + + + + )} + + )} + + + + +
+
+ ); +} + +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; + } +}