diff options
author | Michael Foiani <mfoiani2019@communiyschoolnaples.org> | 2018-07-30 17:47:26 -0400 |
---|---|---|
committer | Michael Foiani <mfoiani2019@communiyschoolnaples.org> | 2018-07-30 17:47:26 -0400 |
commit | 9d96ac4ae65c9fe6f5df8b5a95028495f4b00c49 (patch) | |
tree | e593ddae633606380a6fe45424bbaaaf0f2f80e1 | |
parent | 25b7ac9f323b366520781a6a75b381f635a1f9ff (diff) |
Making big additions to backend and frontend development to fourm system.
-rw-r--r-- | src/actions/app.js | 10 | ||||
-rw-r--r-- | src/actions/firebase.js | 34 | ||||
-rw-r--r-- | src/components/mao-fourms.js | 125 | ||||
-rw-r--r-- | src/reducers/firebase.js | 13 |
4 files changed, 132 insertions, 50 deletions
diff --git a/src/actions/app.js b/src/actions/app.js index 3a5f9fb..fce37d7 100644 --- a/src/actions/app.js +++ b/src/actions/app.js @@ -26,6 +26,9 @@ export const navigate = (path) => (dispatch) => { dispatch(updateDrawerState(false)); }; +import {snapshotFourms} from './firebase.js'; +var hasSubscribedPosts = false; + const loadPage = (page) => (dispatch) => { switch(page) { case 'home': @@ -41,7 +44,12 @@ const loadPage = (page) => (dispatch) => { import('../components/mao-tutoring.js'); break; case 'fourms': - import('../components/mao-fourms.js'); + import('../components/mao-fourms.js').then((module) => { + if(!hasSubscribedPosts) { + dispatch(snapshotFourms()); + hasSubscribedPosts = true; + } + });; break; case 'account': import('../components/mao-account.js'); diff --git a/src/actions/firebase.js b/src/actions/firebase.js index 2d24908..65278fb 100644 --- a/src/actions/firebase.js +++ b/src/actions/firebase.js @@ -174,4 +174,38 @@ export const requestHours = (_time, _trainee, _date) => (dispatch, getState) => }); } +export const CREATE_FOURM_POST = 'CREATE_FOURM_POST'; +export const SNAPSHOT_FOURM = 'SNAPSHOT_FOURM'; +export const UPDATE_FOURM_POSTS = 'UPDATE_FOURM_POSTS'; + +export const createFourmPost = (_subject, _content) => (dispatch, getState) => { + var docRef = firestore.collection('posts'); + const _uid = getState().firebase.uid; + + docRef.add({ + uid: _uid, + subject: _subject, + content: _content + }); +} + +export const snapshotFourms = () => (dispatch) => { + var docRef = firestore.collection('posts'); + + docRef.onSnapshot((query) => { + var fourmPosts = []; + query.forEach((doc) => { + fourmPosts.push(doc.data()); + }); + console.log(fourmPosts); + dispatch(updateFourmPosts(fourmPosts)); + }); +} + +export const updateFourmPosts = (_fourmPosts) => { + return { + type: UPDATE_FOURM_POSTS, + payload: _fourmPosts + } +} //End Firebase Firestore diff --git a/src/components/mao-fourms.js b/src/components/mao-fourms.js index e6a2998..66871dd 100644 --- a/src/components/mao-fourms.js +++ b/src/components/mao-fourms.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 { requestHours } from '../actions/firebase.js'; +import { requestHours, createFourmPost } from '../actions/firebase.js'; // We are lazy loading its reducer. import firebase from '../reducers/firebase.js'; @@ -60,37 +60,38 @@ class MaoFourms extends connect(store)(PageViewElement) { width: 50%; } - .post-grid { - display: grid; - grid-gap: 10px; - - grid-template-areas: - "card1" - "card2" - "card3" - "card4"; + .card-content > h4 { + text-align: right; + font-weight: lighter; + font-style: italic; + word-break: break-all; } - .post1 { - grid-area: card1; + .card-content > h3, p { + word-break: break-all; } - .post2 { - grid-area: card2; + .card-content > h3, p { + text-align: center; } - @media (min-width: 460px) { + .post-grid { + display: grid; + grid-gap: 10px; + + grid-template-columns: 1fr; + } + + @media (min-width: 550px) { .post-grid { - grid-template-areas: - "card1 card2" - "card3 card4"; + grid-template-columns: 1fr 1fr; } } </style> - <section> + <section hidden="${!props.signedIn}"> <paper-card elevation="0"> @@ -101,7 +102,12 @@ class MaoFourms extends connect(store)(PageViewElement) { </div> <div class="card-actions"> - <paper-button raised class="info">Create Post</paper-button> + <paper-button + raised + class ="info" + on-tap ="${() => this.submitFourm()}"> + Create Post + </paper-button> </div> </paper-card> @@ -112,24 +118,7 @@ class MaoFourms extends connect(store)(PageViewElement) { <h2 class="underline">Recent Posts</h2> - <div class="post-grid"> - - <paper-card elevation="0" class="post1"> - <div class="card-content"> - <h3>Michael Foiani</h3> - <p>Some content here. Lmao.</p> - </div> - </paper-card> - - <paper-card elevation="0" class="post2"> - <div class="card-content"> - <h3>Michael Foiani</h3> - <p>Some content here. Lmao.</p> - </div> - </paper-card> - - - </div> + <div class="post-grid" id="posts-grid"></div> </section> `; @@ -137,19 +126,61 @@ class MaoFourms extends connect(store)(PageViewElement) { static get properties() { return { // This is the data from the store. - signedIn: Boolean, - authMessage: String, - hours: Number, - requestedHours: Number + signedIn: Boolean, + authMessage: String, + fourmPosts: Array }} _stateChanged(state) { - this.hours = state.firebase.hours; - this.requestedHours = state.firebase.requestedHours; - this.signedIn = state.firebase.initialized; - this.authMessage = state.firebase.authMessage; + this.signedIn = state.firebase.signedIn; + this.authMessage = state.firebase.authMessage; + + this.fourmPosts = state.firebase.fourmPosts; + this.updateSection(); + } + + submitFourm() { + if( this.shadowRoot && + confirm('Are you sure you want to submit this to the fourm page? It will be public to everyone.') + ) + { + var subjectElement = this.shadowRoot.getElementById('subject-field'); + var contentElement = this.shadowRoot.getElementById('content-field'); + + store.dispatch(createFourmPost(subjectElement.value, contentElement.value)); + + subjectElement.value = ""; + contentElement.value = ""; + } + + } + + updateSection() { + if(this.shadowRoot) { + var postsGrid = this.shadowRoot.getElementById('posts-grid'); + + for(var i = 0; i < this.fourmPosts.length; i++) { + var paperCard = document.createElement('paper-card'); + var cardContent = document.createElement('div'); + var fourmAuthor = document.createElement('h4'); + var fourmSubject = document.createElement('h3'); + var fourmContent = document.createElement('p'); + + fourmAuthor.innerHTML = this.fourmPosts[i].uid; + fourmSubject.innerHTML = this.fourmPosts[i].subject; + fourmContent.innerHTML = this.fourmPosts[i].content; - this.sumbitFieldsOpened = false; + cardContent.classList.add('card-content'); + cardContent.appendChild( fourmAuthor); + cardContent.appendChild( fourmSubject); + cardContent.appendChild( fourmContent); + + paperCard.elevation = 0; + paperCard.appendChild( cardContent); + + postsGrid.appendChild(paperCard); + } + } } } diff --git a/src/reducers/firebase.js b/src/reducers/firebase.js index 1721d31..7c25d6c 100644 --- a/src/reducers/firebase.js +++ b/src/reducers/firebase.js @@ -13,11 +13,12 @@ import { AUTH_SUCCESS, AUTH_SIGN_OUT, UPDATE_HOURS, - UPDATE_REGISTERED_COMPETITIONS + UPDATE_REGISTERED_COMPETITIONS, + UPDATE_FOURM_POSTS } from '../actions/firebase.js'; -const firebase = (state = {initialized: false, authMessage: "", hours: -1, requestedHours: -1, uid: "", userEmail: "", registeredComps: []}, action) => { +const firebase = (state = {initialized: false, authMessage: "", hours: -1, requestedHours: -1, uid: "", userEmail: "", registeredComps: [], fourmPosts: []}, action) => { switch (action.type) { case AUTH_SUCCESS: return { @@ -59,6 +60,14 @@ const firebase = (state = {initialized: false, authMessage: "", hours: -1, reque } break; + case UPDATE_FOURM_POSTS: + return { + ...state, + fourmPosts : action.payload + } + break; + + default: return state; } |