aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Foiani <mfoiani2019@communityschoolnaples.org>2018-07-26 23:37:41 -0400
committerMichael Foiani <mfoiani2019@communityschoolnaples.org>2018-07-26 23:37:41 -0400
commit84e15b866786854073feefce2392b47a3d84d724 (patch)
tree03bc7098b30d547a021505813ba7f041f996b661 /src
parentfa52586a3fba954d037abdbc534c45e90f86f142 (diff)
Created styling and backend for users to sign up for competitions.
Diffstat (limited to 'src')
-rw-r--r--src/actions/firebase.js62
-rw-r--r--src/components/button-shared-styles.js12
-rw-r--r--src/components/competition-element.js38
-rw-r--r--src/components/mao-competitions.js134
-rw-r--r--src/components/test-element.js84
-rw-r--r--src/reducers/firebase.js12
6 files changed, 299 insertions, 43 deletions
diff --git a/src/actions/firebase.js b/src/actions/firebase.js
index 85ebe20..fe3ddb0 100644
--- a/src/actions/firebase.js
+++ b/src/actions/firebase.js
@@ -21,6 +21,7 @@ export const signIn = (_email, _password) => (dispatch) => {
*/
dispatch(authSuccess(user));
dispatch(getHours())
+ dispatch(pullRegisteredCompetitions());
})
.catch((error) => {
dispatch(authFail(error.code));
@@ -64,8 +65,8 @@ export const authSignOut = () => {
//End Firebase Auth
//Start Firebase Firestore
-export const GET_HOURS = 'GET_HOURS';
-export const UPDATE_HOURS = 'UPDATE_HOURS'
+export const GET_HOURS = 'GET_HOURS';
+export const UPDATE_HOURS = 'UPDATE_HOURS';
export const getHours = () => (dispatch, getState) => {
const currentState = getState().firebase;
@@ -87,4 +88,61 @@ export const updateHours = (hours) => {
}
}
+export const REGISTER_COMP = 'REGISTER_COMP';
+export const PULL_REGISTERED_COMPETITIONS = 'PULL_REGISTERED_COMPETITIONS';
+export const UPDATE_REGISTERED_COMPETITIONS = 'UPDATE_REGISTERED_COMPETITIONS';
+
+export const registerComp = (compName) => (dispatch, getState) => {
+ var docRef = firestore.collection('competitions').doc(compName);
+ var uid = getState().firebase.uid;
+
+ 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 = [];
+
+ var docRef = firestore.collection('competitions');
+ docRef.get().then((query) => {
+ query.forEach((doc) => {
+ if(doc.data().uids.includes(getState().firebase.uid)) {
+ registeredComps.push(doc.id);
+ }
+ })
+ });
+
+ dispatch(updateRegisteredCompetitions(registeredComps));
+}
+
+
+
+
+export const updateRegisteredCompetitions = (registeredComps) => {
+ return {
+ type: UPDATE_REGISTERED_COMPETITIONS,
+ payload: registeredComps
+ }
+}
+
+
+
+
//End Firebase Firestore
diff --git a/src/components/button-shared-styles.js b/src/components/button-shared-styles.js
index 2f167e4..5f426a4 100644
--- a/src/components/button-shared-styles.js
+++ b/src/components/button-shared-styles.js
@@ -22,5 +22,17 @@ export const ButtonSharedStyles = html`
button:hover svg {
fill: var(--app-primary-color);
}
+
+ paper-button {
+ text-align: center;
+ }
+
+ paper-button.info {
+ background-color: #c9eaff;
+ }
+
+ paper-button.success {
+ background-color: #b7e1cd;
+ }
</style>
`;
diff --git a/src/components/competition-element.js b/src/components/competition-element.js
index 072f654..17381c9 100644
--- a/src/components/competition-element.js
+++ b/src/components/competition-element.js
@@ -10,12 +10,17 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
import { LitElement, html } from '@polymer/lit-element';
+// Import button styles
+import { ButtonSharedStyles } from './button-shared-styles.js';
+
// Import paper elements
import '@polymer/paper-card/paper-card.js';
class CompetitionElement extends LitElement {
_render(props) {
return html`
+ ${ButtonSharedStyles}
+
<style>
paper-card {
@@ -31,7 +36,23 @@ class CompetitionElement extends LitElement {
<div class="card-content">
<h3>${props.name}</h3>
<h4>${props.location}</h4>
- <p hidden="${!this.infoTabOpen}"> ${props.information}</p>
+ <p hidden="${!props.infoTabOpen}"> ${props.information}</p>
+ </div>
+ <div hidden="${!props.infoTabOpen}" class="card-actions">
+ <paper-button
+ class="info"
+ hidden="${props.isRegistered}"
+ raised
+ disabled= "${!props.initialized}"
+ on-tap= "${() => this.registerComp()}">
+ ${props.initialized? "Register" : "Sign In"}
+ </paper-button>
+
+ <paper-button class="success"
+ disabled
+ hidden="${!props.isRegistered}">
+ Already Registered
+ </paper-button>
</div>
</paper-card>
`;
@@ -41,7 +62,9 @@ class CompetitionElement extends LitElement {
name: String,
information: String,
location: String,
- infoTabOpen: Boolean
+ infoTabOpen: Boolean,
+ initialized: Boolean,
+ isRegistered: Boolean
}};
constructor() {
@@ -51,11 +74,20 @@ class CompetitionElement extends LitElement {
this.information = "Competition Information";
this.location = "Competition Location";
this.infoTabOpen = false;
+ this.initialized = false;
+ this.isRegistered = false;
}
toggleTab() {
- this.infoTabOpen = !this.infoTabOpen;
+ this.infoTabOpen = !this.infoTabOpen;
}
+
+ registerComp() {
+ this.dispatchEvent(new CustomEvent('register-comp'));
+ this.isRegistered = true;
+ }
+
+
}
window.customElements.define('competition-element', CompetitionElement);
diff --git a/src/components/mao-competitions.js b/src/components/mao-competitions.js
index 6a5ae44..53e0b29 100644
--- a/src/components/mao-competitions.js
+++ b/src/components/mao-competitions.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 { } from '../actions/firebase.js';
+import { registerComp } from '../actions/firebase.js';
// We are lazy loading its reducer.
import firebase from '../reducers/firebase.js';
@@ -26,7 +26,8 @@ store.addReducers({
});
// These are the shared styles needed by this element.
-import { SharedStyles } from './shared-styles.js';
+import { SharedStyles } from './shared-styles.js';
+import { ButtonSharedStyles } from './button-shared-styles.js';
// Import paper elements
import '@polymer/paper-input/paper-input.js';
@@ -34,12 +35,14 @@ import '@polymer/paper-button/paper-button.js';
import '@polymer/paper-card/paper-card.js';
// Import custom elements
-import './competition-element.js'
+import './competition-element.js';
+import './test-element.js';
class MaoCompetitions extends connect(store)(PageViewElement) {
_render(props) {
return html`
${SharedStyles}
+ ${ButtonSharedStyles}
<style>
.underline {
border-bottom: 1px solid var(--app-primary-color);
@@ -112,12 +115,6 @@ class MaoCompetitions extends connect(store)(PageViewElement) {
--paper-card-background-color: #fff8e1;
}
-
-
- paper-button.info {
- background-color: #c9eaff;
- }
-
.card-actions {
vertical-align: bottom;
}
@@ -159,7 +156,21 @@ class MaoCompetitions extends connect(store)(PageViewElement) {
</div>
<div class="card-actions">
- <paper-button class="info" disabled>Registry Not Available</paper-button>
+ <paper-button
+ class = "info"
+ hidden = "${props.nationalRegistered}"
+ on-tap = "${() => this.registerNationals()}"
+ raised
+ disabled = "${!props.initialized}">
+ ${props.initialized ? "Register" : "Sign In to Register"}
+ </paper-button>
+
+ <paper-button
+ class = "success"
+ hidden = "${!props.nationalRegistered}"
+ disabled>
+ Already Registered
+ </paper-button>
</div>
</paper-card>
@@ -167,6 +178,7 @@ class MaoCompetitions extends connect(store)(PageViewElement) {
</section>
<section>
+
<paper-card
image="http://a57.foxnews.com/images.foxnews.com/content/fox-news/travel/2018/02/24/universal-theme-parks-hike-ticket-prices-following-disney-resorts/_jcr_content/par/featured_image/media-0.img.jpg/931/524/1519489441149.jpg?ve=1&tl=1&text=big-top-image"
heading="Orlando, Florida"
@@ -180,7 +192,21 @@ class MaoCompetitions extends connect(store)(PageViewElement) {
</div>
<div class="card-actions">
- <paper-button class="info" disabled>Registry Not Available</paper-button>
+ <paper-button
+ class = "info"
+ hidden = "${props.statesRegistered}"
+ on-tap = "${() => this.registerStates()}"
+ raised
+ disabled = "${!props.initialized}">
+ ${props.initialized ? "Register" : "Sign In to Register"}
+ </paper-button>
+
+ <paper-button
+ class = "success"
+ hidden = "${!props.statesRegistered}"
+ disabled>
+ Already Registered
+ </paper-button>
</div>
</paper-card>
@@ -197,25 +223,37 @@ class MaoCompetitions extends connect(store)(PageViewElement) {
<div class="regional-comp1">
<competition-element
+ id="dec-competition-element"
name="December"
information="Dank ass regional competition"
- location="Miami, American Heritage">
+ location="Miami, American Heritage"
+ initialized="${props.initialized}"
+ isRegistered="${props.registeredComps.includes('December')}"
+ on-register-comp="${() => store.dispatch(registerComp(this.shadowRoot.getElementById('dec-competition-element').name))}">
</competition-element>
</div>
<div class="regional-comp2">
<competition-element
+ id="jan-competition-element"
name="January"
information="Other dank comp"
- location="Immokalee, Cypress Bay">
+ location="Immokalee, Cypress Bay"
+ initialized="${props.initialized}"
+ isRegistered="${props.registeredComps.includes('January')}"
+ on-register-comp="${() => store.dispatch(registerComp(this.shadowRoot.getElementById('jan-competition-element').name))}">
</competition-element>
</div>
<div class="regional-comp3">
<competition-element
+ id="feb-competition-element"
name="February"
information="The dankest comp"
- location="Orlando, Science School">
+ 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))}">
</competition-element>
</div>
@@ -232,37 +270,38 @@ class MaoCompetitions extends connect(store)(PageViewElement) {
<p>All students must register and complete two of the tests to be qualified for national and/or state competitions.</p>
</div>
- <paper-card
+ <test-element
+ id="amc-test-element"
+
class="amcComp"
image="https://www.maa.org/sites/default/files/AMC%20Logo.png"
- elevation="0">
- <div class="card-content">
- <p>The American Mathematics Exam is a difficult national exam;
- it is a 25 multiple-choice question,
- 40 minute test for middle schoolers designed to promote the development and enhancement of problem solving skills.</p>
- </div>
+ elevation="0"
- <div class="card-actions">
- <paper-button class="info" raised>Register</paper-button>
- </div>
- </paper-card>
+ name = "amc"
+ information = "The American Mathematics Exam is a difficult national exam;
+ it is a 25 multiple-choice question,
+ 40 minute test for middle schoolers designed to promote the development and enhancement of problem solving skills."
+ initialized="${props.initialized}"
+ isRegistered="${props.registeredComps.includes('amc')}"
+ on-register-comp="${() => store.dispatch(registerComp(this.shadowRoot.getElementById('amc-test-element').name))}">
+ </test-element>
+
+
+ <test-element
+ id="fml-test-element"
- <paper-card
class="fmlComp"
image="data:image/jpeg;base64,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"
- elevation="0">
- <div class="card-content">
- <h3>FML</h3>
- <p>The Florida Math Leauge is a state-wide exam.
- It has three parts, each being 30 minutes long.</p>
- </div>
+ elevation="0"
- <div class="card-actions">
- <paper-button class="info" raised>Register</paper-button>
- </div>
- </paper-card>
+ name = "fml"
+ information = "The Florida Math Leauge is a state-wide exam.
+ It has three parts, each being 30 minutes long."
+ initialized="${props.initialized}"
+ isRegistered="${props.registeredComps.includes('fml')}"
+ on-register-comp="${() => store.dispatch(registerComp(this.shadowRoot.getElementById('fml-test-element').name))}">
</div>
</section>
@@ -271,9 +310,32 @@ class MaoCompetitions extends connect(store)(PageViewElement) {
static get properties() { return {
// This is the data from the store.
+ registeredComps : Array,
+ initialized : Boolean,
+
+ nationalRegistered : Boolean,
+ statesRegistered : Boolean
}}
_stateChanged(state) {
+ 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() {
+ this.nationalRegistered = true;
+
+ store.dispatch(registerComp('nationals'))
+ }
+
+ registerStates() {
+ this.statesRegistered = true;
+
+ store.dispatch(registerComp('states'))
}
}
diff --git a/src/components/test-element.js b/src/components/test-element.js
new file mode 100644
index 0000000..ec4797b
--- /dev/null
+++ b/src/components/test-element.js
@@ -0,0 +1,84 @@
+/**
+@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 { LitElement, html } from '@polymer/lit-element';
+
+//import button styles
+import { ButtonSharedStyles } from './button-shared-styles.js';
+
+// Import paper elements
+import '@polymer/paper-card/paper-card.js';
+
+class TestElement extends LitElement {
+ _render(props) {
+ return html`
+ ${ButtonSharedStyles}
+
+ <style>
+
+ paper-card {
+ --paper-card-background-color: #ffffff;
+ width: 100%;
+ }
+
+ </style>
+ <paper-card
+ image = "${props.image}"
+ elevation = "0">
+ <div class="card-content">
+ <p>${props.information}</p>
+ </div>
+ <div class="card-actions">
+ <paper-button
+ class="info"
+ hidden="${props.isRegistered}"
+ raised
+ disabled= "${!props.initialized}"
+ on-tap= "${() => this.registerComp()}">
+ ${props.initialized? "Register" : "Sign In"}
+ </paper-button>
+
+ <paper-button class="success"
+ disabled
+ hidden="${!props.isRegistered}">
+ Already Registered
+ </paper-button>
+ </div>
+ </paper-card>
+ `;
+ }
+
+ static get properties() { return {
+ name: String,
+ information: String,
+ image: String,
+ initialized: Boolean,
+ isRegistered: Boolean
+ }};
+
+ constructor() {
+ super();
+
+ this.name = "Competition";
+ this.information = "Competition Information";
+ this.image = "Image Path";
+ this.initialized = false;
+ this.isRegistered = false;
+ }
+
+ registerComp() {
+ this.dispatchEvent(new CustomEvent('register-comp'));
+ this.isRegistered = true;
+ }
+
+
+}
+
+window.customElements.define('test-element', TestElement);
diff --git a/src/reducers/firebase.js b/src/reducers/firebase.js
index 6f02c69..4b0ed9a 100644
--- a/src/reducers/firebase.js
+++ b/src/reducers/firebase.js
@@ -12,11 +12,12 @@ import {
AUTH_FAIL,
AUTH_SUCCESS,
AUTH_SIGN_OUT,
- UPDATE_HOURS
+ UPDATE_HOURS,
+ UPDATE_REGISTERED_COMPETITIONS
}
from '../actions/firebase.js';
-const firebase = (state = {initialized: false, authMessage: "", hours: -1, uid: null}, action) => {
+const firebase = (state = {initialized: false, authMessage: "", hours: -1, uid: null, registeredComps: []}, action) => {
switch (action.type) {
case AUTH_SUCCESS:
return {
@@ -49,6 +50,13 @@ const firebase = (state = {initialized: false, authMessage: "", hours: -1, uid:
}
break;
+ case UPDATE_REGISTERED_COMPETITIONS:
+ return {
+ ...state,
+ registeredComps : action.payload
+ }
+ break;
+
default:
return state;
}