/* * #dependsFile client/zarafa/contact/dialogs/DistlistMemberGridColumnModel.js */ Ext.namespace('Zarafa.contact.dialogs'); /** * @class Zarafa.contact.dialogs.DistlistMembersTab * @extends Ext.form.FormPanel * @xtype zarafa.distlistmemberstab * * This class is used to create layout of members tab panel. */ Zarafa.contact.dialogs.DistlistMembersTab = Ext.extend(Ext.form.FormPanel, { /** * @constructor * @param {Object} config configuration object. */ constructor : function(config) { config = config || {}; config.plugins = Ext.value(config.plugins, []); config.plugins.push('zarafa.recordcomponentupdaterplugin'); Ext.applyIf(config, { xtype : 'zarafa.distlistmemberstab', cls: 'zarafa-distlist-createpanel-memberstab', title : _('Members'), layout : 'vbox', layoutConfig: { align : 'stretch', pack : 'start' }, defaults : { header : false, margins : {top:0, right:0, bottom:6, left:0}, border : false }, items: this.getMembersTabItems() }); Zarafa.contact.dialogs.DistlistMembersTab.superclass.constructor.call(this, config); }, /** * Function will return items for members tab. */ getMembersTabItems : function() { return [{ layout:'form', items: [{ xtype : 'textfield', name : 'subject', labelStyle: 'text-align: left', fieldLabel: _('Name'), anchor : '100%', listeners :{ change : this.onPropertyChange, scope : this } }] },{ layout:'table', cls: 'buttons', layoutConfig: { columns: 5 }, items: [{ xtype : 'button', autoWidth: true, text : _('Select Members') + '...', handler : this.showAddressBookContent, scope : this },{ xtype: 'spacer', width: 6 },{ xtype : 'button', autoWidth: true, handler : this.addExternalMember, scope: this, text : _('Add New') + '...' },{ xtype: 'spacer', width: 6 },{ xtype : 'button', autoWidth: true, text : _('Remove'), handler : this.removeMembers, scope: this }] },{ xtype: 'grid', flex: 1, viewConfig: { autoFill: true }, // provide a dummy store when rendering components // this will be replaced by recipient store when record data // will be available in the dialog store: new Ext.data.Store({ autoDestroy: true }), listeners : { rowdblclick : this.onRowDblClick }, ref: 'membersGrid', autoExpandColumn : 'display_name', colModel: new Zarafa.contact.dialogs.DistlistMemberGridColumnModel() }]; }, /** * Load record into form * * @param {Zarafa.core.data.IPMRecord} record The record to load * @param {Boolean} contentReset force the component to perform a full update of the data. */ update : function(record, contentReset) { if(Ext.isEmpty(record)) { return; } this.record = record; this.getForm().loadRecord(record); // Assign a store to members grid. if(contentReset && record.isOpened()) { // apply sorting record.getMemberStore().sort('fileas', 'asc'); // reconfigure grid to use member store this.membersGrid.reconfigure(record.getMemberStore(), this.membersGrid.colModel); } }, /** * Update record from form, Get values from the form. * * @param {Zarafa.core.data.IPMRecord} record The record to update * @private */ updateRecord : function(record) { record.beginEdit(); this.getForm().updateRecord(record); // Also set subject dependant properties. record.set('fileas', record.get('subject')); record.set('display_name', record.get('subject')); record.endEdit(); }, /** * Function Opens a {@link Zarafa.addressbook.dialogs.ABMultiUserSelectionContentPanel ABMultiUserSelectionContentPanel} * to select members from addressbook. */ showAddressBookContent : function() { Zarafa.contact.Actions.openMembersSelectionContent(this.record); }, /** * Function will open {@link Zarafa.contact.dialogs.ABMultiUserSelectionContentPanel ABMultiUserSelectionContentPanel} * for adding external member. */ addExternalMember : function() { Zarafa.contact.Actions.openDistlistExternalMemberContent(undefined, { parentRecord : this.record }); }, /** * Function will remove selected members from the membersGrid. */ removeMembers : function() { var store = this.record.getMemberStore(); var selectedRecords = this.membersGrid.getSelectionModel().getSelections(); store.remove(selectedRecords); }, /** * Event handler which is triggered when one of the Input fields * has been changed by the user. It will validate the new value, * and if correct, will apply it to the {@link Zarafa.core.data.IPMRecord record}. * @param {Ext.form.Field} field The {@link Ext.form.Field field} which was changed. * @param {Mixed} newValue The new value * @param {Mixed} oldValue The old value * @private */ onPropertyChange : function(field, newValue, oldValue) { this.record.set(field.getName(), newValue); }, /** * Event handler which is fired when a row in the grid has been double-clicked. * This will open the selected addressbook item in a new dialog. * @param {Ext.grid.GridPanel} grid The grid which fired the event * @param {Number} rowIndex The index of the row which was double clicked * @param {Ext.EventObject} event The event */ onRowDblClick : function(grid, rowIndex, event) { var record = this.getStore().getAt(rowIndex); Zarafa.contact.Actions.openDistlistMember(record, this.record); } }); Ext.reg('zarafa.distlistmemberstab', Zarafa.contact.dialogs.DistlistMembersTab);