diff --git a/src/containers/users.js b/src/containers/users.js index 531f112..b8773be 100644 --- a/src/containers/users.js +++ b/src/containers/users.js @@ -25,20 +25,33 @@ import { Button, Modal, Glyphicon } from 'react-bootstrap'; import AppDispatcher from '../app-dispatcher'; import UserStore from '../stores/user-store'; +import UsersStore from '../stores/users-store'; import Table from '../components/table'; import TableColumn from '../components/table-column'; -import NewProjectDialog from '../components/dialog/new-project'; -import EditProjectDialog from '../components/dialog/edit-project'; +// import NewUserDialog from '../components/dialog/new-user'; +// import EditUserDialog from '../components/dialog/edit-user'; -class Projects extends Component { +class Users extends Component { static getStores() { - return [ UserStore ]; + return [ UserStore, UsersStore ]; } - static calculateState() { + static calculateState(prevState, props) { + + let tokenState = UserStore.getState().token; + + // If there is a token available and this method was called as a result of loading users + if (!prevState && tokenState) { + AppDispatcher.dispatch({ + type: 'users/start-load', + token: tokenState + }); + } + return { - users: UserStore.getState().users, + token: tokenState, + users: UsersStore.getState(), newModal: false, editModal: false, @@ -47,18 +60,12 @@ class Projects extends Component { }; } - componentWillMount() { - AppDispatcher.dispatch({ - type: 'users/start-load' - }); - } - // closeNewModal(data) { // this.setState({ newModal: false }); // if (data) { // AppDispatcher.dispatch({ - // type: 'projects/start-add', + // type: 'users/start-add', // data: data // }); // } @@ -95,8 +102,6 @@ class Projects extends Component { // } render() { - - this.state.users.map( (user) => console.log('User: %o', user)); return (
@@ -108,11 +113,11 @@ class Projects extends Component { this.setState({ editModal: true, modalData: this.state.users[index] })} onDelete={index => this.setState({ deleteModal: true, modalData: this.state.users[index] })} /> - {/* + - this.closeNewModal(data)} simulations={this.state.simulations} /> + {/* this.closeNewModal(data)} />*/} - this.closeEditModal(data)} project={this.state.modalData} simulations={this.state.simulations} /> + {/* this.closeEditModal(data)} project={this.state.modalData} simulations={this.state.simulations} /> @@ -133,4 +138,4 @@ class Projects extends Component { } } -export default Container.create(Projects); +export default Container.create(Users); diff --git a/src/data-managers/users-data-manager.js b/src/data-managers/users-data-manager.js index 08c3138..b20c3c2 100644 --- a/src/data-managers/users-data-manager.js +++ b/src/data-managers/users-data-manager.js @@ -59,12 +59,12 @@ class UsersDataManager extends RestDataManager { getUsers(token) { RestAPI.get(this.makeURL('/users'), token).then(response => { AppDispatcher.dispatch({ - type: 'users/users-loaded', - users: response.users + type: 'users/loaded', + data: response.users }); }).catch(error => { AppDispatcher.dispatch({ - type: 'users/users-load-error', + type: 'users/load-error', error: error }); }); diff --git a/src/stores/user-store.js b/src/stores/user-store.js index 9acf4d2..0c3a70a 100644 --- a/src/stores/user-store.js +++ b/src/stores/user-store.js @@ -79,21 +79,7 @@ class UserStore extends ReduceStore { } - return state; - - case 'users/start-load': - console.log('Sending request'); - UsersDataManager.getUsers(state.token); - - return state; - - case 'users/users-loaded': - - return Object.assign({}, state, { users: action.users }); - - case 'users/users-load-error': - // Users couldn't be loaded. Keep same state - return state; + return state; default: return state; diff --git a/src/stores/users-store.js b/src/stores/users-store.js new file mode 100644 index 0000000..3eb1595 --- /dev/null +++ b/src/stores/users-store.js @@ -0,0 +1,45 @@ +/** + * File: users-store.js + * Author: Markus Grigull + * Date: 15.03.2017 + * + * This file is part of VILLASweb. + * + * VILLASweb is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * VILLASweb is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with VILLASweb. If not, see . + ******************************************************************************/ + +import ArrayStore from './array-store'; +import UsersDataManager from '../data-managers/users-data-manager'; + +class UsersStore extends ArrayStore { + constructor() { + super('users', UsersDataManager); + } + + reduce(state, action) { + switch (action.type) { + + // Override ArrayStore's start-load to pass token + case 'users/start-load': + UsersDataManager.getUsers(action.token); + return state; + + default: + return super.reduce(state, action); + } + } + +} + +export default new UsersStore();