From 4345dce3b8c623a79b7d5c14bf67bc1a3c1633ed Mon Sep 17 00:00:00 2001 From: =Corey Hulen Date: Tue, 6 Oct 2015 16:17:27 -0700 Subject: PLT-500 fixing connection msg issues --- web/react/components/error_bar.jsx | 65 +++++++++++++++++++++++++++----------- web/react/stores/socket_store.jsx | 6 ++-- web/react/utils/client.jsx | 12 ++++++- 3 files changed, 62 insertions(+), 21 deletions(-) (limited to 'web/react') diff --git a/web/react/components/error_bar.jsx b/web/react/components/error_bar.jsx index 05726e860..0af1acc6e 100644 --- a/web/react/components/error_bar.jsx +++ b/web/react/components/error_bar.jsx @@ -12,17 +12,47 @@ export default class ErrorBar extends React.Component { this.prevTimer = null; this.state = ErrorStore.getLastError(); - if (this.state && this.state.message) { + if (this.isValidError(this.state)) { this.prevTimer = setTimeout(this.handleClose, 10000); } } + isValidError(s) { + if (!s) { + return false; + } + + if (!s.message) { + return false; + } + + if (s.connErrorCount && s.connErrorCount >= 1 && s.connErrorCount < 7) { + return false; + } + + return true; + } + + isConnectionError(s) { + if (!s.connErrorCount || s.connErrorCount === 0) { + return false; + } + + if (s.connErrorCount > 7) { + return true; + } + + return false; + } + componentDidMount() { ErrorStore.addChangeListener(this.onErrorChange); - $('body').css('padding-top', $(React.findDOMNode(this)).outerHeight()); + $(window).resize(() => { - if (this.state && this.state.message) { - $('body').css('padding-top', $(React.findDOMNode(this)).outerHeight()); + if (this.isValidError(this.state)) { + $('body').css('padding-top', '30px'); + } else { + $('body').css('padding-top', '0'); } }); } @@ -31,6 +61,14 @@ export default class ErrorBar extends React.Component { ErrorStore.removeChangeListener(this.onErrorChange); } + componentWillUpdate(nextProps, nextState) { + if (this.isValidError(nextState)) { + $('body').css('padding-top', '30px'); + } else { + $('body').css('padding-top', '0'); + } + } + onErrorChange() { var newState = ErrorStore.getLastError(); @@ -41,7 +79,9 @@ export default class ErrorBar extends React.Component { if (newState) { this.setState(newState); - this.prevTimer = setTimeout(this.handleClose, 10000); + if (!this.isConnectionError(newState)) { + this.prevTimer = setTimeout(this.handleClose, 10000); + } } else { this.setState({message: null}); } @@ -52,22 +92,11 @@ export default class ErrorBar extends React.Component { e.preventDefault(); } - ErrorStore.storeLastError(null); - ErrorStore.emitChange(); - - $('body').css('padding-top', '0'); + this.setState({message: null}); } render() { - if (!this.state) { - return
; - } - - if (!this.state.message) { - return
; - } - - if (this.state.connErrorCount < 7) { + if (!this.isValidError(this.state)) { return
; } diff --git a/web/react/stores/socket_store.jsx b/web/react/stores/socket_store.jsx index 1d853f979..9f354965e 100644 --- a/web/react/stores/socket_store.jsx +++ b/web/react/stores/socket_store.jsx @@ -50,8 +50,10 @@ class SocketStoreClass extends EventEmitter { } this.failCount = 0; - ErrorStore.storeLastError(null); - ErrorStore.emitChange(); + if (ErrorStore.getLastError()) { + ErrorStore.storeLastError(null); + ErrorStore.emitChange(); + } }; conn.onclose = () => { diff --git a/web/react/utils/client.jsx b/web/react/utils/client.jsx index d9f486009..6dccfcdeb 100644 --- a/web/react/utils/client.jsx +++ b/web/react/utils/client.jsx @@ -2,6 +2,7 @@ var BrowserStore = require('../stores/browser_store.jsx'); var TeamStore = require('../stores/team_store.jsx'); +var ErrorStore = require('../stores/error_store.jsx'); export function track(category, action, label, prop, val) { global.window.analytics.track(action, {category: category, label: label, property: prop, value: val}); @@ -27,7 +28,16 @@ function handleError(methodName, xhr, status, err) { msg = 'error in ' + methodName + ' status=' + status + ' statusCode=' + xhr.status + ' err=' + err; if (xhr.status === 0) { - e = {message: 'There appears to be a problem with your internet connection', connErrorCount: 1}; + let errorCount = 1; + const oldError = ErrorStore.getLastError(); + let connectError = 'There appears to be a problem with your internet connection'; + + if (oldError && oldError.connErrorCount) { + errorCount += oldError.connErrorCount; + connectError = 'We cannot reach the Mattermost service. The service may be down or misconfigured. Please contact an administrator to make sure the WebSocket port is configured properly.'; + } + + e = {message: connectError, connErrorCount: errorCount}; } else { e = {message: 'We received an unexpected status code from the server (' + xhr.status + ')'}; } -- cgit v1.2.3-1-g7c22