aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/actions/firebase.js76
-rw-r--r--src/components/mao-home.js30
-rw-r--r--src/firebase.js5
-rw-r--r--src/reducers/firebase.js39
4 files changed, 119 insertions, 31 deletions
diff --git a/src/actions/firebase.js b/src/actions/firebase.js
index e13ab10..85ebe20 100644
--- a/src/actions/firebase.js
+++ b/src/actions/firebase.js
@@ -1,13 +1,26 @@
-import { firebase } from '../firebase.js';
+import { firebase, firestore } from '../firebase.js';
-export const AUTH_FAIL = 'AUTH_FAIL';
-export const AUTH_SUCCESS = 'AUTH_SUCCESS';
+//Start Firbase Auth
+export const AUTH_FAIL = 'AUTH_FAIL';
+export const AUTH_SUCCESS = 'AUTH_SUCCESS';
+export const AUTH_SIGN_OUT = 'AUTH_SIGN_OUT';
const auth = firebase.auth();
export const signIn = (_email, _password) => (dispatch) => {
- auth.signInWithEmailAndPassword(_email, _password).then((user) => {
- dispatch(authSuccess(user.email));
+ auth.signInWithEmailAndPassword(_email, _password).then(() => {
+ var user = auth.currentUser;
+ /* User is signed in.
+ var displayName = user.displayName;
+ var email = user.email;
+ var emailVerified = user.emailVerified;
+ var photoURL = user.photoURL;
+ var isAnonymous = user.isAnonymous;
+ var uid = user.uid;
+ var providerData = user.providerData;
+ */
+ dispatch(authSuccess(user));
+ dispatch(getHours())
})
.catch((error) => {
dispatch(authFail(error.code));
@@ -18,13 +31,60 @@ export const signIn = (_email, _password) => (dispatch) => {
export const authFail = (errorCode) => {
return {
type: AUTH_FAIL,
- payload: false
+ payload: false,
+ code: errorCode,
+ uid: null
}
}
-export const authSuccess = (email) => {
+export const authSuccess = (_user) => {
+ alert('authSuccess');
return {
type: AUTH_SUCCESS,
- payload: true
+ payload: true,
+ code: "Success",
+ uid: _user.uid
}
}
+
+export const signOut = () => (dispatch) => {
+ auth.signOut().then(() => {
+ dispatch(authSignOut());
+ });
+}
+
+export const authSignOut = () => {
+ return {
+ type: AUTH_SIGN_OUT,
+ payload: false,
+ code: "Signed Out User",
+ uid: null
+ }
+}
+//End Firebase Auth
+
+//Start Firebase Firestore
+export const GET_HOURS = 'GET_HOURS';
+export const UPDATE_HOURS = 'UPDATE_HOURS'
+
+export const getHours = () => (dispatch, getState) => {
+ const currentState = getState().firebase;
+ alert('ran');
+ if(currentState.initialized) {
+ var docRef = firestore.collection('users').doc(currentState.uid);
+ docRef.onSnapshot((doc) => {
+ dispatch(updateHours(doc.data().hours));
+ });
+ }
+
+
+}
+
+export const updateHours = (hours) => {
+ return {
+ type: 'UPDATE_HOURS',
+ payload: hours
+ }
+}
+
+//End Firebase Firestore
diff --git a/src/components/mao-home.js b/src/components/mao-home.js
index f56d858..6cca2ef 100644
--- a/src/components/mao-home.js
+++ b/src/components/mao-home.js
@@ -16,7 +16,7 @@ import { connect } from 'pwa-helpers/connect-mixin.js';
import { store } from '../store.js';
//These are the actions needed by this element.
-import { signIn } from '../actions/firebase.js';
+import { signIn, signOut } from '../actions/firebase.js';
// We are lazy loading its reducer.
import firebase from '../reducers/firebase.js';
@@ -37,12 +37,13 @@ class MaoHome extends connect(store)(PageViewElement) {
return html`
${SharedStyles}
<section>
- <h2>Static page</h2>
- <p>This is a text-only page.</p>
- <p>It doesn't do anything other than display some static text.</p>
+ <h2>Tutoring</h2>
+ <p hidden="${this.signedIn}" >You must sign in to see hours</p>
+ <p hidden="${!this.signedIn}" >You have ${props.hours} hours</p>
+
</section>
<section>
- <h2>Welcome</h2>
+ <h2>Welcome ${props.authMessage}</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ac nisi orci. Maecenas sollicitudin diam in diam efficitur cursus. Morbi sollicitudin in justo tincidunt placerat. Integer tincidunt elementum nisi, eu ornare dolor lacinia eget. Fusce pulvinar massa eget odio placerat, commodo molestie ipsum tempus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse porttitor id purus eu cursus. Suspendisse arcu nulla, mattis vel hendrerit et, malesuada a elit. Nam at diam ornare, aliquet est sed, malesuada metus. Cras nec enim vel nibh tincidunt euismod ut et enim. Etiam pharetra eros in sodales iaculis. Duis sagittis urna et cursus mollis. Cras tempor rutrum est. Praesent sollicitudin ligula at laoreet placerat. Praesent tortor dui, semper in sapien non, pharetra luctus turpis.</p>
@@ -55,22 +56,27 @@ class MaoHome extends connect(store)(PageViewElement) {
<paper-input label="password" id="passwordField">
</paper-input>
- <paper-button disabled="${this.signedIn}" on-tap="${() => this.doSomething()}">Sign In</paper-button>
- <paper-button raised on-tap="${() => this.status()}">Status</paper-button>
+ <paper-button disabled="${this.signedIn}" raised on-tap="${() => this.logIn()}">Sign In</paper-button>
+ <paper-button disabled="${!this.signedIn}" raised on-tap="${() => store.dispatch(signOut())}">Sign Out</paper-button>
</section>
`;
}
static get properties() { return {
// This is the data from the store.
- signedIn: Boolean,
+ signedIn: Boolean,
+ authMessage: String,
+ hours: Number
}}
_stateChanged(state) {
- this.signedIn = state.firebase.initialized;
+ this.hours = state.firebase.hours;
+
+ this.signedIn = state.firebase.initialized;
+ this.authMessage = state.firebase.authMessage;
}
- doSomething() {
+ logIn() {
const email = this.shadowRoot.getElementById('emailField') .value +
'@communityschoolnaples.org';
const password = this.shadowRoot.getElementById('passwordField') .value;
@@ -78,10 +84,6 @@ class MaoHome extends connect(store)(PageViewElement) {
store.dispatch(signIn(email,password));
}
- status() {
- alert(this.signedIn);
- }
-
}
window.customElements.define('mao-home', MaoHome);
diff --git a/src/firebase.js b/src/firebase.js
index bf62e37..690c2c1 100644
--- a/src/firebase.js
+++ b/src/firebase.js
@@ -9,3 +9,8 @@ var config = {
messagingSenderId: "764071630447"
};
firebase.initializeApp(config);
+
+//set settings and export firestore
+export const firestore = firebase.firestore();
+const settings = {timestampsInSnapshots: true};
+firestore.settings(settings);
diff --git a/src/reducers/firebase.js b/src/reducers/firebase.js
index 2c7ba56..6f02c69 100644
--- a/src/reducers/firebase.js
+++ b/src/reducers/firebase.js
@@ -8,25 +8,46 @@ Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
-import { AUTH_FAIL, AUTH_SUCCESS } from '../actions/firebase.js';
+import {
+ AUTH_FAIL,
+ AUTH_SUCCESS,
+ AUTH_SIGN_OUT,
+ UPDATE_HOURS
+}
+from '../actions/firebase.js';
-const firebase = (state = {initialized: false}, action) => {
+const firebase = (state = {initialized: false, authMessage: "", hours: -1, uid: null}, action) => {
switch (action.type) {
case AUTH_SUCCESS:
- alert(action.payload);
return {
...state,
- initialized: action.payload
+ initialized: action.payload,
+ authMessage: action.code,
+ uid: action.uid
};
- break;
+ break;
case AUTH_FAIL:
- alert(action.payload);
return {
...state,
- initialized: action.payload
- };
- break;
+ authMessage: action.code
+ }
+ break;
+
+ case AUTH_SIGN_OUT:
+ return {
+ ...state,
+ initialized: action.payload,
+ authMessage: action.code
+ }
+ break;
+
+ case UPDATE_HOURS:
+ return {
+ ...state,
+ hours: action.payload
+ }
+ break;
default:
return state;