improve csrf expiration error handling (#2695)

* add message

* re run query on result set mount if there is session time out error
This commit is contained in:
Alanna Scott 2017-05-01 08:59:44 -07:00 committed by Maxime Beauchemin
parent 5fd0e7d028
commit 2d5beb1f91
2 changed files with 13 additions and 2 deletions

View File

@ -151,6 +151,9 @@ export function runQuery(query) {
} else if (msg === null) {
msg = `[${textStatus}] ${errorThrown}`;
}
if (msg.indexOf('The CSRF token is missing') > 0) {
msg = 'Your session timed out, please refresh your page and try again.';
}
dispatch(queryFailed(query, msg));
},
});

View File

@ -38,6 +38,10 @@ export default class ResultSet extends React.PureComponent {
height: props.search ? props.height - RESULT_SET_CONTROLS_HEIGHT : props.height,
};
}
componentDidMount() {
// only do this the first time the component is rendered/mounted
this.reRunQueryIfSessionTimeoutErrorOnMount();
}
componentWillReceiveProps(nextProps) {
// when new results comes in, save them locally and clear in store
if (this.props.cache && (!nextProps.query.cached)
@ -53,7 +57,6 @@ export default class ResultSet extends React.PureComponent {
this.fetchResults(nextProps.query);
}
}
getControls() {
if (this.props.search || this.props.visualize || this.props.csv) {
let csvButton;
@ -132,7 +135,12 @@ export default class ResultSet extends React.PureComponent {
reFetchQueryResults(query) {
this.props.actions.reFetchQueryResults(query);
}
reRunQueryIfSessionTimeoutErrorOnMount() {
const { query } = this.props;
if (query.errorMessage && query.errorMessage.indexOf('session timed out') > 0) {
this.props.actions.runQuery(query, true);
}
}
render() {
const query = this.props.query;
const results = query.results;