'use strict';
define(
[
'flight/lib/component',
'components/mustache/mustache',
'app/data',
'app/templates'
],
function(defineComponent, Mustache, dataStore, templates) {
return defineComponent(composeBox);
function composeBox() {
this.defaultAttrs({
dataStore: dataStore,
recipientHintId: 'recipient_hint',
subjectHint: 'Subject',
messageHint: 'Message',
toHint: 'To',
forwardPrefix: 'Fw',
replyPrefix: 'Re'
});
this.serveComposeBox = function(ev, data) {
this.trigger("dataComposeBoxServed", {
markup: this.renderComposeBox(data.type, data.relatedMailId),
type: data.type});
};
this.getSubject = function(type, relatedMailId) {
var relatedMail = this.attr.dataStore.mail.filter(function(each) {
return each.id == relatedMailId;
})[0];
var subject = relatedMail && relatedMail.subject;
var subjectLookup = {
newMail: this.attr.subjectHint,
forward: this.attr.forwardPrefix + ": " + subject,
reply: this.attr.replyPrefix + ": " + subject
}
return subjectLookup[type];
};
this.renderComposeBox = function(type, relatedMailId) {
var recipientId = this.getRecipientId(type, relatedMailId);
var contacts = this.attr.dataStore.contacts.map(function(contact) {
contact.recipient = (contact.id == recipientId);
return contact;
});
return Mustache.render(templates.composeBox, {
newMail: type == 'newMail',
reply: type == 'reply',
subject: this.getSubject(type, relatedMailId),
message: this.attr.messageHint,
contacts: contacts
});
};
this.getRecipientId = function(type, relatedMailId) {
var relatedMail = (type == 'reply') && this.attr.dataStore.mail.filter(function(each) {
return each.id == relatedMailId;
})[0];
return relatedMail && relatedMail.contact_id || this.attr.recipientHintId;
};
this.send = function(ev, data) {
this.attr.dataStore.mail.push({
id: String(Date.now()),
contact_id: data.to_id,
folders: ["sent"],
time: Date.now(),
subject: data.subject,
message: data.message
});
this.trigger('dataMailItemsRefreshRequested', {folder: data.currentFolder});
};
this.after("initialize", function() {
this.on("uiComposeBoxRequested", this.serveComposeBox);
this.on("uiSendRequested", this.send);
});
}
}
);