Skip to content

Commit 092e704

Browse files
committed
Homepage updates without redirect
1 parent da071c0 commit 092e704

5 files changed

Lines changed: 171 additions & 4 deletions

File tree

src/App.js

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,31 @@
1-
import React, { Component } from 'react';
1+
import React from 'react';
2+
import { browserHistory } from 'react-router';
3+
4+
import { initializeSdk } from './facebook';
25
import './App.css';
36

4-
class App extends Component {
7+
export default class extends React.Component {
8+
9+
componentDidMount() {
10+
initializeSdk(function () {
11+
12+
// eslint-disable-next-line no-undef
13+
FB.Event.subscribe('auth.statusChange', function (response) {
14+
if (response.status === 'connected') {
15+
browserHistory.replace('/Home');
16+
} else {
17+
console.log('not connected');
18+
browserHistory.push('/');
19+
}
20+
});
21+
});
22+
}
523
render() {
624
return (
725
<div className="App">
8-
Hello!
26+
{this.props.children}
927
</div>
1028
);
1129
}
1230
}
1331

14-
export default App;

src/Home.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { getUserImage, getUser, logout } from './facebook';
2+
import React from 'react';
3+
4+
export default class extends React.Component {
5+
constructor() {
6+
7+
super();
8+
this.state = {
9+
imgUrl: '',
10+
userName: '',
11+
};
12+
}
13+
14+
componentWillUpdate() {
15+
console.log('Home component will update');
16+
17+
if (typeof FB !== 'undefined' && this.state.userName === '') {
18+
getUser((err, user) => {
19+
if (err) return console.log(err);
20+
console.log(user);
21+
this.setState({ userName: user.name });
22+
getUserImage(user.id, (err, imgUrl) => {
23+
if (err) return console.log(err);
24+
this.setState({ imgUrl: imgUrl });
25+
});
26+
});
27+
}
28+
}
29+
componentDidMount() {
30+
console.log('Home component will mount');
31+
if (typeof FB !== 'undefined') {
32+
getUser((err, user) => {
33+
if (err) return console.log(err);
34+
console.log(user);
35+
this.setState({ userName: user.name });
36+
getUserImage(user.id, (err, imgUrl) => {
37+
if (err) return console.log(err);
38+
this.setState({ imgUrl: imgUrl });
39+
});
40+
});
41+
}
42+
}
43+
handleButtonClick = () => {
44+
logout();
45+
}
46+
render() {
47+
return (
48+
<div>
49+
<button classID="logOut" onClick={this.handleButtonClick}>Log out</button>
50+
<h2>{this.state.userName}</h2>
51+
<img src={this.state.imgUrl} alt="Profile" />
52+
</div>
53+
);
54+
}
55+
}

src/Login.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import React from 'react';
2+
import { login } from './facebook';
3+
export default class extends React.Component {
4+
5+
handleClick = () => {
6+
7+
login((err) => {
8+
if (err) console.log(err);
9+
});
10+
}
11+
12+
render() {
13+
return (
14+
<div className="App">
15+
<a href="#" onClick={this.handleClick}>Login using facebook</a>
16+
</div>
17+
);
18+
}
19+
};

src/facebook.js

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
function initializeSdk(callback) {
2+
(function (d, s, id) {
3+
var js, fjs = d.getElementsByTagName(s)[0];
4+
5+
if (d.getElementById(id)) {
6+
console.log('if statement got called');
7+
return;
8+
}
9+
js = d.createElement(s); js.id = id;
10+
js.src = '//connect.facebook.net/en_US/sdk.js';
11+
fjs.parentNode.insertBefore(js, fjs);
12+
} (document, 'script', 'facebook-jssdk'));
13+
14+
15+
// sdk callback function
16+
window.fbAsyncInit = () => {
17+
console.log('fbAsyncInit called');
18+
// eslint-disable-next-line no-undef
19+
FB.init({
20+
appId: '355696044788303',
21+
status: true,
22+
xfbml: true,
23+
version: 'v2.8',
24+
cookie: true,
25+
});
26+
callback();
27+
};
28+
}
29+
30+
function login(callback) {
31+
// eslint-disable-next-line no-undef
32+
FB.login((response) => {
33+
// console.log('login response');
34+
// console.log(response);
35+
if (response && !response.error) {
36+
return callback(null, response);
37+
}
38+
callback({ message: 'Unable to log in', response: response });
39+
});
40+
}
41+
function logout() {
42+
// eslint-disable-next-line no-undef
43+
console.log(FB);
44+
// eslint-disable-next-line no-undef
45+
FB.logout();
46+
}
47+
48+
function getUserImage(user_id, callback) {
49+
50+
// eslint-disable-next-line no-undef
51+
FB.api(`${user_id}/picture?type=large`, (response) => {
52+
if (response && response.data && response.data.url) {
53+
return callback(null, response.data.url);
54+
}
55+
// console.log(response);
56+
callback({ message: 'No image found' });
57+
});
58+
}
59+
60+
function getUser(callback) {
61+
// eslint-disable-next-line no-undef
62+
FB.api('/me', function (response) {
63+
// console.log('Successful login for: ' + response.name);
64+
if (response && response.name) {
65+
console.log(response);
66+
return callback(null, response);
67+
}
68+
callback({ message: 'No such user found' });
69+
});
70+
}
71+
72+
export { initializeSdk, login, logout, getUser, getUserImage };

src/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
import React from 'react';
22
import ReactDOM from 'react-dom';
33
import App from './App';
4+
import Login from './Login';
5+
import Home from './Home';
46
import { Router, Route, browserHistory, IndexRoute } from 'react-router';
57
import './index.css';
68

79
ReactDOM.render(
810
<Router history={browserHistory}>
911
<Route path="/" component={App}>
12+
<IndexRoute component={Login} />
13+
<Route path="/home" component={Home} />
1014
</Route>
1115
</Router>,
1216
document.getElementById('root')

0 commit comments

Comments
 (0)