Code:
/**
* Init function
* This function is called when the plugin is invoked by the Owner component
*
* @param {Ext.grid.Panel} grid
*/
init: function (grid) {
var me = this,
columns = grid.columns;
me.ownerGrid = grid;
me.ownerGrid.on('filterdata', me.manualApplyFilters, me);
me.ownerGrid.on('resetfilter', me.manualClearFilters, me);
me.extraSearchField = grid.query('[extraSearchField=true]');
grid.on('afterrender', function (grid) {
Ext.Array.each(columns, function (column) {
var filter = {};
if (!column[me.activateKey]) {
return true;
}
if (!column.items)
Ext.apply(column, {items: []});
if (Ext.isEmpty(column.filter.xtype)) {
Ext.apply(filter, {
xtype: 'textfield'
});
} else if (column.filter.xtype == 'datefield') {
Ext.apply(filter, {
formatText: null,
invalidText: '{0} is not a valid date - it must be in the format DD-Mon-YYYY'
});
}
Ext.apply(filter, column.filter, {
height: 22,
width: '100%',
enableKeyEvents: true,
isFilterField: true,
triggers: {
clear: {
cls: 'x-form-clear-trigger',
hidden: true,
handler: function () {
this.setValue(null);
this.triggers.clear.el.hide();
if (typeof this.clearValue === 'function')
this.clearValue();
}
}
}
});
if (me.enterKeySearch) {
//user has specified filtering be executed on ENTER key
Ext.apply(filter, {
listeners: {
keypress: function (field, e) {
//either ENTER key
if (e.event.keyCode == 13) {
me.manualApplyFilters();
me.ownerGrid.fireEvent('filtersapplied');
}
},
change: function (field, newVal) {
if (Ext.isEmpty(newVal)) {
field.triggers.clear.el.hide();
} else {
field.triggers.clear.el.show();
}
if (field.xtype == 'combo' && !Ext.isEmpty(field.reloadDataOnChange)
&& field.reloadDataOnChange == true && !Ext.isEmpty(field.getValue())) {
me.manualApplyFilters();
me.ownerGrid.fireEvent('filtersapplied');
}
}
}
});
} else {
//user has specified immediate filtering
Ext.apply(filter, {
enableKeyEvents: false,
listeners: {
change: function (field, e) {
var fn = (Ext.isEmpty(field.getValue())) ? me.clearFilter : me.applyFilter;
me._task.delay(me.delay, fn, me, [field]);
}
}
});
}
//so that a column reference can be reached via a filter
filter.column = column;
var createdFilter = Ext.ComponentManager.create(filter);
//so that a filter reference can be reached via a column
column.filter = createdFilter;
var visibleContainer = Ext.create('Ext.container.Container', {
//added so the field has access to the parent viewModel
viewModel: grid.lookupViewModel(),
isFilterField: true,
height: 28,
width: '100%',
padding: '0 5px',
listeners: {
scope: me,
element: 'el',
mousedown: function (e) {
e.stopPropagation();
},
click: function (e) {
e.stopPropagation();
},
dblclick: function (e) {
e.stopPropagation();
},
keydown: function (e) {
e.stopPropagation();
},
keypress: function (e) {
e.stopPropagation();
},
keyup: function (e) {
e.stopPropagation();
}
}
});
//add fields to array so that when a search occurs all fields can be read
me.fields.push(createdFilter);
//render container in column
visibleContainer.render(column.getEl());
//add created filter to previously created and rendered column
visibleContainer.add(createdFilter);
}, me);
}, me);
}