Code:
Ext.onReady(function(){
var subCatcombo = new Ext.form.ComboBox({
id:'subCatCombo',
triggerAction: 'all',
width:180,
store : subCatStore, //instance of Ext.data.Store store
fieldLabel: 'Sub Category',
hideLabel : false,
displayField : 'subCatEF',
valueField : 'subCatEF',
value : 'All',
forceSelection : true,
selectOnFocus : true,
editable : false,
style:'font-family:tahoma; font-size:11px; width:180px;',
renderTo: 'div_subCat'
});
var phase = new Ext.form.ComboBox({
id:'phaseCombo',
triggerAction: 'all',
width:80,
store : phaseStore, //instance of Ext.data.Store store
fieldLabel: 'Phase',
hideLabel : false,
displayField : 'phaseEF',
valueField : 'phaseEF',
value : 'All',
forceSelection : true,
editable : false,
renderTo: 'div_phase',
style:'font-family:tahoma; font-size:11px; width:80px;'
});
var region = new Ext.form.ComboBox({
id:'regionCombo',
triggerAction: 'all',
width:65,
store : regionStore, //instance of Ext.data.Store store
fieldLabel: 'Region',
hideLabel : false,
displayField : 'regionEF',
valueField : 'regionEF',
value : 'All',
forceSelection : true,
selectOnFocus : true,
editable : false,
renderTo: 'div_region',
style:'font-family:tahoma; font-size:11px; width:60px;'
});
var filterSub = new Ext.Button({
id: 'filterSubEF',
region: 'center',
text: 'Filter',
renderTo: 'div_filterSub',
formBind: true,
scope: this,
handler: applyFilterToGrid
});
filterSub.on('click', applyFilterToGrid, this);
var myGrid = new Ext.grid.GridPanel({
store: myGroupingTableStore, //instance of Ext.data.GroupingStore
columns: [{ header: 'Brand Name', width: 200, sortable: true, dataIndex: 'brand_name'},
{id: 'team_col', width: 250, sortable: true, dataIndex: 'indication_name' },
{header: 'Company', width: 100, sortable: true, dataIndex: 'company_name', resizable: false },
{header: 'Sub Category', width: 200, sortable: true, dataIndex: 'sub_category_name' },
{header: 'Region', width: 60, sortable: true, dataIndex: 'region_name'},
{header: 'Phase',width: 70,sortable: true,dataIndex: 'phase_name'},
{ header: 'Launch Date',width: 80,sortable: true,dataIndex: 'launch_date',renderer: Ext.util.Format.dateRenderer('M-y')},
{header: 'Sales FY-1',width: 80,sortable: true,align: 'right',dataIndex: 'sales_fym1',summaryType: 'sum',renderer: Ext.util.Format.numberRenderer('0.00')},
{header: 'Sales FY0',width: 80,sortable: true,align: 'right',dataIndex: 'sales_fy0',renderer: Ext.util.Format.numberRenderer('0.00')},
{header: 'Sales FY1',width: 80,sortable: true,align: 'right',dataIndex: 'sales_fy1',renderer: Ext.util.Format.numberRenderer('0.00')}
],
view: new Ext.grid.GroupingView({
forceFit: true,
hideGroupedColumn: true,
groupTextTpl: '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Items" : "Item"]})'
}),
disableSelection: true,
loadMask: new Ext.LoadMask(Ext.getBody(), {
msg: "Loading..."
}),
delay: 400,
listeners: {
render: function(grid){ //load the store when the grid is rendered
grid.loadMask.show();
var store = grid.getStore();
store.load.defer(20, store); //give the mask a chance to render
}
}
});
var viewport = new Ext.Viewport( {
layout : 'border',
renderTo : Ext.getBody(),
items : [ {
region : 'north',
xtype : 'panel',
height : 193,
applyTo : 'TOP',
border : false
}, {
region : 'center',
xtype : 'panel',
layout : 'fit',
split : true,
items : [ myGrid ]
} ]
});
// functions
function applyFilterToGrid() {
var subCatName = Ext.getDom('subCatCombo').value;
var regionName = Ext.getDom('regionCombo').value;
var phaseName = Ext.getDom('phaseCombo').value;
myGroupingTableStore.clearFilter(false);
myGroupingTableStore.filterBy(function(record,id){
if((subCatName != "All") && (phaseName == "All") && (regionName == "All")) {
return (record.get('sub_category_name')== subCatName);
} else if((subCatName == "All") && (phaseName != "All") && (regionName == "All")) {
return (record.get('phase_name') == phaseName);
} else if((subCatName == "All") && (phaseName == "All") && (regionName != "All")) {
return (record.get('region_name') == regionName);
} else if((subCatName != "All") && (phaseName != "All") && (regionName == "All")) {
return ((record.get('sub_category_name')== subCatName) && (record.get('phase_name') == phaseName));
} else if((subCatName != "All") && (phaseName != "All") && (regionName != "All")) {
return ((record.get('sub_category_name')== subCatName) && (record.get('phase_name') == phaseName) && (record.get('region_name') == regionName));
}
return true;
});
}
// Tried below with the events but this doesn't work.
myGrid.getStore().addListener('datachanged', function(){
myGrid.loadMask.show();
}, myGrid);
myGrid.getStore().addListener('load', function(){
myGrid.loadMask.disable();
}, myGrid);
myGrid.getStore().addListener('loadexception', function(){
myGrid.loadMask.disable();
}, myGrid);
}); // onReady