Merge pull request #951 from mattermost/PLT-500

PLT-500 fixing connection msg issues
Этот коммит содержится в:
Corey Hulen
2015-10-07 09:33:59 -07:00
родитель 3c859aebde 8a65601db4
Коммит c189e2bb76
4 изменённых файлов: 69 добавлений и 23 удалений

Просмотреть файл

@@ -9,28 +9,71 @@ export default class ErrorBar extends React.Component {
this.onErrorChange = this.onErrorChange.bind(this); this.onErrorChange = this.onErrorChange.bind(this);
this.handleClose = this.handleClose.bind(this); this.handleClose = this.handleClose.bind(this);
this.resize = this.resize.bind(this);
this.prevTimer = null; this.prevTimer = null;
this.state = ErrorStore.getLastError(); this.state = ErrorStore.getLastError();
if (this.state && this.state.message) { if (this.isValidError(this.state)) {
this.prevTimer = setTimeout(this.handleClose, 10000); 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;
}
resize() {
if (this.isValidError(this.state)) {
var height = $(React.findDOMNode(this)).outerHeight();
height = height < 30 ? 30 : height;
$('body').css('padding-top', height + 'px');
} else {
$('body').css('padding-top', '0');
}
}
componentDidMount() { componentDidMount() {
ErrorStore.addChangeListener(this.onErrorChange); ErrorStore.addChangeListener(this.onErrorChange);
$('body').css('padding-top', $(React.findDOMNode(this)).outerHeight());
$(window).resize(() => { $(window).resize(() => {
if (this.state && this.state.message) { this.resize();
$('body').css('padding-top', $(React.findDOMNode(this)).outerHeight());
}
}); });
this.resize();
} }
componentWillUnmount() { componentWillUnmount() {
ErrorStore.removeChangeListener(this.onErrorChange); ErrorStore.removeChangeListener(this.onErrorChange);
} }
componentDidUpdate() {
this.resize();
}
onErrorChange() { onErrorChange() {
var newState = ErrorStore.getLastError(); var newState = ErrorStore.getLastError();
@@ -41,7 +84,9 @@ export default class ErrorBar extends React.Component {
if (newState) { if (newState) {
this.setState(newState); this.setState(newState);
this.prevTimer = setTimeout(this.handleClose, 10000); if (!this.isConnectionError(newState)) {
this.prevTimer = setTimeout(this.handleClose, 10000);
}
} else { } else {
this.setState({message: null}); this.setState({message: null});
} }
@@ -52,22 +97,11 @@ export default class ErrorBar extends React.Component {
e.preventDefault(); e.preventDefault();
} }
ErrorStore.storeLastError(null); this.setState({message: null});
ErrorStore.emitChange();
$('body').css('padding-top', '0');
} }
render() { render() {
if (!this.state) { if (!this.isValidError(this.state)) {
return <div/>;
}
if (!this.state.message) {
return <div/>;
}
if (this.state.connErrorCount < 7) {
return <div/>; return <div/>;
} }

Просмотреть файл

@@ -50,8 +50,10 @@ class SocketStoreClass extends EventEmitter {
} }
this.failCount = 0; this.failCount = 0;
ErrorStore.storeLastError(null); if (ErrorStore.getLastError()) {
ErrorStore.emitChange(); ErrorStore.storeLastError(null);
ErrorStore.emitChange();
}
}; };
conn.onclose = () => { conn.onclose = () => {

Просмотреть файл

@@ -2,6 +2,7 @@
var BrowserStore = require('../stores/browser_store.jsx'); var BrowserStore = require('../stores/browser_store.jsx');
var TeamStore = require('../stores/team_store.jsx'); var TeamStore = require('../stores/team_store.jsx');
var ErrorStore = require('../stores/error_store.jsx');
export function track(category, action, label, prop, val) { export function track(category, action, label, prop, val) {
global.window.analytics.track(action, {category: category, label: label, property: prop, value: 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; msg = 'error in ' + methodName + ' status=' + status + ' statusCode=' + xhr.status + ' err=' + err;
if (xhr.status === 0) { 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 { } else {
e = {message: 'We received an unexpected status code from the server (' + xhr.status + ')'}; e = {message: 'We received an unexpected status code from the server (' + xhr.status + ')'};
} }

Просмотреть файл

@@ -16,7 +16,7 @@
} }
.bad-connection { .bad-connection {
background-color: rgb(255, 255, 172); background-color: rgb(255, 255, 172) !important;
} }
.textarea-div { .textarea-div {