Skip to content

Commit f0e101f

Browse files
my initial commit
1 parent 45804c4 commit f0e101f

10 files changed

Lines changed: 1443 additions & 633 deletions

File tree

package-lock.json

Lines changed: 940 additions & 397 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66
"@testing-library/jest-dom": "^5.11.4",
77
"@testing-library/react": "^11.1.0",
88
"@testing-library/user-event": "^12.1.10",
9-
"firebase": "^8.4.3",
9+
"chokidar": "^3.5.3",
10+
"firebase": "^8.10.1",
1011
"react": "^17.0.2",
1112
"react-dom": "^17.0.2",
1213
"react-router-dom": "^5.2.0",
13-
"react-scripts": "4.0.3",
14+
"react-scripts": "^4.0.3",
1415
"web-vitals": "^1.0.1"
1516
},
1617
"scripts": {

src/App.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,39 @@
1-
import React from 'react';
1+
import React,{useEffect,useContext} from 'react';
22
import './App.css';
3+
import { BrowserRouter as Router,Route} from 'react-router-dom';
4+
import Signup from './Pages/Signup'
5+
import Login from './Pages/Login';
6+
import { AuthContext,FirebaseContext } from './store/Context';
37

48
/**
59
* ? =====Import Components=====
610
*/
711
import Home from './Pages/Home';
812

13+
914
function App() {
15+
const {setUser}=useContext(AuthContext)
16+
const {firebase}=useContext(FirebaseContext)
17+
useEffect(()=>{
18+
firebase.auth().onAuthStateChanged((user)=>{
19+
setUser(user)
20+
})
21+
})
1022
return (
1123
<div>
12-
<Home />
24+
<Router>
25+
<Route exact path='/'>
26+
<Home />
27+
</Route>
28+
29+
<Route path='/signup'>
30+
<Signup />
31+
</Route>
32+
<Route path='/login'>
33+
<Login />
34+
</Route>
35+
36+
</Router>
1337
</div>
1438
);
1539
}

src/Components/Header/Header.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
import React from 'react';
2-
1+
import React,{useContext} from 'react';
2+
import {useHistory} from 'react-router-dom'
33
import './Header.css';
44
import OlxLogo from '../../assets/OlxLogo';
55
import Search from '../../assets/Search';
66
import Arrow from '../../assets/Arrow';
77
import SellButton from '../../assets/SellButton';
88
import SellButtonPlus from '../../assets/SellButtonPlus';
9+
import { AuthContext, FirebaseContext } from '../../store/Context';
10+
911
function Header() {
12+
const history=useHistory()
13+
const {user}=useContext(AuthContext)
14+
const {firebase}=useContext(FirebaseContext)
1015
return (
1116
<div className="headerParentDiv">
1217
<div className="headerChildDiv">
@@ -34,9 +39,14 @@ function Header() {
3439
<Arrow></Arrow>
3540
</div>
3641
<div className="loginPage">
37-
<span>Login</span>
42+
<span>{user ? `Welcome ${user.displayName}` :"Login" }</span>
3843
<hr />
44+
3945
</div>
46+
{user && <span onClick={()=>{
47+
firebase.auth().signOut()
48+
history.push('/login')
49+
}}>Logout</span> }
4050

4151
<div className="sellMenu">
4252
<SellButton></SellButton>

src/Components/Login/Login.js

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,36 @@
1-
import React from 'react';
2-
1+
import React, { useState,useContext } from 'react';
2+
import {FirebaseContext} from '../../store/Context';
33
import Logo from '../../olx-logo.png';
44
import './Login.css';
5+
import { useHistory } from 'react-router-dom';
56

67
function Login() {
8+
const [email,setEmail]=useState('')
9+
const [password,setPassword]=useState('')
10+
const {firebase}=useContext(FirebaseContext)
11+
const history = useHistory();
12+
const handleLogin=(e)=>{
13+
e.preventDefault()
14+
firebase.auth().signInWithEmailAndPassword(email,password).then(()=>{
15+
history.push('/')
16+
}).catch((error)=>{
17+
18+
alert(error.message )
19+
})
20+
}
721
return (
822
<div>
923
<div className="loginParentDiv">
1024
<img width="200px" height="200px" src={Logo}></img>
11-
<form>
25+
<form onSubmit={handleLogin}>
1226
<label htmlFor="fname">Email</label>
1327
<br />
1428
<input
1529
className="input"
1630
type="email"
1731
id="fname"
32+
value={email}
33+
onChange={(e)=>setEmail(e.target.value)}
1834
name="email"
1935
defaultValue="John"
2036
/>
@@ -25,6 +41,8 @@ function Login() {
2541
className="input"
2642
type="password"
2743
id="lname"
44+
value={password}
45+
onChange={(e)=>setPassword(e.target.value)}
2846
name="password"
2947
defaultValue="Doe"
3048
/>

src/Components/Signup/Signup.js

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,60 @@
1-
import React from 'react';
2-
1+
import React, { useState, useContext } from 'react';
32
import Logo from '../../olx-logo.png';
43
import './Signup.css';
4+
import FirebaseContext from '../../store/Context';
5+
import { useHistory } from 'react-router-dom';
56

67
export default function Signup() {
8+
const history = useHistory();
9+
const [username, setUsername] = useState('');
10+
const [email, setEmail] = useState('');
11+
const [phone, setPhone] = useState('');
12+
const [password, setPassword] = useState('');
13+
const { firebase } = useContext(FirebaseContext); // Remove 'firestore' from the destructured assignment
14+
15+
const handleSubmit = (e) => {
16+
e.preventDefault();
17+
firebase
18+
.auth()
19+
.createUserWithEmailAndPassword(email, password)
20+
.then((result) => {
21+
result.user
22+
.updateProfile({ displayName: username })
23+
.then(() => {
24+
firebase
25+
.firestore() // Access Firestore directly from the 'firebase' instance
26+
.collection('users') // Access the 'users' collection
27+
.add({
28+
id: result.user.uid,
29+
username: username,
30+
phone: phone,
31+
})
32+
.then(() => {
33+
history.push('/login');
34+
})
35+
.catch((error) => {
36+
console.error('Error adding document: ', error);
37+
});
38+
});
39+
})
40+
.catch((error) => {
41+
console.error('Error creating user: ', error);
42+
});
43+
};
44+
745
return (
846
<div>
947
<div className="signupParentDiv">
10-
<img width="200px" height="200px" src={Logo}></img>
11-
<form>
48+
<img width="200px" height="200px" src={Logo} alt="Logo" />
49+
<form onSubmit={handleSubmit}>
1250
<label htmlFor="fname">Username</label>
1351
<br />
1452
<input
1553
className="input"
1654
type="text"
1755
id="fname"
56+
value={username}
57+
onChange={(e) => setUsername(e.target.value)}
1858
name="name"
1959
defaultValue="John"
2060
/>
@@ -25,6 +65,8 @@ export default function Signup() {
2565
className="input"
2666
type="email"
2767
id="fname"
68+
value={email}
69+
onChange={(e) => setEmail(e.target.value)}
2870
name="email"
2971
defaultValue="John"
3072
/>
@@ -35,6 +77,8 @@ export default function Signup() {
3577
className="input"
3678
type="number"
3779
id="lname"
80+
value={phone}
81+
onChange={(e) => setPhone(e.target.value)}
3882
name="phone"
3983
defaultValue="Doe"
4084
/>
@@ -45,14 +89,16 @@ export default function Signup() {
4589
className="input"
4690
type="password"
4791
id="lname"
92+
value={password}
93+
onChange={(e) => setPassword(e.target.value)}
4894
name="password"
4995
defaultValue="Doe"
5096
/>
5197
<br />
5298
<br />
5399
<button>Signup</button>
54100
</form>
55-
<a>Login</a>
101+
<a href="/login">Login</a>
56102
</div>
57103
</div>
58104
);

src/firebase/config.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import firebase from 'firebase/app';
2+
import 'firebase/auth';
3+
import 'firebase/firestore';
4+
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
5+
const firebaseConfig = {
6+
apiKey: "AIzaSyAkRtp7S1LrCiKGTnKK_3Jycr-tu91Zda0",
7+
authDomain: "olx-clone1-a47a5.firebaseapp.com",
8+
projectId: "olx-clone1-a47a5",
9+
storageBucket: "olx-clone1-a47a5.appspot.com",
10+
messagingSenderId: "197762478746",
11+
appId: "1:197762478746:web:5c923c5f292d10dcec6523",
12+
measurementId: "G-JSEN9LG3HT"
13+
};
14+
firebase.initializeApp(firebaseConfig);
15+
16+
17+
18+
export default firebase;

src/index.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
33
import App from './App';
4+
import {FirebaseContext} from './store/Context';
5+
import Context from './store/Context';
6+
import firebase from './firebase/config';
47

5-
ReactDOM.render(<App />, document.getElementById('root'));
8+
ReactDOM.render(
9+
<FirebaseContext.Provider value={{ firebase }}> {/* Wrap 'firebase' inside an object */}
10+
<Context>
11+
<App />
12+
</Context>
13+
</FirebaseContext.Provider>,
14+
document.getElementById('root')
15+
);

src/store/Context.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { createContext, useState } from 'react';
2+
3+
export const FirebaseContext = createContext(null);
4+
export const AuthContext =createContext(null)
5+
6+
export default function Context({children}){
7+
const [user,setUser]=useState(null)
8+
return(
9+
<AuthContext.Provider value={{user,setUser}}>
10+
{children}
11+
</AuthContext.Provider>
12+
)
13+
}

0 commit comments

Comments
 (0)