Ivan - Add error messages for admin tickets view [skip ci]

This commit is contained in:
ivan 2016-12-23 00:18:41 -03:00
parent d2c2327a60
commit 6351666258
5 changed files with 63 additions and 19 deletions

View File

@ -4,9 +4,11 @@ import {connect} from 'react-redux';
import i18n from 'lib-app/i18n'; import i18n from 'lib-app/i18n';
import AdminDataAction from 'actions/admin-data-actions'; import AdminDataAction from 'actions/admin-data-actions';
import Header from 'core-components/header';
import TicketList from 'app-components/ticket-list'; import TicketList from 'app-components/ticket-list';
import Header from 'core-components/header';
import SearchBox from 'core-components/search-box'; import SearchBox from 'core-components/search-box';
import Message from 'core-components/message';
class AdminPanelAllTickets extends React.Component { class AdminPanelAllTickets extends React.Component {
@ -31,7 +33,7 @@ class AdminPanelAllTickets extends React.Component {
<div className="admin-panel-my-tickets__search-box"> <div className="admin-panel-my-tickets__search-box">
<SearchBox onSearch={this.onSearch.bind(this)} /> <SearchBox onSearch={this.onSearch.bind(this)} />
</div> </div>
<TicketList {...this.getTicketListProps()}/> {(this.props.error) ? <Message type="error">{i18n('ERROR_RETRIEVING_TICKETS')}</Message> : <TicketList {...this.getTicketListProps()}/>}
</div> </div>
); );
} }
@ -52,7 +54,8 @@ class AdminPanelAllTickets extends React.Component {
onSearch(query) { onSearch(query) {
this.setState({query, page: 1}); this.setState({query, page: 1});
if (query) {
if(query) {
this.props.dispatch(AdminDataAction.searchTickets(query)); this.props.dispatch(AdminDataAction.searchTickets(query));
} else { } else {
this.props.dispatch(AdminDataAction.retrieveAllTickets()); this.props.dispatch(AdminDataAction.retrieveAllTickets());
@ -60,9 +63,7 @@ class AdminPanelAllTickets extends React.Component {
} }
onPageChange(event) { onPageChange(event) {
this.setState({ this.setState({page: event.target.value});
page: event.target.value
});
if(this.state.query) { if(this.state.query) {
this.props.dispatch(AdminDataAction.searchTickets(this.state.query, event.target.value)); this.props.dispatch(AdminDataAction.searchTickets(this.state.query, event.target.value));
@ -77,6 +78,7 @@ export default connect((store) => {
departments: store.session.userDepartments, departments: store.session.userDepartments,
tickets: store.adminData.allTickets, tickets: store.adminData.allTickets,
pages: store.adminData.allTicketsPages, pages: store.adminData.allTicketsPages,
loading: !store.adminData.allTicketsLoaded loading: !store.adminData.allTicketsLoaded,
error: store.adminData.allTicketsError
}; };
})(AdminPanelAllTickets); })(AdminPanelAllTickets);

View File

@ -4,9 +4,11 @@ import {connect} from 'react-redux';
import i18n from 'lib-app/i18n'; import i18n from 'lib-app/i18n';
import AdminDataAction from 'actions/admin-data-actions'; import AdminDataAction from 'actions/admin-data-actions';
import Header from 'core-components/header';
import TicketList from 'app-components/ticket-list'; import TicketList from 'app-components/ticket-list';
import Header from 'core-components/header';
import Message from 'core-components/message';
class AdminPanelMyTickets extends React.Component { class AdminPanelMyTickets extends React.Component {
static defaultProps = { static defaultProps = {
@ -22,7 +24,7 @@ class AdminPanelMyTickets extends React.Component {
return ( return (
<div className="admin-panel-my-tickets"> <div className="admin-panel-my-tickets">
<Header title={i18n('MY_TICKETS')} description={i18n('MY_TICKETS_DESCRIPTION')} /> <Header title={i18n('MY_TICKETS')} description={i18n('MY_TICKETS_DESCRIPTION')} />
<TicketList {...this.getProps()}/> {(this.props.error) ? <Message type="error">{i18n('ERROR_RETRIEVING_TICKETS')}</Message> : <TicketList {...this.getProps()}/>}
</div> </div>
); );
} }
@ -42,6 +44,7 @@ export default connect((store) => {
return { return {
departments: store.session.userDepartments, departments: store.session.userDepartments,
tickets: store.adminData.myTickets, tickets: store.adminData.myTickets,
loading: !store.adminData.myTicketsLoaded loading: !store.adminData.myTicketsLoaded,
error: store.adminData.myTicketsError
}; };
})(AdminPanelMyTickets); })(AdminPanelMyTickets);

View File

@ -4,9 +4,11 @@ import {connect} from 'react-redux';
import i18n from 'lib-app/i18n'; import i18n from 'lib-app/i18n';
import AdminDataAction from 'actions/admin-data-actions'; import AdminDataAction from 'actions/admin-data-actions';
import Header from 'core-components/header';
import TicketList from 'app-components/ticket-list'; import TicketList from 'app-components/ticket-list';
import Header from 'core-components/header';
import Message from 'core-components/message';
class AdminPanelNewTickets extends React.Component { class AdminPanelNewTickets extends React.Component {
static defaultProps = { static defaultProps = {
@ -22,7 +24,7 @@ class AdminPanelNewTickets extends React.Component {
return ( return (
<div className="admin-panel-my-tickets"> <div className="admin-panel-my-tickets">
<Header title={i18n('NEW_TICKETS')} description={i18n('NEW_TICKETS_DESCRIPTION')} /> <Header title={i18n('NEW_TICKETS')} description={i18n('NEW_TICKETS_DESCRIPTION')} />
<TicketList {...this.getProps()}/> {(this.props.error) ? <Message type="error">{i18n('ERROR_RETRIEVING_TICKETS')}</Message> : <TicketList {...this.getProps()}/>}
</div> </div>
); );
} }
@ -42,6 +44,7 @@ export default connect((store) => {
return { return {
departments: store.session.userDepartments, departments: store.session.userDepartments,
tickets: store.adminData.newTickets, tickets: store.adminData.newTickets,
loading: !store.adminData.newTicketsLoaded loading: !store.adminData.newTicketsLoaded,
error: store.adminData.newTicketsError
}; };
})(AdminPanelNewTickets); })(AdminPanelNewTickets);

View File

@ -160,6 +160,7 @@ export default {
'TICKET_COMMENT_ERROR': 'An error occurred while trying to add the comment.', 'TICKET_COMMENT_ERROR': 'An error occurred while trying to add the comment.',
'NO_PERMISSION': 'You\'ve no permission to access to this page.', 'NO_PERMISSION': 'You\'ve no permission to access to this page.',
'INVALID_USER': 'User id is invalid', 'INVALID_USER': 'User id is invalid',
'ERROR_RETRIEVING_TICKETS': 'An error occurred while trying to retrieve tickets.',
//MESSAGES //MESSAGES
'SIGNUP_SUCCESS': 'You have registered successfully in our support system.', 'SIGNUP_SUCCESS': 'You have registered successfully in our support system.',

View File

@ -11,10 +11,15 @@ class AdminDataReducer extends Reducer {
customResponsesLoaded: false, customResponsesLoaded: false,
myTickets: [], myTickets: [],
myTicketsLoaded: false, myTicketsLoaded: false,
myTicketsError: false,
newTickets: [], newTickets: [],
newTicketsLoaded: false, newTicketsLoaded: false,
newTicketsError: false,
allTickets: [], allTickets: [],
allTicketsLoaded: false allTicketsLoaded: false,
allTicketsError: false
}; };
} }
@ -22,11 +27,17 @@ class AdminDataReducer extends Reducer {
return { return {
'CUSTOM_RESPONSES_FULFILLED': this.onCustomResponses, 'CUSTOM_RESPONSES_FULFILLED': this.onCustomResponses,
'SESSION_CHECKED': this.onSessionChecked, 'SESSION_CHECKED': this.onSessionChecked,
'MY_TICKETS_FULFILLED': this.onMyTicketsRetrieved, 'MY_TICKETS_FULFILLED': this.onMyTicketsRetrieved,
'MY_TICKETS_REJECTED': this.onMyTicketsRejected,
'MY_TICKETS_PENDING': this.onMyTicketsPending, 'MY_TICKETS_PENDING': this.onMyTicketsPending,
'NEW_TICKETS_FULFILLED': this.onNewTicketsRetrieved, 'NEW_TICKETS_FULFILLED': this.onNewTicketsRetrieved,
'NEW_TICKETS_REJECTED': this.onNewTicketsRejected,
'NEW_TICKETS_PENDING': this.onNewTicketsPending, 'NEW_TICKETS_PENDING': this.onNewTicketsPending,
'ALL_TICKETS_FULFILLED': this.onAllTicketsRetrieved, 'ALL_TICKETS_FULFILLED': this.onAllTicketsRetrieved,
'ALL_TICKETS_REJECTED': this.onAllTicketsRejected,
'ALL_TICKETS_PENDING': this.onAllTicketsPending 'ALL_TICKETS_PENDING': this.onAllTicketsPending
}; };
} }
@ -53,26 +64,42 @@ class AdminDataReducer extends Reducer {
return _.extend({}, state, { return _.extend({}, state, {
myTickets: payload.data, myTickets: payload.data,
myTicketsLoaded: true myTicketsLoaded: true
});
}
onMyTicketsRejected(state) {
return _.extend({}, state, {
myTicketsError: true,
myTicketsLoaded: true
}) })
} }
onMyTicketsPending(state) { onMyTicketsPending(state) {
return _.extend({}, state, { return _.extend({}, state, {
myTicketsError: false,
myTicketsLoaded: false myTicketsLoaded: false
}) });
} }
onNewTicketsRetrieved(state, payload) { onNewTicketsRetrieved(state, payload) {
return _.extend({}, state, { return _.extend({}, state, {
newTickets: payload.data, newTickets: payload.data,
newTicketsLoaded: true newTicketsLoaded: true
}) });
}
onNewTicketsRejected(state) {
return _.extend({}, state, {
newTicketsError: true,
newTicketsLoaded: false
});
} }
onNewTicketsPending(state) { onNewTicketsPending(state) {
return _.extend({}, state, { return _.extend({}, state, {
newTicketsError: false,
newTicketsLoaded: false newTicketsLoaded: false
}) });
} }
onAllTicketsRetrieved(state, payload) { onAllTicketsRetrieved(state, payload) {
@ -80,13 +107,21 @@ class AdminDataReducer extends Reducer {
allTickets: payload.data.tickets, allTickets: payload.data.tickets,
allTicketsPages: payload.data.pages, allTicketsPages: payload.data.pages,
allTicketsLoaded: true allTicketsLoaded: true
}) });
}
onAllTicketsRejected(state) {
return _.extend({}, state, {
allTicketsError: false,
allTicketsLoaded: false
});
} }
onAllTicketsPending(state) { onAllTicketsPending(state) {
return _.extend({}, state, { return _.extend({}, state, {
allTicketsError: false,
allTicketsLoaded: false allTicketsLoaded: false
}) });
} }
} }