import { auth } from '../firebase.js'; export const AUTH_SUCCESS = 'AUTH_SUCCESS'; export const UPDATE_DIVISON = 'UPDATE_DIVISON'; export const AUTH_SIGN_OUT = 'AUTH_SIGN_OUT'; export const UPDATE_ADMIN = 'UPDATE_ADMIN'; export const createAccount = (_email, _password, divison) => (dispatch) => { auth.createUserWithEmailAndPassword(_email, _password).then(() => { dispatch(signIn(_email, _password, divison)); }) .catch((error) => { // Handle Errors here. alert(error.code + ": " + error.message); }); } export const signIn = (_email, _password, divison) => (dispatch) => { 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)); if(divison) { dispatch(setUserData(divison)); } dispatch(fetchDivison()); dispatch(snapshotHours()) dispatch(snapshotRegisteredCompetitions()); //Admin controls if( user.uid === 'rxKROQAukzchWuueDLwA9c0YmsT2' || //Lucy Wood user.uid === 'sAVjlnSAETaP5VtTKGhfBKHKeQF2' //Michael Foiani ) { dispatch(adminListener()); } }) .catch((error) => { dispatch(authFail(error.code)); }); } export const setUserData = (_divison) => (dispatch, getState) => { const uid = getState().firebase.uid; var docRef = firestore.collection('users').doc(uid); docRef.set({ hours: 0, divison: _divison }).catch((error) => { console.log(error); }) } export const adminListener = () => (dispatch, getState) => { document.onkeyup = function(e) { if(e.altKey && e.which == 65) { var docRef = firestore.collection('keys').doc('adminKey'); docRef.get().then((doc) => { if(prompt('Enter admin password') == doc.data().password) { dispatch(adminControls()); } }); } } } export const authFail = (errorCode) => { alert(errorCode); return { type: AUTH_FAIL, payload: false, uid: null } } export const authSuccess = (_user) => { alert('Sign In Success'); return { type: AUTH_SUCCESS, payload: true, uid: _user.uid, userEmail: _user.email } } export const fetchDivison = () => (dispatch, getState) => { const uid = getState().firebase.uid; var docRef = firestore.collection('users').doc(uid); docRef.get().then((doc) => { dispatch(updateDivison(doc.data().divison)); }); } export const updateDivison = (divison) => { return { type: UPDATE_DIVISON, payload: divison } } export const adminControls = () => (dispatch) => { dispatch(updateAdmin()); dispatch(snapshotAdminRequests()); dispatch(snapshotAdminCompList()); } export const updateAdmin = () => { return { type: UPDATE_ADMIN, payload: true } } export const signOut = () => (dispatch) => { auth.signOut().then(() => { dispatch(authSignOut()); }); } export const authSignOut = () => { return { type: AUTH_SIGN_OUT, payload: false, code: "Signed Out User", uid: "", userEmail: "", isAdmin: false, requests: [], compList: [] } }