Ivan - STAFF LOGIN - Add session architecture for staff login [skip ci]

This commit is contained in:
ivan 2016-09-24 18:16:55 -03:00
parent e3650f146f
commit 3936e772d7
5 changed files with 41 additions and 15 deletions

View File

@ -12,7 +12,7 @@ export default {
path: '/user/login', path: '/user/login',
data: loginData data: loginData
}).then((result) => { }).then((result) => {
store.dispatch(this.getUserData(result.data.userId, result.data.token)); store.dispatch(this.getUserData(result.data.userId, result.data.token, result.data.staff));
return result; return result;
}) })
@ -49,7 +49,7 @@ export default {
}; };
}, },
getUserData(userId, token) { getUserData(userId, token, staff) {
let data = {}; let data = {};
if (userId && token) { if (userId && token) {
@ -62,7 +62,7 @@ export default {
return { return {
type: 'USER_DATA', type: 'USER_DATA',
payload: API.call({ payload: API.call({
path: '/user/get', path: (staff) ? '/staff/get' : '/user/get',
data: data data: data
}) })
} }

View File

@ -44,7 +44,9 @@ class App extends React.Component {
const validations = { const validations = {
languageChanged: props.config.language !== this.props.config.language, languageChanged: props.config.language !== this.props.config.language,
loggedIn: !_.includes(props.location.pathname, '/dashboard') && props.session.logged, loggedIn: !_.includes(props.location.pathname, '/dashboard') && props.session.logged,
loggedOut: _.includes(props.location.pathname, '/dashboard') && !props.session.logged loggedOut: _.includes(props.location.pathname, '/dashboard') && !props.session.logged,
loggedInStaff: !_.includes(props.location.pathname, '/admin/panel') && props.session.staff,
loggedOutStaff: _.includes(props.location.pathname, '/admin/panel') && !props.session.logged
}; };
if (validations.languageChanged) { if (validations.languageChanged) {
@ -55,8 +57,14 @@ class App extends React.Component {
browserHistory.push('/'); browserHistory.push('/');
} }
if (validations.loggedIn) { if (validations.loggedOutStaff) {
browserHistory.push('/admin');
}
if (validations.loggedIn && !props.session.staff) {
browserHistory.push('/dashboard'); browserHistory.push('/dashboard');
} else if(validations.loggedInStaff) {
browserHistory.push('/admin/panel');
} }
} }
} }

View File

@ -1,23 +1,25 @@
import React from 'react'; import React from 'react';
import _ from 'lodash';
import {connect} from 'react-redux';
import i18n from 'lib-app/i18n'; import i18n from 'lib-app/i18n';
import API from 'lib-app/api-call'; import SessionActions from 'actions/session-actions';
import Form from 'core-components/form'; import Form from 'core-components/form';
import FormField from 'core-components/form-field'; import FormField from 'core-components/form-field';
import SubmitButton from 'core-components/submit-button'; import SubmitButton from 'core-components/submit-button';
class AdminLoginPage extends React.Component { class AdminLoginPage extends React.Component {
render(){ render() {
return ( return (
<div className="admin-login-page"> <div className="admin-login-page">
<div className="admin-login-page__content"> <div className="admin-login-page__content">
<div className="admin-login-page__image"><img width="100%" src="/images/logo.png" alt="OpenSupports Admin Panel"/></div> <div className="admin-login-page__image"><img width="100%" src="/images/logo.png" alt="OpenSupports Admin Panel"/></div>
<div className="admin-login-page__login-form"> <div className="admin-login-page__login-form">
<Form onSubmit={this.onSubmit.bind(this)}> <Form onSubmit={this.onSubmit.bind(this)} loading={this.props.session.pending}>
<FormField name="email" label={i18n('EMAIL')} field="input" validation="EMAIL" fieldProps={{size:'large'}} required /> <FormField name="email" label={i18n('EMAIL')} field="input" validation="EMAIL" fieldProps={{size:'large'}} required />
<FormField name="password" label={i18n('PASSWORD')} field="input" validation="PASSWORD" fieldProps={{password:true, size:'large'}} required /> <FormField name="password" label={i18n('PASSWORD')} field="input" fieldProps={{password:true, size:'large'}} />
<SubmitButton> {i18n('LOG_IN')} </SubmitButton> <SubmitButton>{i18n('LOG_IN')}</SubmitButton>
</Form> </Form>
</div> </div>
</div> </div>
@ -26,8 +28,14 @@ class AdminLoginPage extends React.Component {
} }
onSubmit(formState) { onSubmit(formState) {
this.props.dispatch(SessionActions.login(_.extend({}, formState, {
staff: true
})));
} }
} }
export default AdminLoginPage; export default connect((store) => {
return {
session: store.session
};
})(AdminLoginPage);

View File

@ -10,6 +10,7 @@ module.exports = [
email: 'staff@opensupports.com', email: 'staff@opensupports.com',
profilePic: 'http://i65.tinypic.com/9bep95.jpg', profilePic: 'http://i65.tinypic.com/9bep95.jpg',
level: 1, level: 1,
staff: true,
departments: [ departments: [
{id: 1, name: 'Sales Support'}, {id: 1, name: 'Sales Support'},
{id: 2, name: 'Technical Issues'}, {id: 2, name: 'Technical Issues'},

View File

@ -41,7 +41,8 @@ class SessionReducer extends Reducer {
return _.extend({}, state, { return _.extend({}, state, {
logged: true, logged: true,
pending: false, pending: false,
failed: false failed: false,
staff: payload.data.staff
}); });
} }
@ -101,8 +102,12 @@ class SessionReducer extends Reducer {
sessionStore.storeUserData(payload.data); sessionStore.storeUserData(payload.data);
return _.extend({}, state, { return _.extend({}, state, {
userName: userData.name, staff: userData.staff,
userEmail: userData.email, userName: userData.name,
userEmail: userData.email,
userProfilePic: userData.profilePic,
userLevel: userData.level,
userDepartments: userData.departments,
userTickets: userData.tickets userTickets: userData.tickets
}); });
} }
@ -113,8 +118,12 @@ class SessionReducer extends Reducer {
return _.extend({}, state, { return _.extend({}, state, {
initDone: true, initDone: true,
logged: true, logged: true,
staff: userData.staff,
userName: userData.name, userName: userData.name,
userEmail: userData.email, userEmail: userData.email,
userProfilePic: userData.profilePic,
userLevel: userData.level,
userDepartments: userData.departments,
userTickets: userData.tickets userTickets: userData.tickets
}); });
} }