Skip to content

Commit a4b4991

Browse files
committed
Merge pull request #243 from lisamcho/fb_refactor
Facebook refactor with email and photo saving
2 parents d3dcec3 + be5c632 commit a4b4991

16 files changed

Lines changed: 221 additions & 365 deletions

src/js/actions/FacebookActionCreators.js

Lines changed: 0 additions & 104 deletions
This file was deleted.

src/js/actions/FacebookActions.js

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
const web_app_config = require("../config");
2+
import Dispatcher from "../dispatcher/Dispatcher";
3+
import VoterActions from "../actions/VoterActions";
4+
import FacebookConstants from "../constants/FacebookConstants";
5+
const cookies = require("../utils/cookies");
6+
7+
module.exports = {
8+
9+
initFacebook: function () {
10+
window.fbAsyncInit = function () {
11+
window.FB.init({
12+
appId: web_app_config.FACEBOOK_APP_ID,
13+
xfbml: true,
14+
version: "v2.5"
15+
});
16+
};
17+
18+
(function (d, s, id){
19+
var js, fjs = d.getElementsByTagName(s)[0];
20+
if (d.getElementById(id)) {return;}
21+
js = d.createElement(s); js.id = id;
22+
js.src = "//connect.facebook.net/en_US/sdk.js";
23+
fjs.parentNode.insertBefore(js, fjs);
24+
}(document, "script", "facebook-jssdk"));
25+
},
26+
27+
facebookSignIn: function (facebook_id, facebook_email){
28+
Dispatcher.loadEndpoint("facebookSignIn", {
29+
facebook_id: facebook_id,
30+
facebook_email: facebook_email
31+
});
32+
},
33+
34+
facebookDisconnect: function (){
35+
Dispatcher.loadEndpoint("facebookDisconnect");
36+
},
37+
38+
appLogout: function (){
39+
cookies.setItem("voter_device_id", "", -1, "/");
40+
VoterActions.signOut();
41+
VoterActions.retrieveVoter();
42+
},
43+
44+
login: function () {
45+
window.FB.getLoginStatus(function (response) {
46+
if (response.status === "connected") {
47+
Dispatcher.dispatch({
48+
type: FacebookConstants.FACEBOOK_LOGGED_IN,
49+
data: response
50+
});
51+
} else {
52+
window.FB.login( (res) =>{
53+
Dispatcher.dispatch({
54+
type: FacebookConstants.FACEBOOK_LOGGED_IN,
55+
data: res
56+
});
57+
}, {scope: "public_profile,email"});
58+
}
59+
});
60+
},
61+
62+
logout: function () {
63+
window.FB.logout((response) => {
64+
Dispatcher.dispatch({
65+
type: FacebookConstants.FACEBOOK_LOGGED_OUT,
66+
data: response
67+
});
68+
});
69+
},
70+
71+
disconnectFromFacebook: function () {
72+
// Removing connection between We Vote and Facebook
73+
Dispatcher.dispatch({
74+
type: FacebookConstants.FACEBOOK_SIGN_IN_DISCONNECT,
75+
data: true
76+
});
77+
},
78+
79+
getFacebookProfilePicture: function (userId) {
80+
window.FB.api(`/${userId}/picture?type=large`, (response) => {
81+
Dispatcher.dispatch({
82+
type: FacebookConstants.FACEBOOK_RECEIVED_PICTURE,
83+
data: response
84+
});
85+
});
86+
},
87+
88+
getFacebookEmail: function (){
89+
window.FB.api("/me?fields=id,email", (response) => {
90+
Dispatcher.dispatch({
91+
type: FacebookConstants.FACEBOOK_RECEIVED_EMAIL,
92+
data: response
93+
});
94+
});
95+
},
96+
97+
savePhoto: function (url){
98+
Dispatcher.loadEndpoint("voterPhotoSave", { facebook_profile_image_url_https: url } );
99+
},
100+
};

