From eaf489da66c51cce931bceccd569d76704b205f9 Mon Sep 17 00:00:00 2001 From: Michael Foiani Date: Sun, 29 Jul 2018 01:52:47 -0400 Subject: Created backend for tutoring hour requests. Also, fixed some bugs on competition page by using snapshots. --- src/actions/firebase.js | 39 ++++++++++++++++++----------------- src/components/competition-element.js | 6 ++++-- src/components/mao-competitions.js | 33 ++++++++++++++--------------- src/components/mao-tutoring.js | 27 ++++++++++++++++++++---- src/components/test-element.js | 5 +++-- 5 files changed, 65 insertions(+), 45 deletions(-) (limited to 'src') diff --git a/src/actions/firebase.js b/src/actions/firebase.js index ab2e28e..2599d4f 100644 --- a/src/actions/firebase.js +++ b/src/actions/firebase.js @@ -21,7 +21,7 @@ export const signIn = (_email, _password) => (dispatch) => { */ dispatch(authSuccess(user)); dispatch(getHours()) - dispatch(pullRegisteredCompetitions()); + dispatch(snapshotRegisteredCompetitions()); }) .catch((error) => { dispatch(authFail(error.code)); @@ -77,8 +77,6 @@ export const getHours = () => (dispatch, getState) => { dispatch(updateHours(doc.data().hours, doc.data().requestedHours)); }); } - - } export const updateHours = (hours, reqHours) => { @@ -100,42 +98,34 @@ export const registerComp = (compName) => (dispatch, getState) => { docRef.get().then((doc) => { if(doc.exists) { var uidArr = doc.data().uids; - uidArr.push(uid); docRef.set({ uids: uidArr }); - - dispatch(pullRegisteredCompetitions()); } else { docRef.set({ uids : [uid] - }).then(() => { - dispatch(pullRegisteredCompetitions()); }); } }); } -export const pullRegisteredCompetitions = () => (dispatch, getState) =>{ - var registeredComps = []; +export const snapshotRegisteredCompetitions = () => (dispatch, getState) =>{ var docRef = firestore.collection('competitions'); - docRef.get().then((query) => { - query.forEach((doc) => { - if(doc.data().uids.includes(getState().firebase.uid)) { + docRef.onSnapshot((querySnapshot) => { + var registeredComps = []; + querySnapshot.forEach((doc) => { + if(doc.exists && doc.data().uids.includes(getState().firebase.uid)) { registeredComps.push(doc.id); } - }) - }); + }); + dispatch(updateRegisteredCompetitions(registeredComps)); - dispatch(updateRegisteredCompetitions(registeredComps)); + }); } - - - export const updateRegisteredCompetitions = (registeredComps) => { return { type: UPDATE_REGISTERED_COMPETITIONS, @@ -143,7 +133,18 @@ export const updateRegisteredCompetitions = (registeredComps) => { } } +export const REQUEST_HOURS = 'REQUEST_HOURS'; +export const requestHours = (_time, _trainee, _date) => (dispatch, getState) => { + var docRef = firestore.collection('requests'); + var _uid = getState().firebase.uid; + docRef.add({ + time: _time, + trainee: _trainee, + date: _date, + uid: _uid + }); +} //End Firebase Firestore diff --git a/src/components/competition-element.js b/src/components/competition-element.js index 17381c9..915de13 100644 --- a/src/components/competition-element.js +++ b/src/components/competition-element.js @@ -83,8 +83,10 @@ class CompetitionElement extends LitElement { } registerComp() { - this.dispatchEvent(new CustomEvent('register-comp')); - this.isRegistered = true; + if(confirm('Are you sure you want to register for ' + this.name + '?')) { + this.dispatchEvent(new CustomEvent('register-comp')); + } + } diff --git a/src/components/mao-competitions.js b/src/components/mao-competitions.js index ba00a2f..9a50d9e 100644 --- a/src/components/mao-competitions.js +++ b/src/components/mao-competitions.js @@ -152,7 +152,7 @@ class MaoCompetitions extends connect(store)(PageViewElement) {
@@ -247,7 +247,7 @@ class MaoCompetitions extends connect(store)(PageViewElement) { location="Orlando, Science School" initialized="${props.initialized}" isRegistered="${props.registeredComps.includes('February')}" - on-register-comp="${() => store.dispatch(registerComp(this.shadowRoot.getElementById('feb-competition-element').name))}"> + on-register-comp="${() => store.dispatch(registerComp('February'))}"> @@ -278,7 +278,7 @@ class MaoCompetitions extends connect(store)(PageViewElement) { initialized="${props.initialized}" isRegistered="${props.registeredComps.includes('amc')}" - on-register-comp="${() => store.dispatch(registerComp(this.shadowRoot.getElementById('amc-test-element').name))}"> + on-register-comp="${() => store.dispatch(registerComp('amc'))}"> @@ -295,7 +295,7 @@ class MaoCompetitions extends connect(store)(PageViewElement) { initialized="${props.initialized}" isRegistered="${props.registeredComps.includes('fml')}" - on-register-comp="${() => store.dispatch(registerComp(this.shadowRoot.getElementById('fml-test-element').name))}"> + on-register-comp="${() => store.dispatch(registerComp('fml'))}"> @@ -316,21 +316,18 @@ class MaoCompetitions extends connect(store)(PageViewElement) { this.initialized = state.firebase.initialized; this.registeredComps = state.firebase.registeredComps; //console.log(this.registeredComps); - - this.nationalRegistered = this.registeredComps.includes('nationals'); - this.statesRegistered = this.registeredComps.includes('states'); } registerNationals() { - store.dispatch(registerComp('nationals')); - - this.nationalRegistered = true; + if(confirm('Are you sure you want to register for nationals?')) { + store.dispatch(registerComp('nationals')); + } } registerStates() { - store.dispatch(registerComp('states')); - - this.statesRegistered = true; + if(confirm('Are you sure you want to register for states?')) { + store.dispatch(registerComp('states')); + } } } diff --git a/src/components/mao-tutoring.js b/src/components/mao-tutoring.js index d55b11f..5ab3c97 100644 --- a/src/components/mao-tutoring.js +++ b/src/components/mao-tutoring.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, signOut } from '../actions/firebase.js'; +import { signIn, signOut, requestHours } from '../actions/firebase.js'; // We are lazy loading its reducer. import firebase from '../reducers/firebase.js'; @@ -109,6 +109,12 @@ class MaoTutoring extends connect(store)(PageViewElement) { --paper-card-background-color: #f7f7f7; } + paper-button { + margin-left: auto; + margin-right: auto; + display: block; + } + h3 { text-align: center; } @@ -220,9 +226,17 @@ class MaoTutoring extends connect(store)(PageViewElement) {

How many hours of tutoring?

- (in minutes) + + (minutes) + - + @@ -290,7 +304,12 @@ class MaoTutoring extends connect(store)(PageViewElement) { } requestHours() { - alert(this.shadowRoot.getElementById('dateField').value); + const timeHours = (this.shadowRoot.getElementById('timeField') .value) + /60; + const traineeName = this.shadowRoot.getElementById('traineeField').value; + const date = this.shadowRoot.getElementById('dateField') .value; + + store.dispatch(requestHours(timeHours, traineeName, date)); } } diff --git a/src/components/test-element.js b/src/components/test-element.js index ec4797b..eb4b42d 100644 --- a/src/components/test-element.js +++ b/src/components/test-element.js @@ -74,8 +74,9 @@ class TestElement extends LitElement { } registerComp() { - this.dispatchEvent(new CustomEvent('register-comp')); - this.isRegistered = true; + if(confirm('Are you sure you want to register for ' + this.name + '?')) { + this.dispatchEvent(new CustomEvent('register-comp')); + } } -- cgit v1.2.3-70-g09d2