diff options
-rw-r--r-- | src/actions/app.js | 27 | ||||
-rw-r--r-- | src/actions/firebase.js | 206 | ||||
-rw-r--r-- | src/components/mao-home.js | 2 | ||||
-rw-r--r-- | src/reducers/firebase.js | 97 |
4 files changed, 20 insertions, 312 deletions
diff --git a/src/actions/app.js b/src/actions/app.js index e0b95e3..e59a75b 100644 --- a/src/actions/app.js +++ b/src/actions/app.js @@ -29,17 +29,20 @@ export const navigate = (path) => (dispatch) => { import { snapshotForums } from './firebaseFirestore.js'; var hasSubscribedPosts = false; -const loadPage = (page) => (dispatch) => { +const loadPage = (page) => (dispatch, getState) => { switch(page) { case 'home': import('../components/mao-home.js') - break; + break; + case 'compete': import('../components/mao-competitions.js'); - break; + break; + case 'tutor': import('../components/mao-tutoring.js'); - break; + break; + case 'forums': import('../components/mao-forums.js').then((module) => { if(!hasSubscribedPosts) { @@ -47,13 +50,21 @@ const loadPage = (page) => (dispatch) => { hasSubscribedPosts = true; } }); - break; + break; + case 'account': import('../components/mao-account.js'); - break; + break; + case 'admin': - import('../components/mao-admin.js'); - break; + if(getState.firebaseAuth.isAdmin) { + import('../components/mao-admin.js'); + } else { + page = 'view404'; + import('../components/my-view404.js'); + } + break; + default: page = 'view404'; import('../components/my-view404.js'); diff --git a/src/actions/firebase.js b/src/actions/firebase.js deleted file mode 100644 index d93e227..0000000 --- a/src/actions/firebase.js +++ /dev/null @@ -1,206 +0,0 @@ -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 diff --git a/src/components/mao-home.js b/src/components/mao-home.js index ac9c04c..5238319 100644 --- a/src/components/mao-home.js +++ b/src/components/mao-home.js @@ -32,7 +32,7 @@ class MaoHome extends PageViewElement { <section class="img-section"> <div class="container"> <img src="https://i.imgur.com/BkbHV33.jpg" alt="Maths"> - <div class="centered">Becuase... Math Is Beautiful</div> + <div class="centered">Because... Math Is Beautiful</div> </div> </section> diff --git a/src/reducers/firebase.js b/src/reducers/firebase.js deleted file mode 100644 index 6c4e206..0000000 --- a/src/reducers/firebase.js +++ /dev/null @@ -1,97 +0,0 @@ -/** -@license -Copyright (c) 2018 The Polymer Project Authors. All rights reserved. -This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt -The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt -The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt -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_SUCCESS, - AUTH_SIGN_OUT, - UPDATE_DIVISON, - UPDATE_HOURS, - UPDATE_REGISTERED_COMPETITIONS, - UPDATE_FORUM_POSTS, - UPDATE_ADMIN, - UPDATE_ADMIN_REQUESTS, - UPDATE_ADMIN_COMP_LIST -} -from '../actions/firebase.js'; - -const firebase = (state = {initialized: false, hours: -1, requestedHours: -1, uid: "", userEmail: "", divison: "", registeredComps: [], forumPosts: [], isAdmin: false, requests: [], compList: []}, action) => { - switch (action.type) { - case AUTH_SUCCESS: - return { - ...state, - initialized: action.payload, - uid: action.uid, - userEmail: action.userEmail - }; - break; - - case UPDATE_DIVISON: - return { - ...state, - divison: action.payload - }; - break; - - case AUTH_SIGN_OUT: - return { - ...state, - initialized: action.payload, - authMessage: action.code - } - break; - - case UPDATE_HOURS: - return { - ...state, - hours: action.approvedHours, - requestedHours: action.requestedHours - } - break; - - case UPDATE_REGISTERED_COMPETITIONS: - return { - ...state, - registeredComps : action.payload - } - break; - - case UPDATE_FORUM_POSTS: - return { - ...state, - forumPosts : action.payload - } - break; - - case UPDATE_ADMIN: - return { - ...state, - isAdmin : action.payload - } - - case UPDATE_ADMIN_REQUESTS: - return { - ...state, - requests : action.payload - } - break; - - case UPDATE_ADMIN_COMP_LIST: - return { - ...state, - compList : action.payload - } - break; - - default: - return state; - } -}; - -export default firebase; |