'use strict';
define(
[
'flight/lib/component',
'components/mustache/mustache',
'app/data',
'app/templates'
],
function(defineComponent, Mustache, dataStore, templates) {
return defineComponent(mailItems);
function mailItems() {
this.defaultAttrs({
folder: 'inbox',
dataStore: dataStore
});
this.serveMailItems = function(ev, data) {
var folder = (data && data.folder) || this.attr.folder;
this.trigger("dataMailItemsServed", {markup: this.renderItems(this.assembleItems(folder))})
};
this.renderItems = function(items) {
return Mustache.render(templates.mailItem, {mailItems: items});
};
this.assembleItems = function(folder) {
var items = [];
this.attr.dataStore.mail.forEach(function(each) {
if (each.folders && each.folders.indexOf(folder) > -1) {
items.push(this.getItemForView(each));
}
}, this);
return items;
};
this.getItemForView = function(itemData) {
var thisItem, thisContact, msg
thisItem = {id: itemData.id, important: itemData.important};
thisContact = this.attr.dataStore.contacts.filter(function(contact) {
return contact.id == itemData.contact_id
})[0];
thisItem.name = [thisContact.firstName, thisContact.lastName].join(' ');
var subj = itemData.subject;
thisItem.formattedSubject = subj.length > 70 ? subj.slice(0, 70) + "..." : subj;
var msg = itemData.message;
thisItem.formattedMessage = msg.length > 70 ? msg.slice(0, 70) + "..." : msg;
return thisItem;
};
this.after("initialize", function() {
this.on("uiMailItemsRequested", this.serveMailItems);
this.on("dataMailItemsRefreshRequested", this.serveMailItems);
});
}
}
);