diff --git a/index.html b/index.html
index 987f3247..14ebb42d 100644
--- a/index.html
+++ b/index.html
@@ -2272,8 +2272,6 @@
var elementKey = 0;
var formatter = function(style, data, values) {
- // console.log("El: " + style + ", data: " + JSON.stringify(data) + ", values: " + JSON.stringify(values));
-
elementKey += 1;
var el = Drafty.tagName(style);
if (el) {
@@ -2383,13 +2381,22 @@
this.propsChange(nextProps);
},
propsChange: function(props) {
- var instance = this;
if (!props || !props.topic) {
this.setState({messages: [], topic: null});
this.leave();
- } else if (props.topic != this.state.topic) {
+ return;
+ }
+
+ if (this.props.connected && !props.connected) {
+ // connection lost, do nothing
+ return;
+ }
+
+ var tryToResubscribe = !this.props.connected && props.connected;
+
+ var topic = Tinode.getTopic(props.topic);
+ if (props.topic != this.state.topic) {
var msgs = [];
- var topic = Tinode.getTopic(props.topic);
// Bind the new topic to component.
topic.onData = this.handleNewMessage;
topic.onInfo = this.handleInfoReceipt;
@@ -2403,26 +2410,29 @@
msgs = msgs.concat(msg);
});
- if (!topic.isSubscribed()) {
- topic.subscribe(topic.startMetaQuery()
- .withLaterDesc()
- .withLaterSub()
- .withLaterData(MESSAGES_PAGE)
- .build()).catch(function(err){
- instance.props.onError(err.message, "err");
- });
- }
-
- // The user switched to the new topic before the timer for
- // the previous topic has triggered, kill it.
- clearTimeout(this.readTimer);
-
this.setState({
messages: msgs,
topic: props.topic,
scrollPosition: 0
});
+
+ tryToResubscribe = true;
}
+
+ if (!topic.isSubscribed() && tryToResubscribe) {
+ var instance = this;
+ topic.subscribe(topic.startMetaQuery()
+ .withLaterDesc()
+ .withLaterSub()
+ .withLaterData(MESSAGES_PAGE)
+ .build()).catch(function(err){
+ instance.props.onError(err.message, "err");
+ });
+ }
+
+ // The user switched to the new topic before the timer for
+ // the previous topic has triggered, kill it.
+ clearTimeout(this.readTimer);
},
leave: function() {
@@ -2774,6 +2784,7 @@
var AppView = React.createClass({
getInitialState: function() {
return {
+ connected: false,
transport: null,
serverAddress: detectServerAddress(),
sidePanelSelected: 'login',
@@ -2858,7 +2869,9 @@
// Connection succeeded.
handleConnected: function() {
var params = Tinode.getServerInfo();
- this.setState({serverVersion: params.ver + " (" + (params.build ? params.build : "none") + ")"});
+ this.setState({
+ serverVersion: params.ver + " (" + (params.build ? params.build : "none") + ")"
+ });
this.doLogin(this.state.login, this.state.password);
},
@@ -2894,7 +2907,11 @@
// Logged in fine, subscribe to 'me' attaching callbacks from the contacts view.
var me = Tinode.getMeTopic();
me.onMetaDesc = instance.tnMeMetaDesc;
- instance.setState({sidePanelSelected: "contacts", myUserId: Tinode.getCurrentUserID()});
+ instance.setState({
+ connected: true,
+ sidePanelSelected: "contacts",
+ myUserId: Tinode.getCurrentUserID()
+ });
// Subscribe, fetch topic desc, the list of subscriptions. Messages are not fetched.
me.subscribe(me.startMetaQuery().withLaterSub().withDesc().build()).catch(function(err){
instance.handleError(err.message, "err");
@@ -2903,15 +2920,12 @@
handleDisconnect: function(err) {
this.setState({
+ connected: false,
dialogSelected: null,
errorText: err && err.message ? err.message : 'Disconnected',
errorLevel: err && err.message ? "err" : "warn",
loginDisabled: false,
contextMenuVisible: false,
- contextMenuBounds: null,
- contextMenuClickAt: null,
- contextMenuTopic: '',
- contextMenuItems: [],
serverVersion: 'no connection'
});
},
@@ -3252,6 +3266,7 @@
onError={this.handleError} />