diff --git a/client/actions.js b/client/actions.js index 30d3d19..a440dee 100644 --- a/client/actions.js +++ b/client/actions.js @@ -33,6 +33,12 @@ export function fetchArticle(articleId='landing') { console.info(`Loading... ${articleId}`); return fetch(`/app/pages/${articleId}`) .then((response) => { + // TODO: Add better error handling. + // if (response.ok) { + // return response.json(); + // } else { + // console.error(`Error getting document JSON - ${res.status} - ${res.text} - Actual ${err}`); + // } return response.json(); }) .then((json) => { @@ -54,6 +60,12 @@ export function fetchNavigationMenu() { return (dispatch) => { return fetch("/app/menu") .then((response) => { + // TODO: Add better error handling. + // if (response.ok) { + // return response.json(); + // } else { + // console.error(`Error getting document JSON - ${res.status} - ${res.text} - Actual ${err}`); + // } return response.json(); }) .then((json) => { @@ -66,6 +78,14 @@ export function fetchAppSiteInfo() { return (dispatch) => { return fetch("/app/config") .then((response) => { + + // TODO: Add better error handling. + // if (response.ok) { + // return response.json(); + // } else { + // console.error(`Error getting document JSON - ${res.status} - ${res.text} - Actual ${err}`); + // } + return response.json(); }) .then((json) => { @@ -125,13 +145,6 @@ export function loadNavigation(menu=[]) { }; } -export function notifyUserLogin(user) { - return { - type: LOGIN_USER_ACTION, - user: user - }; -} - export function switchThemes() { let switchedThemes = ThemeManager.switchTheme(); return { diff --git a/client/containers/app.js b/client/containers/app.js index 0b1213e..1b95e54 100644 --- a/client/containers/app.js +++ b/client/containers/app.js @@ -9,8 +9,8 @@ Rookeries client app import React from "react"; import {connect} from "react-redux"; -// import {UserLoginView} from "../views/user_login_modal"; -import {ThemeSwitchView, ConnectedThemeSwitchView} from "../views/theme_switcher_button"; +import {UserLoginView} from "../views/user_login_modal"; +import {ConnectedThemeSwitchView} from "../views/theme_switcher_button"; import {SiteHeader} from "../views/site_header"; import {SiteFooter} from "../views/site_footer"; @@ -33,7 +33,7 @@ class App extends React.Component { {/*TODO Extract as header container.*/}
- {/**/} +
diff --git a/client/stores/app_site_info_store.js b/client/stores/app_site_info_store.js deleted file mode 100644 index e6661a1..0000000 --- a/client/stores/app_site_info_store.js +++ /dev/null @@ -1,34 +0,0 @@ -/* -Store handling app site information. - -@copyright (c) Copyright 2013-2016 Dorian Pula -@license AGPL-1.0 -@author Dorian Pula [dorian.pula@amber-penguin-software.ca] -*/ - -import Reflux from "reflux"; -import request from "superagent"; - -import {Actions} from "../actions.js"; - - -const AppSiteInfoStore = Reflux.createStore({ - init: function() { - this.listenTo(Actions.fetchAppSiteInfo, this.fetchAppSiteInfo); - }, - - fetchAppSiteInfo: function() { - request.get("/app/config") - .accept('json') - .end( - (err, res) => { - if (res.ok) { - Actions.renderAppSiteInfo(res.body); - } else { - console.error(`Error getting document JSON - ${res.status} - ${res.text} - Actual ${err}`); - } - }); - } -}); - -export { AppSiteInfoStore }; diff --git a/client/stores/navigation_menu_store.js b/client/stores/navigation_menu_store.js deleted file mode 100644 index 0be608a..0000000 --- a/client/stores/navigation_menu_store.js +++ /dev/null @@ -1,34 +0,0 @@ -/* -Store handling navigation menu. - -@copyright (c) Copyright 2013-2016 Dorian Pula -@license AGPL-1.0 -@author Dorian Pula [dorian.pula@amber-penguin-software.ca] -*/ - -import Reflux from "reflux"; -import request from "superagent"; - -import {Actions} from "../actions.js"; - - -const NavigationMenuStore = Reflux.createStore({ - init: function() { - this.listenTo(Actions.fetchNavigationMenu, this.fetchNavigationDetails); - }, - - fetchNavigationDetails: function() { - request.get("/app/menu") - .accept('json') - .end( - (err, res) => { - if (res.ok) { - Actions.renderNavigationMenu({menu: res.body.menu}); - } else { - console.error(`Error getting document JSON - ${res.status} - ${res.text} - Actual ${err}`); - } - }); - } -}); - -export { NavigationMenuStore }; diff --git a/client/stores/user_login_store.js b/client/user_login_manager.js similarity index 65% rename from client/stores/user_login_store.js rename to client/user_login_manager.js index cb5db08..94e3d4d 100644 --- a/client/stores/user_login_store.js +++ b/client/user_login_manager.js @@ -1,60 +1,54 @@ /* -User login store. +Managing the user login store. @copyright (c) Copyright 2013-2016 Dorian Pula @license AGPL v3 @author Dorian Pula [dorian.pula@amber-penguin-software.ca] */ -import Reflux from "reflux"; import request from "superagent"; -import { Actions } from "../actions.js"; -import { UserInfo } from "../user_info.js"; +import { UserInfo } from "./user_info"; -export const UserLoginStore = Reflux.createStore({ - init: function() { - this.listenTo(Actions.loginUserAttempt, this.attemptUserLogin); - this.listenTo(Actions.logoutUser, this.logoutUser); - }, +export class UserLoginManager { - isUserLoggedIn: function() { + static isUserLoggedIn() { return UserInfo.getUserInfo("auth_token") != ""; - }, + } - getUserAuthToken: function() { + static getUserAuthToken() { return UserInfo.getUserInfo("auth_token"); - }, + } - getCurrentUserFullName: function() { + static getCurrentUserFullName() { return UserInfo.getUserInfo("full_name"); - }, + } - attemptUserLogin: function(username, password) { + static attemptUserLogin(username, password) { request.post("/auth") .send({username: username, password: password}) .accept('json') .end((err, res) => { if (res.ok) { // TODO Include the user full name in response as well. - UserLoginStore.updateUserLogin(res.body.token, "admin"); + UserLoginManager.updateUserLogin(res.body.token, "admin"); Actions.loginUserSuccess(); } else { console.error(`Unable to login - ${res.status} - ${res.text} - Actual ${err}`); Actions.loginUserFailure("Login failed. Try again!"); } }); - }, + } - logoutUser: function() { + static logoutUser() { UserInfo.removeUserInfo("auth_token"); UserInfo.removeUserInfo("full_name"); Actions.logoutUserFinalize(); - }, + } - updateUserLogin: function(token, fullName) { + static updateUserLogin(token, fullName) { if (token !== undefined && token !== "") { UserInfo.setUserInfo("auth_token", token); UserInfo.setUserInfo("full_name", fullName); @@ -63,4 +57,4 @@ export const UserLoginStore = Reflux.createStore({ Actions.loginUserFailure(`Received invalid token: ${token}`); } } -}); +} diff --git a/client/views/user_login_modal.js b/client/views/user_login_modal.js index 94c5b58..adb0fa2 100644 --- a/client/views/user_login_modal.js +++ b/client/views/user_login_modal.js @@ -12,14 +12,16 @@ import LinkedStateMixin from "react-addons-linked-state-mixin"; import {Modal, Input, Button, Alert} from "react-bootstrap"; import FontAwesome from "react-fontawesome"; +import {UserLoginManager} from "../user_login_manager"; + const UserLoginView = React.createClass({ mixins: [LinkedStateMixin], getInitialState: function() { return { - isUserLoggedIn: UserLoginStore.isUserLoggedIn(), - fullName: UserLoginStore.getCurrentUserFullName(), + isUserLoggedIn: UserLoginManager.isUserLoggedIn(), + fullName: UserLoginManager.getCurrentUserFullName(), username: "", password: "", errorMessage: "", @@ -34,7 +36,7 @@ const UserLoginView = React.createClass({ } console.log("Attempting login..."); - Actions.loginUserAttempt(this.state.username, this.state.password); + UserLoginManager.attemptUserLogin(this.state.username, this.state.password); }, loginFailure: function(errorMessage = "") { @@ -43,7 +45,7 @@ const UserLoginView = React.createClass({ loginSuccess: function() { this.hideLoginModal(); - this.setState({fullName: UserLoginStore.getCurrentUserFullName(), isUserLoggedIn: true}); + this.setState({fullName: UserLoginManager.getCurrentUserFullName(), isUserLoggedIn: true}); }, showLoginModal: function() { @@ -60,7 +62,7 @@ const UserLoginView = React.createClass({ }, logoutUserRefresh: function() { - this.setState({errorMessage: "", isUserLoggedIn: false, fullName: UserLoginStore.getCurrentUserFullName()}); + this.setState({errorMessage: "", isUserLoggedIn: false, fullName: UserLoginManager.getCurrentUserFullName()}); }, render: function() {