import { firestore, auth } from '../firebase.js'; //Start Firbase Auth export const AUTH_FAIL = 'AUTH_FAIL'; export const AUTH_SUCCESS = 'AUTH_SUCCESS'; export const FETCH_DIVISON = 'FETCH_DIVISON'; export const UPDATE_DIVISON = 'UPDATE_DIVISON'; export const AUTH_SIGN_OUT = 'AUTH_SIGN_OUT'; export const CREATE_ACCOUNT = 'CREATE_ACCOUNT'; export const ADMIN_LISTENER = 'ADMIN_LISTENER'; export const IS_ADMIN = 'IS_ADMIN'; export const ADMIN_CONTROLS = 'ADMIN_CONTROLS'; export const UPDATE_ADMIN = 'UPDATE_ADMIN'; export const SET_USER_DATA = 'SET_USER_DATA'; //End Firebase Auth //Start Firebase Firestore export const SNAPSHOT_HOURS = 'SNAPSHOT_HOURS'; export const UPDATE_HOURS = 'UPDATE_HOURS'; export const snapshotHours = () => (dispatch, getState) => { const currentState = getState().firebase; if(currentState.initialized) { var totalHours; var docRefUsers = firestore.collection('users').doc(currentState.uid); var docRefReq = firestore.collection('requests').where('uid', '==', currentState.uid); docRefUsers.onSnapshot((doc) => { totalHours = doc.data().hours; docRefReq.onSnapshot((query) => { var requestedHours = 0; query.forEach((docs) => { requestedHours += docs.data().time; }); dispatch(updateHours(totalHours, requestedHours)); }); }); } } export const updateHours = (hours, reqHours) => { return { type: 'UPDATE_HOURS', approvedHours: hours, requestedHours: reqHours } } export const REGISTER_COMP = 'REGISTER_COMP'; export const SNAPSHOT_REGISTERED_COMPETITIONS = 'SNAPSHOT_REGISTERED_COMPETITIONS'; export const UPDATE_REGISTERED_COMPETITIONS = 'UPDATE_REGISTERED_COMPETITIONS'; export const SNAPSHOT_ADMIN_COMP_LIST = 'SNAPSHOT_ADMIN_COMP_LIST'; export const UPDATE_ADMIN_COMP_LIST = 'UPDATE_ADMIN_COMP_LIST'; export const updateRegisteredCompetitions = (registeredComps) => { return { type: UPDATE_REGISTERED_COMPETITIONS, payload: registeredComps } } export const snapshotAdminCompList = () => (dispatch) => { var docRef = firestore.collection('competitions'); docRef.onSnapshot((querySnapshot) => { var compList = []; querySnapshot.forEach((doc) => { var divisonData = []; for(var i = 0; i < doc.data().uids.length; i++) { var docRefDivison = firestore.collection('users').doc(doc.data().uids[i]); docRefDivison.get().then((docUser) => { divisonData.push(docUser.data().divison); }); } compList.push({ ...doc.data(), name: doc.id, divisons: divisonData }); }); dispatch(updateAdminCompList(compList)); }); } export const updateAdminCompList = (compList) => { return { type: UPDATE_ADMIN_COMP_LIST, payload: compList } } export const REQUEST_HOURS = 'REQUEST_HOURS'; export const ADMIN_APPROVE_HOURS = 'ADMIN_APPROVE_HOURS'; export const ADMIN_REJECT_HOURS = 'ADMIN_REJECT_HOURS'; export const ADMIN_DELETE_REQUEST = 'ADMIN_DELETE_REQUEST'; export const SNAPSHOT_ADMIN_REQUESTS = 'SNAPSHOT_ADMIN_REQUESTS'; export const UPDATE_ADMIN_REQUESTS = 'UPDATE_ADMIN_REQUESTS'; export const requestHours = (_time, _trainee, _date) => (dispatch, getState) => { var docRef = firestore.collection('requests'); const _uid = getState().firebase.uid; const _email = getState().firebase.userEmail; docRef.add({ time: _time, trainee: _trainee, day: _date, uid: _uid, email: _email }); } export const snapshotAdminRequests = () => (dispatch) => { var docRef = firestore.collection('requests'); docRef.onSnapshot((querySnapshot) => { var requestList = []; querySnapshot.forEach((doc) => { requestList.push({ ...doc.data(), docId: doc.id }); }); dispatch(updateAdminRequests(requestList)); }); } export const updateAdminRequests = (requests) => { return { type: UPDATE_ADMIN_REQUESTS, payload: requests } } export const adminApproveHours = (_uid, _time, _id) => (dispatch) => { var docRef = firestore.collection('users').doc(_uid); docRef.get().then((doc) => { if(doc.exists) { docRef.update({ hours: (doc.data().hours + _time) }).catch((error) => { alert(error); }); } }); dispatch(adminDeleteRequest(_id)); } export const adminRejectHours = (_id) => (dispatch) => { dispatch(adminDeleteRequest(_id)); } export const adminDeleteRequest = (_id) => (dispatch) => { var docRef = firestore.collection('requests').doc(_id); docRef.delete().then(() => { //console.log('Deleted request with id ' + _id); }); } export const CREATE_FORUM_POST = 'CREATE_FORUM_POST'; export const SNAPSHOT_FORUM = 'SNAPSHOT_FORUM'; export const UPDATE_FORUM_POSTS = 'UPDATE_FORUM_POSTS'; export const createForumPost = (_subject, _content) => (dispatch, getState) => { var docRef = firestore.collection('posts'); const userEmail = getState().firebase.userEmail; docRef.add({ email: userEmail, subject: _subject, content: _content }); } export const snapshotForums = () => (dispatch) => { var docRef = firestore.collection('posts'); docRef.onSnapshot((query) => { var forumPosts = []; query.forEach((doc) => { forumPosts.push(doc.data()); }); dispatch(updateForumPosts(forumPosts)); }); } export const updateForumPosts = (_forumPosts) => { return { type: UPDATE_FORUM_POSTS, payload: _forumPosts } } //End Firebase Firestore