Load message texts from server

master
Vitaliy Filippov 2016-10-02 22:12:53 +03:00
parent f4c1473c3b
commit ca8e1feb9e
5 changed files with 54 additions and 21 deletions

View File

@ -33,7 +33,7 @@ var FolderList = module.exports = React.createClass({
{ {
var acc = this.props.accounts[accIndex]; var acc = this.props.accounts[accIndex];
var folder = this.props.accounts[accIndex].folders[folderIndex]; var folder = this.props.accounts[accIndex].folders[folderIndex];
if (folder.folderId) if (folder.folderId && (this.state.selectedAccount != accIndex || this.state.selectedFolder != folderIndex))
Store.loadFolder(folder.folderId); Store.loadFolder(folder.folderId);
this.setState({ selectedAccount: accIndex, selectedFolder: folderIndex }); this.setState({ selectedAccount: accIndex, selectedFolder: folderIndex });
}, },

View File

@ -1,6 +1,7 @@
const React = require('react'); const React = require('react');
const DropDownButton = require('./DropDownButton.js'); const DropDownButton = require('./DropDownButton.js');
const ListWithSelection = require('./ListWithSelection.js'); const ListWithSelection = require('./ListWithSelection.js');
const Store = require('./Store.js');
const StoreListener = require('./StoreListener.js'); const StoreListener = require('./StoreListener.js');
const Util = require('./Util.js'); const Util = require('./Util.js');
@ -92,14 +93,29 @@ var MessageList = React.createClass({
}, },
onSelectCurrent: function(index) onSelectCurrent: function(index)
{ {
var total = 0, p; var self = this;
for (var i = 0; i < this.props.groups.length; i++) var total = 0, p, msg, idx;
for (var i = 0; i < self.props.groups.length; i++)
{ {
p = total; p = total;
total += (i > 0 ? 1 : 0)+this.props.groups[i].messageCount; total += (i > 0 ? 1 : 0)+self.props.groups[i].messageCount;
if (index < total) if (index < total)
{ {
Store.set('msg', this.props.groups[i].messages[index-p-(i > 0 ? 1 : 0)]); idx = index-p-(i > 0 ? 1 : 0);
msg = self.props.groups[i].messages[idx];
if (!msg.body_text && !msg.body_html)
{
Store.loadMessage(msg.id, function(newMsg)
{
Store.set('msg', newMsg);
if (self.props.groups[i] && self.props.groups[i].messages[idx] == msg)
{
self.props.groups[i].messages[idx] = newMsg;
}
});
}
else
Store.set('msg', msg);
break; break;
} }
} }

View File

@ -69,23 +69,27 @@ var MessageView = React.createClass({
: null} : null}
</div> </div>
</div>, </div>,
(msg.blockedImages ? (msg.blockedImages
<div className="blocked-images"> ? <div className="blocked-images">
<img src="icons/block.png" /> This message contains blocked images. <img src="icons/block.png" /> This message contains blocked images.
<a className="button raised">Load Images</a> <a className="button raised">Load Images</a>
<label><input type="checkbox" /> Always load from {msg.from}</label> <label><input type="checkbox" /> Always load from {msg.from}</label>
</div>
: null),
<div className="text" dangerouslySetInnerHTML={{ __html: msg.body_html }}></div>,
this.props.quickReply ?
<div className="quick-reply">
<textarea></textarea>
<div className="btns">
<a className="button"><img src="icons/mail_send.png" /> Quick Reply</a>
<a className="button"><img src="icons/mail_reply_all.png" /> Quick Reply All</a>
</div> </div>
</div> : null),
: null (msg.body_html
? <div className="text" dangerouslySetInnerHTML={{ __html: msg.body_html }}></div>
: <div className="text plain">{msg.body_text}</div>
),
(this.props.quickReply
? <div className="quick-reply">
<textarea></textarea>
<div className="btns">
<a className="button"><img src="icons/mail_send.png" /> Quick Reply</a>
<a className="button"><img src="icons/mail_reply_all.png" /> Quick Reply All</a>
</div>
</div>
: null
)
] : null} ] : null}
</div> </div>
} }

View File

@ -112,5 +112,13 @@ var Store = module.exports = {
messages: msgs messages: msgs
} ]); } ]);
}); });
},
loadMessage: function(msgId, callback)
{
superagent.get('backend/message').query({ msgId: msgId }).end(function(err, res)
{
callback(res.body.msg);
});
} }
}; };

View File

@ -1231,6 +1231,11 @@ div
margin: 0 0 .5em 0; margin: 0 0 .5em 0;
} }
.message-view .text.plain
{
white-space: pre-wrap;
}
.message-view .blocked-images .message-view .blocked-images
{ {
flex: none; flex: none;