diff --git a/React-frontend/src/App.js b/React-frontend/src/App.js index e8b7d38f..38dc97c2 100644 --- a/React-frontend/src/App.js +++ b/React-frontend/src/App.js @@ -10,13 +10,15 @@ import AdminPage from './pages/admin/AdminPage'; import Alert from './components/core/Alert'; import store from './store/store'; +import SignUpPage from './pages/SignUpPage'; function App() { return (
- + + diff --git a/React-frontend/src/components/SignUpForm.js b/React-frontend/src/components/SignUpForm.js new file mode 100644 index 00000000..106a1b2d --- /dev/null +++ b/React-frontend/src/components/SignUpForm.js @@ -0,0 +1,162 @@ +import React, { useReducer, useState } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import { Link, useHistory } from 'react-router-dom'; +import { MDBContainer, MDBInput, MDBBtn, MDBCard, MDBCardBody } from 'mdbreact'; +import axios from 'axios'; +import { setAlert } from '../store/actions/alerts'; + +import formReducer from '../utils/formReducer'; + +const FormPage = () => { + const history = useHistory() + const dispatch = useDispatch(); + const initialFormData = { + name: '', + email: '', + password: '', + role: 'admin' + }; + const { isLoading } = useSelector(state => state.auth); + const [sending, setSending] = useState(false); + const [formData, setFormData] = useReducer(formReducer, initialFormData); + const [passwordShown, setPasswordShown] = useState(false); + + // password toggle handler + const togglePasswordVisibilty = () => { + setPasswordShown(passwordShown ? false : true) + } + + const signUpHandler = async e => { + setSending(true) + e.preventDefault(); + e.target.className += " was-validated" + if (formData.name && formData.email && formData.password){ + try{ + await axios.post('/user/create', formData, { + headers: { + 'Content-Type': 'application/json', + } + }); + dispatch(setAlert('Success! You have registered', 'success')) + setSending(false) + history.push('/login') + } catch(error) { + const errorMsg = error.response.data + dispatch(setAlert(errorMsg, 'danger')) + setSending(false) + } + } + setSending(false) + }; + + return ( + +
+ + +
+

For Admins

+

+ {isLoading + ? 'Authenticating' + : 'Create Account and organize your workspace'} +

{' '} +
+ setFormData(event.target)} + > +
+ Please provide a name. +
+
Looks good!
+
+ + setFormData(event.target)} + > +
+ Please provide a valid email. +
+
Looks good!
+
+ setFormData(event.target)} + > +
+ Please provide a password. +
+
Looks good!
+
+
+ + +
+
+
+
+

+ + Already have an accont ? Login. + +

+
+ + { + (sending) ? + 'wait...' + : 'register' + } + +
+
+
+
+
+ ); +}; + +export default FormPage; diff --git a/React-frontend/src/components/core/HomeLogo.js b/React-frontend/src/components/core/HomeLogo.js index b24a2033..ace8d6ea 100644 --- a/React-frontend/src/components/core/HomeLogo.js +++ b/React-frontend/src/components/core/HomeLogo.js @@ -1,6 +1,6 @@ import React from 'react'; import Logo from '../../images/HomeLogo.png'; -import { MDBContainer } from 'mdbreact'; +import { MDBBtn, MDBContainer } from 'mdbreact'; function Hl() { return ( @@ -16,7 +16,13 @@ function Hl() {

Open Source forensic tool for Android smartphones

- + + Know More +
diff --git a/React-frontend/src/components/core/Navbar.js b/React-frontend/src/components/core/Navbar.js index b6853237..951b20a3 100644 --- a/React-frontend/src/components/core/Navbar.js +++ b/React-frontend/src/components/core/Navbar.js @@ -32,6 +32,11 @@ function Nvb() { Login + + + register + + { diff --git a/React-frontend/src/pages/SignUpPage.js b/React-frontend/src/pages/SignUpPage.js new file mode 100644 index 00000000..08d43f00 --- /dev/null +++ b/React-frontend/src/pages/SignUpPage.js @@ -0,0 +1,36 @@ +import React from 'react'; +import Hl from '../components/core/HomeLogo'; +import Sf from '../components/SignUpForm'; +import { useSelector } from 'react-redux'; + + +import { MDBRow, MDBCol } from 'mdbreact'; +import Layout from '../components/core/Layout'; +import { Redirect } from 'react-router-dom'; + +const SignUpPage = () => { + const { isLoading, isAuthenticated } = useSelector(state => state.auth); + + if (!isLoading && isAuthenticated) { + return ; + } + + return ( + + + + + + + + + + + +
+
+
+ ); +}; + +export default SignUpPage;