From 6688ceba6b92389755172371a579618ab9934930 Mon Sep 17 00:00:00 2001 From: mohammedsalah7 Date: Tue, 2 Nov 2021 19:00:54 +0200 Subject: [PATCH 1/4] create profile page with components and style #55 --- client/.gitignore | 2 +- client/src/assetes/house.jpeg | Bin 0 -> 27316 bytes .../components/Agent/EstateAgent/index.jsx | 108 +++++++++++++ .../components/Agent/EstateAgent/style.css | 4 + client/src/components/Agent/Favroit/index.jsx | 149 ++++++++++++++++++ client/src/components/Agent/Info/index.jsx | 101 ++++++++++++ .../components/Agent/PenddingEstate/index.jsx | 81 ++++++++++ client/src/components/Agent/static/index.jsx | 59 +++++++ client/src/components/tab/index.jsx | 80 ++++++++++ client/src/index.js | 3 +- client/src/pages/Profile/index.jsx | 27 ++++ package.json | 4 +- 12 files changed, 614 insertions(+), 4 deletions(-) create mode 100644 client/src/assetes/house.jpeg create mode 100644 client/src/components/Agent/EstateAgent/index.jsx create mode 100644 client/src/components/Agent/EstateAgent/style.css create mode 100644 client/src/components/Agent/Favroit/index.jsx create mode 100644 client/src/components/Agent/Info/index.jsx create mode 100644 client/src/components/Agent/PenddingEstate/index.jsx create mode 100644 client/src/components/Agent/static/index.jsx create mode 100644 client/src/components/tab/index.jsx create mode 100644 client/src/pages/Profile/index.jsx diff --git a/client/.gitignore b/client/.gitignore index 9779ad4..e2bb025 100644 --- a/client/.gitignore +++ b/client/.gitignore @@ -10,7 +10,7 @@ package-lock.json # production /build - +.env # misc .DS_Store .env.local diff --git a/client/src/assetes/house.jpeg b/client/src/assetes/house.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..d8930562cee0b61b8fbc4255becf498492e32e91 GIT binary patch literal 27316 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 bRZ_Tbq*v)HCS-~^$tU7vs)=62{;mEGZ``TJ literal 0 HcmV?d00001 diff --git a/client/src/components/Agent/EstateAgent/index.jsx b/client/src/components/Agent/EstateAgent/index.jsx new file mode 100644 index 0000000..08ad579 --- /dev/null +++ b/client/src/components/Agent/EstateAgent/index.jsx @@ -0,0 +1,108 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { + Container, +} from '@mui/material'; +import Card from '@mui/material/Card'; +// import CardActions from '@mui/material/CardActions'; +import CardContent from '@mui/material/CardContent'; +import DeleteIcon from '@mui/icons-material/Delete'; +import Button from '@mui/material/Button'; +import Typography from '@mui/material/Typography'; +import House from '../../../asstes/house.jpeg'; +import './style.css'; + +const AgenteEstate = () => ( + + + + + publish house + + + + + Rhoncus sed vestibulum + {' '} + + + + massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in + + + + House + {' '} + + + + + Buy + {' '} + + + + + + + + + + + + +); + +export default AgenteEstate; diff --git a/client/src/components/Agent/EstateAgent/style.css b/client/src/components/Agent/EstateAgent/style.css new file mode 100644 index 0000000..4338ab2 --- /dev/null +++ b/client/src/components/Agent/EstateAgent/style.css @@ -0,0 +1,4 @@ +.img-house{ + width: 150px; + height: 150px; +} \ No newline at end of file diff --git a/client/src/components/Agent/Favroit/index.jsx b/client/src/components/Agent/Favroit/index.jsx new file mode 100644 index 0000000..bccd4d9 --- /dev/null +++ b/client/src/components/Agent/Favroit/index.jsx @@ -0,0 +1,149 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { + Container, +} from '@mui/material'; +import Card from '@mui/material/Card'; +// import CardActions from '@mui/material/CardActions'; +import CardContent from '@mui/material/CardContent'; +import Button from '@mui/material/Button'; +import Typography from '@mui/material/Typography'; +import List from '@mui/material/List'; +import ListItem from '@mui/material/ListItem'; +import Divider from '@mui/material/Divider'; +import ListItemText from '@mui/material/ListItemText'; +import ListItemAvatar from '@mui/material/ListItemAvatar'; +import Avatar from '@mui/material/Avatar'; +import House from '../../../asstes/house.jpeg'; + +const AgenteFavariot = () => ( + + + + + + + + + Favatiot Estate + {' '} + + + + + + + + + + massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in + + + + + )} + /> + + + + + + + + + + + + massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in + + + )} + /> + + + + + + + + + + + + +); + +export default AgenteFavariot; diff --git a/client/src/components/Agent/Info/index.jsx b/client/src/components/Agent/Info/index.jsx new file mode 100644 index 0000000..53386db --- /dev/null +++ b/client/src/components/Agent/Info/index.jsx @@ -0,0 +1,101 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { + Container, Avatar, +} from '@mui/material'; +import Card from '@mui/material/Card'; +import PhoneAndroidIcon from '@mui/icons-material/PhoneAndroid'; +import RoomIcon from '@mui/icons-material/Room'; +import CardContent from '@mui/material/CardContent'; +import EditIcon from '@mui/icons-material/Edit'; +import EmailIcon from '@mui/icons-material/Email'; +import Button from '@mui/material/Button'; +import Typography from '@mui/material/Typography'; + +import PresonImg from '../../../asstes/avatar.png'; + +const AgentInfo = () => ( + + + + + + + + + Mohammed M. Salah + + + + {' '} + 0597777777 + + + + + Palestine, Gaza + + + + + moh2020@gmail.com + + + + + + + + + + + + +); + +export default AgentInfo; diff --git a/client/src/components/Agent/PenddingEstate/index.jsx b/client/src/components/Agent/PenddingEstate/index.jsx new file mode 100644 index 0000000..e38d32e --- /dev/null +++ b/client/src/components/Agent/PenddingEstate/index.jsx @@ -0,0 +1,81 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { + Container, +} from '@mui/material'; +import Card from '@mui/material/Card'; +import CardContent from '@mui/material/CardContent'; +import Typography from '@mui/material/Typography'; +import House from '../../../asstes/house.jpeg'; + +const PenddingEstate = () => ( + + + + + publish house + + + + + Rhoncus sed vestibulum + {' '} + + + + massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in + + + + Apartment + {' '} + + + + + Rent + {' '} + + + + + + + + + +); + +export default PenddingEstate; diff --git a/client/src/components/Agent/static/index.jsx b/client/src/components/Agent/static/index.jsx new file mode 100644 index 0000000..71ec17b --- /dev/null +++ b/client/src/components/Agent/static/index.jsx @@ -0,0 +1,59 @@ +/* eslint-disable import/no-extraneous-dependencies */ +import { + Container, +} from '@mui/material'; +import Card from '@mui/material/Card'; +import CardContent from '@mui/material/CardContent'; +import Typography from '@mui/material/Typography'; + +const StaticEstate = () => ( + + + + + + + + + NO. Published estate : 5 + {' '} + + + + NO. Pindding estate : 2 + {' '} + + + + + + + + + +); + +export default StaticEstate; diff --git a/client/src/components/tab/index.jsx b/client/src/components/tab/index.jsx new file mode 100644 index 0000000..45437f1 --- /dev/null +++ b/client/src/components/tab/index.jsx @@ -0,0 +1,80 @@ +/* eslint-disable react/jsx-props-no-spreading */ +/* eslint-disable react/require-default-props */ +import * as React from 'react'; +// eslint-disable-next-line import/no-extraneous-dependencies +import PropTypes from 'prop-types'; +import Tabs from '@mui/material/Tabs'; +import Tab from '@mui/material/Tab'; +import Typography from '@mui/material/Typography'; +import Box from '@mui/material/Box'; +import AgenteEstate from '../Agent/EstateAgent'; +import StaticEstate from '../Agent/static'; +import PenddingEstate from '../Agent/PenddingEstate'; + +function TabPanel(props) { + const { + children, value, index, ...other + } = props; + + return ( + + ); +} + +TabPanel.propTypes = { + children: PropTypes.node, + index: PropTypes.number.isRequired, + value: PropTypes.number.isRequired, +}; + +function a11yProps(index) { + return { + id: `simple-tab-${index}`, + 'aria-controls': `simple-tabpanel-${index}`, + }; +} + +export default function ProfileTabs() { + const [value, setValue] = React.useState(0); + + const handleChange = (event, newValue) => { + setValue(newValue); + }; + + return ( + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/client/src/index.js b/client/src/index.js index 62adcf3..f452ad2 100644 --- a/client/src/index.js +++ b/client/src/index.js @@ -7,6 +7,5 @@ ReactDOM.render( , - document.getElementById('root') + document.getElementById('root'), ); - diff --git a/client/src/pages/Profile/index.jsx b/client/src/pages/Profile/index.jsx new file mode 100644 index 0000000..676d427 --- /dev/null +++ b/client/src/pages/Profile/index.jsx @@ -0,0 +1,27 @@ +import { + Container, Box, +} from '@mui/material'; +import AgentInfo from '../../components/Agent/Info'; +import AgenteFavariot from '../../components/Agent/Favroit'; + +import ProfileTabs from '../../components/tab'; + +const AgentProfile = () => ( + + + + + + + + + {' '} + + + +); + +export default AgentProfile; diff --git a/package.json b/package.json index 84ccd3e..4d94a2e 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ }, "homepage": "https://github.com/GSG-G10/Housy#readme", "dependencies": { + "@mui/icons-material": "^5.0.5", "bcrypt": "^5.0.1", "compression": "^1.7.4", "cookie-parser": "^1.4.5", @@ -29,7 +30,8 @@ "express": "^4.17.1", "joi": "^17.4.2", "jsonwebtoken": "^8.5.1", - "pg": "^8.7.1" + "pg": "^8.7.1", + "prop-types": "^15.7.2" }, "devDependencies": { "eslint": "^7.32.0", From 793762fec9a20a76ca40de91929c8cdf503aa0d9 Mon Sep 17 00:00:00 2001 From: mohammedsalah7 Date: Wed, 3 Nov 2021 14:33:24 +0200 Subject: [PATCH 2/4] get all data from api and display it in profile #55 --- client/package.json | 2 + .../components/Agent/EstateAgent/index.jsx | 179 ++++++++++-------- client/src/components/Agent/Favroit/index.jsx | 2 +- client/src/components/Agent/Info/index.jsx | 23 ++- .../components/Agent/PenddingEstate/index.jsx | 2 +- client/src/components/tab/index.jsx | 8 +- client/src/pages/Profile/index.jsx | 63 ++++-- 7 files changed, 170 insertions(+), 109 deletions(-) diff --git a/client/package.json b/client/package.json index b900884..f8568bf 100644 --- a/client/package.json +++ b/client/package.json @@ -6,12 +6,14 @@ "dependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", + "@mui/icons-material": "^5.0.5", "@mui/material": "^5.0.4", "@testing-library/jest-dom": "^5.14.1", "@testing-library/react": "^11.2.7", "@testing-library/user-event": "^12.8.3", "axios": "^0.23.0", "eslint-config-react-app": "^6.0.0", + "prop-types": "^15.7.2", "react": "^17.0.2", "react-dom": "^17.0.2", "react-router-dom": "^5.3.0", diff --git a/client/src/components/Agent/EstateAgent/index.jsx b/client/src/components/Agent/EstateAgent/index.jsx index 08ad579..a40d9cd 100644 --- a/client/src/components/Agent/EstateAgent/index.jsx +++ b/client/src/components/Agent/EstateAgent/index.jsx @@ -1,3 +1,5 @@ +/* eslint-disable no-console */ +/* eslint-disable react/prop-types */ /* eslint-disable import/no-extraneous-dependencies */ import { Container, @@ -8,101 +10,112 @@ import CardContent from '@mui/material/CardContent'; import DeleteIcon from '@mui/icons-material/Delete'; import Button from '@mui/material/Button'; import Typography from '@mui/material/Typography'; -import House from '../../../asstes/house.jpeg'; +import House from '../../../assetes/house.jpeg'; import './style.css'; -const AgenteEstate = () => ( - - - - { + console.log('AgenteEstate', data); + return ( + - publish house + > + + {data.length ? data.map((datas) => ( + + + - Rhoncus sed vestibulum - {' '} - - - - massa volutpat convallis morbi odio odio elementum eu interdum eu tincidunt in - - - - House - {' '} - - + {datas.title} + + + + + {datas.title} + {' '} + + + + {datas.description} + + + + {datas.category} + {' '} + + + + + {datas.type} + {' '} + + + + + - - Buy - {' '} - + - - - - - - - + + )) : ' You are still not published any estate' } - -); + + ); +}; export default AgenteEstate; diff --git a/client/src/components/Agent/Favroit/index.jsx b/client/src/components/Agent/Favroit/index.jsx index bccd4d9..11d58e3 100644 --- a/client/src/components/Agent/Favroit/index.jsx +++ b/client/src/components/Agent/Favroit/index.jsx @@ -13,7 +13,7 @@ import Divider from '@mui/material/Divider'; import ListItemText from '@mui/material/ListItemText'; import ListItemAvatar from '@mui/material/ListItemAvatar'; import Avatar from '@mui/material/Avatar'; -import House from '../../../asstes/house.jpeg'; +import House from '../../../assetes/house.jpeg'; const AgenteFavariot = () => ( ( +const AgentInfo = ({ + name, email, phone, avater, +}) => ( ( }} > ( > - Mohammed M. Salah + {name} {' '} - 0597777777 + {phone} @@ -72,7 +75,7 @@ const AgentInfo = () => ( - moh2020@gmail.com + {email} @@ -97,5 +100,11 @@ const AgentInfo = () => ( ); +AgentInfo.propTypes = { + name: PropTypes.string.isRequired, + email: PropTypes.string.isRequired, + phone: PropTypes.string.isRequired, + avater: PropTypes.string.isRequired, +}; export default AgentInfo; diff --git a/client/src/components/Agent/PenddingEstate/index.jsx b/client/src/components/Agent/PenddingEstate/index.jsx index e38d32e..73184d5 100644 --- a/client/src/components/Agent/PenddingEstate/index.jsx +++ b/client/src/components/Agent/PenddingEstate/index.jsx @@ -5,7 +5,7 @@ import { import Card from '@mui/material/Card'; import CardContent from '@mui/material/CardContent'; import Typography from '@mui/material/Typography'; -import House from '../../../asstes/house.jpeg'; +import House from '../../../assetes/house.jpeg'; const PenddingEstate = () => ( { @@ -69,7 +69,7 @@ export default function ProfileTabs() { - + diff --git a/client/src/pages/Profile/index.jsx b/client/src/pages/Profile/index.jsx index 676d427..4e26929 100644 --- a/client/src/pages/Profile/index.jsx +++ b/client/src/pages/Profile/index.jsx @@ -1,3 +1,8 @@ +/* eslint-disable no-unused-vars */ +/* eslint-disable no-console */ +import { useState, useEffect } from 'react'; +import axios from 'axios'; + import { Container, Box, } from '@mui/material'; @@ -6,22 +11,54 @@ import AgenteFavariot from '../../components/Agent/Favroit'; import ProfileTabs from '../../components/tab'; -const AgentProfile = () => ( +const AgentProfile = () => { + const [error, setError] = useState(''); + const [data, setData] = useState([]); + const [userId, setUserId] = useState(1); + + useEffect(() => { + const getData = async () => { + await axios.get(`/api/v1/users/${userId}/estates`) + .then((res) => { + setData(res.data.data); + }) + .catch((err) => { + setError(err); + }); + }; + getData(); + }, [userId]); + + console.log('ssss', data); + console.log(error); + return ( - - - - - - + + { + data.length + ? ( + + ) + : 'loading' + } + + + + - {' '} + {' '} - + -); + ); +}; export default AgentProfile; From 7e54ab35e591114ac64c42b79a15e21d2d092d95 Mon Sep 17 00:00:00 2001 From: mohammedsalah7 Date: Mon, 8 Nov 2021 12:57:35 +0200 Subject: [PATCH 3/4] create login component #64 --- client/package.json | 3 +- client/src/App.js | 2 +- client/src/components/Navbar/index.js | 45 +++++++- client/src/components/login/index.jsx | 150 ++++++++++++++++++++++++++ client/src/components/login/style.css | 0 5 files changed, 194 insertions(+), 6 deletions(-) create mode 100644 client/src/components/login/index.jsx create mode 100644 client/src/components/login/style.css diff --git a/client/package.json b/client/package.json index 1a91585..1395023 100644 --- a/client/package.json +++ b/client/package.json @@ -16,7 +16,8 @@ "react-dom": "^17.0.2", "react-icons": "^4.3.1", "react-router-dom": "^5.3.0", - "react-scripts": "4.0.3" + "react-scripts": "4.0.3", + "yup": "^0.32.11" }, "scripts": { "start": "react-scripts start", diff --git a/client/src/App.js b/client/src/App.js index b3e97a5..8709b66 100644 --- a/client/src/App.js +++ b/client/src/App.js @@ -1,7 +1,7 @@ import { BrowserRouter as Router } from 'react-router-dom'; -import PropertyCard from './components/PropertyCard'; import NavBar from './components/Navbar'; import { Footer } from './components'; +// import Login from './components/login'; function App() { return ( diff --git a/client/src/components/Navbar/index.js b/client/src/components/Navbar/index.js index 4d2c5ca..6a65b19 100644 --- a/client/src/components/Navbar/index.js +++ b/client/src/components/Navbar/index.js @@ -6,11 +6,30 @@ import { } from '@mui/material'; import './style.css'; +import Backdrop from '@mui/material/Backdrop'; +import Box from '@mui/material/Box'; +import Modal from '@mui/material/Modal'; +import Fade from '@mui/material/Fade'; +import Login from '../login'; import Logo from '../../asstes/logo.png'; import PresonImg from '../../asstes/avatar.png'; function NavBar() { - const [logged, setLogged] = useState(true); + const [logged, setLogged] = useState(false); + const [open, setOpen] = useState(false); + const handleOpen = () => setOpen(true); + const handleClose = () => setOpen(false); + const style = { + position: 'absolute', + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + width: 800, + bgcolor: 'background.paper', + // border: '2px solid #000', + boxShadow: 24, + p: 4, + }; return ( + + + + + + + ); diff --git a/client/src/components/login/index.jsx b/client/src/components/login/index.jsx new file mode 100644 index 0000000..0ba8c97 --- /dev/null +++ b/client/src/components/login/index.jsx @@ -0,0 +1,150 @@ +/* eslint-disable no-unused-vars */ +/* eslint-disable no-console */ +import { useState } from 'react'; +import { + Grid, Paper, Avatar, TextField, Button, Typography, +} from '@mui/material'; +import { useHistory, Link } from 'react-router-dom'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import Checkbox from '@mui/material/Checkbox'; +import PropTypes from 'prop-types'; +import axios from 'axios'; + +const Login = ({ handleClose, setLogged }) => { + // console.log(handleClose); + const history = useHistory(); + const [data, setData] = useState({ email: '', password: '' }); + const [error, setError] = useState({ email: false, password: false }); + const [LoginError, setLoginError] = useState(''); + const [LoginSuccessful, setLoginSuccessful] = useState(''); + + const { email, password } = data; + + const marginBtm = { marginBottom: 10 }; + const avatarStyle = { backgroundColor: '#1bbd7e' }; + const btnstyle = { + margin: '8px 0', + backgroundColor: '#CBA41B', + }; + const btnTopstyle = { + margin: '8px ', + backgroundColor: '#2E72DB', + }; + const box = { + border: '1px solid red', + width: '50%', + display: 'flex', + flexDirection: 'column', + + }; + + const handleError = (callback) => { + if (email === '' && password === '') { + setError({ email: true, password: true }); + } else if (email === '') { + setError({ email: true, password: false }); + } else if (password === '') { + setError({ email: false, password: true }); + } else { + setError({ email: false, password: false }); + callback(); + } + }; + + const handleChange = (e) => { + const { name, value } = e.target; + setData({ ...data, [name]: value }); + }; + + const handleSubmit = (e) => { + // console.log('yes'); + e.preventDefault(); + handleError(() => { + axios.post('/api/v1/user/login', { + email, + password, + }).then((res) => { + setLoginSuccessful(res); + handleClose(); + setLogged(true); + history.push('/'); + }) + .catch((err) => { + setLoginError(err.response.data.message); + }); + }); + }; + return ( + + + +