src/js/actions/VoterActions.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import Dispatcher from "../dispatcher/Dispatcher";
33
module.exports = {
44

55
signOut: function (){
6-
Dispatcher.loadEndpoint("voterSignOut", {sign_out_all_devices: true});
6+
Dispatcher.loadEndpoint("voterSignOut", {sign_out_all_devices: false});
77
},
88

99
retrieveVoter: function () {

src/js/components/Facebook/FacebookDisconnect.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from "react";
2-
import FacebookActionCreators from "../../actions/FacebookActionCreators";
2+
import FacebookActions from "../../actions/FacebookActions";
33

44
class FacebookDisconnect extends React.Component {
55
constructor (props) {
@@ -8,7 +8,7 @@ class FacebookDisconnect extends React.Component {
88

99
didClickDisconnectFromFacebookButton (e) {
1010
console.log("didClickDisconnectFromFacebookButton");
11-
FacebookActionCreators.disconnectFromFacebook();
11+
FacebookActions.disconnectFromFacebook();
1212
}
1313

1414
render () {

src/js/components/Facebook/FacebookDownloadPicture.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { PropTypes } from "react";
22

3-
import FacebookActionCreators from "../../actions/FacebookActionCreators";
3+
import FacebookActions from "../../actions/FacebookActions";
44

55
class FacebookDownloadPicture extends React.Component {
66
static propTypes = {
@@ -19,7 +19,7 @@ class FacebookDownloadPicture extends React.Component {
1919
}
2020

2121
didClickDownloadPicture () {
22-
FacebookActionCreators.getFacebookProfilePicture(this.props.userId);
22+
FacebookActions.getFacebookProfilePicture(this.props.userId);
2323
}
2424
}
2525

src/js/components/Facebook/FacebookLogin.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from "react";
2-
import FacebookActionCreators from "../../actions/FacebookActionCreators";
2+
import FacebookActions from "../../actions/FacebookActions";
33

44
class FacebookLogin extends React.Component {
55
constructor (props) {
@@ -10,7 +10,7 @@ class FacebookLogin extends React.Component {
1010
}
1111

1212
didClickFacebookLoginButton (e) {
13-
FacebookActionCreators.login();
13+
FacebookActions.login();
1414
}
1515
}
1616

src/js/components/Facebook/FacebookLogout.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from "react";
2-
import FacebookActionCreators from "../../actions/FacebookActionCreators";
2+
import FacebookActions from "../../actions/FacebookActions";
33

44
class FacebookLogout extends React.Component {
55
constructor (props) {
@@ -10,7 +10,7 @@ class FacebookLogout extends React.Component {
1010
}
1111

1212
didClickFacebookLogoutButton (e) {
13-
FacebookActionCreators.logout();
13+
FacebookActions.logout();
1414
}
1515
}
1616

src/js/components/Facebook/FacebookPicture.jsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ import FacebookConstants from "../../constants/FacebookConstants";
44

55
export default class FacebookPicture extends React.Component {
66
static propTypes = {
7-
history: PropTypes.object,
8-
children: PropTypes.object,
9-
params: PropTypes.object.isRequired,
107
facebookPictureStatus: PropTypes.string,
118
facebookPictureUrl: PropTypes.string
129
};

src/js/components/Facebook/FacebookSignIn.jsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from "react";
2-
import FacebookActionCreators from "../../actions/FacebookActionCreators";
2+
import FacebookActions from "../../actions/FacebookActions";
33

44
class FacebookSignIn extends React.Component {
55
constructor (props) {
@@ -12,8 +12,7 @@ class FacebookSignIn extends React.Component {
1212
}
1313

1414
didClickFacebookLoginButton () {
15-
console.log("didClickFacebookLoginButton");
16-
FacebookActionCreators.login(); // We call FacebookActionCreators.connectWithFacebook() within login()
15+
FacebookActions.login();
1716
}
1817
}
1918

src/js/components/Facebook/Main.js

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import React from "react";
2-
3-
import FacebookActionCreators from "../../actions/FacebookActionCreators";
2+
import FacebookActions from "../../actions/FacebookActions";
43
import FacebookStore from "../../stores/FacebookStore";
5-
import FacebookLogin from "../../components/Facebook/FacebookLogin";
6-
import FacebookLogout from "../../components/Facebook/FacebookLogout";
74
import FacebookDownloadPicture from "../../components/Facebook/FacebookDownloadPicture";
85
import FacebookPicture from "../../components/Facebook/FacebookPicture";
6+
import VoterStore from "../../stores/VoterStore";
97

108
class Main extends React.Component {
119
constructor (props) {
12-
super();
10+
super(props);
1311
this.state = this.getFacebookState();
1412
}
1513

@@ -19,33 +17,34 @@ class Main extends React.Component {
1917
loggedIn: FacebookStore.loggedIn,
2018
userId: FacebookStore.userId,
2119
facebookPictureStatus: FacebookStore.facebookPictureStatus,
22-
facebookPictureUrl: FacebookStore.facebookPictureUrl
20+
facebookPictureUrl: VoterStore.getPhoto()
2321
};
2422
}
2523

2624
componentDidMount () {
27-
FacebookActionCreators.initFacebook();
28-
this.changeListener = this._onFacebookChange.bind(this);
29-
FacebookStore.addChangeListener(this.changeListener);
25+
FacebookActions.initFacebook();
26+
this.listener = FacebookStore.addListener(this._onChange.bind(this));
27+
this.voterListener = VoterStore.addListener(this._onChange.bind(this));
3028
}
3129

3230
componentWillUnmount () {
33-
FacebookStore.removeChangeListener(this.changeListener);
34-
}
31+
this.listener.remove();
32+
this.voterListener.remove();
33+
}
3534

36-
_onFacebookChange () {
35+
_onChange () {
3736
this.setState(this.getFacebookState());
3837
}
3938

40-
4139
render () {
4240
return <div>
43-
{!this.state.loggedIn ? <FacebookLogin /> : null}
44-
{this.state.loggedIn ? <FacebookLogout /> : null}
4541
<p>Facebook logged in: {this.state.loggedIn ? "true" : "false"}</p>
4642
<p>Facebook access token: {this.state.accessToken}</p>
4743
<p>User ID is: {this.state.userId}</p>
48-
{this.state.userId ? <FacebookDownloadPicture userId={this.state.userId} /> : null}
44+
{this.state.userId ?
45+
<FacebookDownloadPicture userId={this.state.userId} /> :
46+
<div></div>
47+
}
4948
<FacebookPicture
5049
facebookPictureStatus={this.state.facebookPictureStatus}
5150
facebookPictureUrl={this.state.facebookPictureUrl} />

0 commit comments

Comments
 (0)