Ext.namespace('Zarafa.common.freebusy.ui');
/**
* @class Zarafa.common.freebusy.ui.UserListView
* @extends Zarafa.common.recipientfield.ui.RecipientList
* @xtype zarafa.freebusyuserlistview
*/
Zarafa.common.freebusy.ui.UserListView = Ext.extend(Zarafa.common.recipientfield.ui.RecipientList, {
/**
* @cfg {Zarafa.common.freebusy.data.FreebusyModel} model
* The model that keeps track of the userStore, dates, etc.
*/
model: null,
/**
* @constructor
* @param {Object} config Configuration object
*/
constructor : function(config)
{
config = config || {};
Ext.applyIf(config, {
boxType : 'zarafa.userlistbox',
wrapCls : 'x-form-text x-zarafa-boxfield x-freebusy-userlist-container',
border: true
});
Zarafa.common.freebusy.ui.UserListView.superclass.constructor.call(this, config);
if (this.model) {
this.setRecipientStore(this.model.getUserStore());
this.mon(this.model, 'userstorechange', this.onUserStoreChange, this);
}
},
/**
* Event handler which is fired when the {@link #model} fires the
* {@link Zarafa.common.freebusy.data.FreebusyModel#userstorechange userstorechange} event. This
* will update the {@link #boxStore} with the new userstore.
* @param {Zarafa.core.data.RecipientStore} newStore The new userstore
* @private
*/
onUserStoreChange : function(newStore)
{
this.setRecipientStore(newStore);
},
/**
* Called to filter out records before they are added to this field. Can be overwritten to
* implement such a filter. By default it will allow all records.
* @param {Zarafa.core.data.IPMRecipientStore} store RecipientStore
* @param {Zarafa.core.data.IPMRecipientRecord[]} records The records to be filtered
* @return {Zarafa.core.data.IPMRecipientRecord[]} Filtered records
*/
filterRecords : function(store, records)
{
var ret = [];
for (var i = 0, len = records.length; i < len; i++) {
var record = records[i];
if (!Ext.isDefined(this.filterRecipientType) || record.get('recipient_type') === this.filterRecipientType) {
ret.push(record);
}
}
return ret;
},
/**
* Callback function from {@link Zarafa.common.ui.Box} which indicates that
* the box is being removed by the user. This will fire the {@link #boxremove}
* event.
* @param {Zarafa.common.ui.Box} box The box which called this function
*/
doBoxRemove: function(box)
{
if (!box.record.isMeetingOrganizer()) {
Zarafa.common.freebusy.ui.UserListView.superclass.doBoxRemove.apply(this, arguments);
}
},
* Event handler when the contextmenu is requested for a Box.
* @param {Zarafa.common.recipientfield.ui.RecipientField} field This field to which the box belongs
* @param {Zarafa.common.recipientfield.ui.RecipientBox} box The box for which the contextmenu is requested
* @param {Zarafa.core.data.IPMRecipientRecord} record The record which is attached to the box
* @private
*/
onBoxContextMenu : function(field, box, record)
{
Zarafa.core.data.UIFactory.openContextMenu(Zarafa.core.data.SharedComponentType['common.contextmenu.freebusy'], record, { position : box.getEl().getXY(), editable : box.editable});
}
});
Ext.reg('zarafa.freebusyuserlistview', Zarafa.common.freebusy.ui.UserListView);