Welcome Back

+
+ + + + + + + + + + + + {LoginError} + + {/* */} + + {/* */} + + + Forgot password ? + + + + Do you have an account ? + + Sign Up + + + +
+ +
+ ); +}; + +Login.propTypes = { + handleClose: PropTypes.func.isRequired, + setLogged: PropTypes.func.isRequired, + +}; +export default Login; diff --git a/client/src/components/login/style.css b/client/src/components/login/style.css new file mode 100644 index 0000000..e69de29 From 539594cf7038b5ac4323e58339a90160e46a02e5 Mon Sep 17 00:00:00 2001 From: mohammedsalah7 Date: Mon, 8 Nov 2021 16:27:47 +0200 Subject: [PATCH 4/4] edit style login component #64 --- client/src/assets/Iconfacebook.png | Bin 0 -> 2827 bytes client/src/assets/Icongoogle.png | Bin 0 -> 3010 bytes client/src/components/Navbar/index.js | 12 ++--- client/src/components/login/index.jsx | 73 ++++++++++++++++---------- 4 files changed, 51 insertions(+), 34 deletions(-) create mode 100644 client/src/assets/Iconfacebook.png create mode 100644 client/src/assets/Icongoogle.png diff --git a/client/src/assets/Iconfacebook.png b/client/src/assets/Iconfacebook.png new file mode 100644 index 0000000000000000000000000000000000000000..aa21d3a28effc2afb02971a77c2f3909069255f3 GIT binary patch literal 2827 zcmV+m3-t7fP)A00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yPIJFOkC-|2kwW{&5cci;1UwyXL{{iLIN?s?~) zJ2Pj_%$&LB5&a*OmF*Zp$QW7;q;=mOyJB4QX?WS@GijSVlaArujea4ahxEmbFKQE& zWo{8_)S&uZ}-qY^1th^8s)g;d}2uPVdckW!(U#YHDa#fTYJ^e8CaxE+mUMXmWC3Y>Y`Hrg4s9WQ0D-enz4b+9Q`@?V6E_XD$oEf z`%yxNKTDm5C)22@;lnCrlUW_R!2?U*G2 zTA5~Hn3n~XwX~bD47wCT!IDVB<|r`?dh+B++9_7nYBY0im8R}|MKiN&e7`{}t2O!U z)UktfYV-h2jP=m@vwgH%xN+kKF3|9r3L$g5P@C8&jZ7m$7!-Q)Aph{HGwxcepyIa zUtg!~;L+kbz4iM!`r^y4%RjTQPVaoOKp)L4)4OjTr(;7^Y7>$EGiT0(+qZ8E;~GDh z2gD_$c?f6$!L{fh6%1g@fQ8VuP59!`*L3mizqcg-4+!JOzkMjUIGEeWMyTASb~*wu+j{O2K=Lx`uBBJ=(TV6@{I2nyYXn@xd;Hv*9Gw< zefYB%+tLUYME3CELui4}&OC`Gpl)dZwGDYq&;~Omf)giBNE;8>mLNblnAr-Kzdu5M z`Q=OWiys^j8*usj2>s?qN9oe51F;VT`PO@LR2HDMTCL`07(Btwp>Dz`@(vYqCBW+H zsz~U;g9p?uu79>%S^$?`DYq4YR=~KH!I2|JGNwDz2{cWx$qh*Api&e$R@5MxTO@MJ z00UD=yz|N8mVKbwWd&d;>s>09ig0Gyz_yLl(*+Hs#Y+U2BsL(45u9fr7{%GySrH0v zqp1waYQd?|gAHvTOfS*<(@&+27$OA(@Y(%Udi~{IYK6JEIWdl)owWhB4M7v6m#G#s zols~3q$V9W;xYly(W6I+x6!3EVdj3hPy)eG?z!1j`qlM$HmJ{~G@J21fBqGfK&Cb< zv*pZ&KBYetC35<->ZMceIhgNrYcjtbmCYn%1jG!IlLDmMl&&n=`R(Orqa$k2n^!R3C z6OO&GpC;X&0ecH9ixg#qz_gli4A2B>n|UolE^q#2<+x# z1C~0XVuS(?4I3zH$bF$^cN5e@YzYwg>+bnNMiB9BVmL2^e?FJ(b1T4ZOqNTy_+^k& zc?|~B@1(g6lpiFbtN;Ma^bcS8?|hn={7!$Ve&)%rlzBOzc$E+Sn?(9-OhO{3hz7V9 z-J7@NA}_rlKtv(fP7>;bx8; zk7gVj@(HAp(yS6`#261^(GKtvHfl(t&)okvO@00^8co!@ucsn=i?i%DC(ripcp34; z3DXG=ndVI7CNw$qW}mGvW%!iU#mfQCyq6{08#)9`?;+63*KXE?F8wUG-%irtJ8N=y zEC)Gq!^;6efF5>XAPm@PLg3N^+S#~+j{^k)XfA|Q6EF}of#ZZjp+f+ARS2NJK@+I) zNKZt}He0adup@i$KSaZN2ag&f_%Bg8cuhE{ssw35s-3hPdSS~zziNTk1b+~%@X)6} zMwc#$9!^;;g$@AKmxCBZ<-wmepYXfMTo}M0O0rV)%;u&aD6LN>SsK`6G zld66>9Mo7ryu__rx5n4j);>(sqGR`eXePm=Lo1dSTX9focX=!Om2JP$X%aF2nV-mNKYugGTc`g+E?xWaR(&q1L zNk6H(gXM+MaK+9R>s2&C4NQz45i@|s;o)IqIq>;-U=WfZ8X}~O^5q3B{yx{IzrTN& z8J2#iHyLAiU|?WK-+^}y>a|bli2)L5b)Lb;2R=|DD$s_g3BH3J+S2cm73?Z`W0E@s zHZ(LO&nzx3rt0PIGiD+@eOmw4$aT_s!_LnC#zLXxz$P8;DCBT3)ebUCX z2ma_1^s8E`K~zu|-x)h1J&o@VnqY|!Tatyt=%{kcJc@r&s+wRd=%ENH%w%BY$*HZ~ z<2PLSzNXLASkO{zOx8ka$43?ufYN8DYa}_u8WuB3k?YOl%MJgOkt2MzURc6$0KjK$ z@vME}!3_(f#x^1q0*E$2)R-}2C~&(Jwj;RTKwTNaGhk2{#qW3ybqE>H+j|xk7HT>X zk_h(i_USZ#Cc#g#@sa+Y%Et+^-LwHvSSy4X`=G%F651e4BHzG962EVFVeH$tuf_}! zW{ulLV@Ndzzo8BNs?{pK!`GNGFe_Kw>+c($ai>k91=uo!7A#Zb4zL6~AMPAu<_~2Q zWt9wK7tB>Af4Yb+lky?8xKHPrdUYFX*F$ODiW)R&cg8K&i=NSUm;toXrR6|k3>!8~ d%3D(b{0CXt5(x3Ts09E3002ovPDHLkV1gH(MCbqj literal 0 HcmV?d00001 diff --git a/client/src/assets/Icongoogle.png b/client/src/assets/Icongoogle.png new file mode 100644 index 0000000000000000000000000000000000000000..79ee307f949027be75dac0edc093e1da7fba20c9 GIT binary patch literal 3010 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 - {' '} - {/* */} - {/* */} - - {/* */} + + + {logged ? ( diff --git a/client/src/components/login/index.jsx b/client/src/components/login/index.jsx index 0ba8c97..9c38b30 100644 --- a/client/src/components/login/index.jsx +++ b/client/src/components/login/index.jsx @@ -1,17 +1,15 @@ /* eslint-disable no-unused-vars */ -/* eslint-disable no-console */ import { useState } from 'react'; import { Grid, Paper, Avatar, TextField, Button, Typography, } from '@mui/material'; import { useHistory, Link } from 'react-router-dom'; -import FormControlLabel from '@mui/material/FormControlLabel'; -import Checkbox from '@mui/material/Checkbox'; import PropTypes from 'prop-types'; import axios from 'axios'; +import Facebook from '../../assets/Iconfacebook.png'; +import Google from '../../assets/Icongoogle.png'; const Login = ({ handleClose, setLogged }) => { - // console.log(handleClose); const history = useHistory(); const [data, setData] = useState({ email: '', password: '' }); const [error, setError] = useState({ email: false, password: false }); @@ -21,21 +19,42 @@ const Login = ({ handleClose, setLogged }) => { const { email, password } = data; const marginBtm = { marginBottom: 10 }; - const avatarStyle = { backgroundColor: '#1bbd7e' }; const btnstyle = { margin: '8px 0', backgroundColor: '#CBA41B', }; - const btnTopstyle = { + const loginWithSocialMedia = { margin: '8px ', backgroundColor: '#2E72DB', + display: 'flex', + flexDirection: 'row', + justifyContent: 'space-between', + textTransform: 'none', }; - const box = { - border: '1px solid red', + const loginWithEmail = { width: '50%', display: 'flex', flexDirection: 'column', + }; + const Container = { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + boxShadow: 'none', + + }; + const containerBtn = { + width: '90%', + display: 'flex', + alignItems: 'center', + + }; + const avatar = { + borderRadius: 0, + width: '30px', + height: '30px', + }; const handleError = (callback) => { @@ -57,7 +76,6 @@ const Login = ({ handleClose, setLogged }) => { }; const handleSubmit = (e) => { - // console.log('yes'); e.preventDefault(); handleError(() => { axios.post('/api/v1/user/login', { @@ -76,24 +94,28 @@ const Login = ({ handleClose, setLogged }) => { }; return ( - +

Welcome Back

- - - - - + + + OR + + + { placeholder="Enter password" type="password" name="password" - fullWidth required error={!!error.password} onChange={handleChange} @@ -121,17 +142,15 @@ const Login = ({ handleClose, setLogged }) => { {LoginError} - {/* */} - {/* */} - - - Forgot password ? - - + {/* */} + + Forgot password ? + + {/* */} Do you have an account ? - + Sign Up