/**
* This abstract base class is used by grid filters that have a single
* {@link Ext.data.Store#cfg-filters store filter}.
* @protected
*/
Ext.define('Ext.grid.filters.filter.SingleFilter', {
extend: 'Ext.grid.filters.filter.Base',
constructor: function(config) {
var me = this,
filter, value;
me.callParent([config]);
value = me.value;
filter = me.getStoreFilter();
if (filter) {
// This filter was restored from stateful filters on the store so enforce it as active.
me.active = true;
}
else {
// Once we've reached this block, we know that this grid filter doesn't have a stateful
// filter, so if our flag to begin saving future filter mutations is set we know
// that any configured filter must be nulled out or it will replace our stateful filter.
if (me.grid.stateful && me.getGridStore().saveStatefulFilters) {
value = undefined;
}
// TODO: What do we mean by value === null ?
me.active = me.getActiveState(config, value);
// Now we're acting on user configs so let's not futz with any assumed settings.
filter = me.createFilter({
operator: me.operator,
value: value
});
if (me.active) {
me.addStoreFilter(filter);
}
}
if (me.active) {
me.setColumnActive(true);
}
me.filter = filter;
},
activate: function(showingMenu) {
if (showingMenu) {
this.activateMenu();
}
else {
this.addStoreFilter(this.filter);
}
},
deactivate: function() {
this.removeStoreFilter(this.filter);
},
getValue: function(field) {
return field.getValue();
},
onFilterRemove: function() {
// Filters can be removed at any time, even before a column filter's menu
// has been created (i.e., store.clearFilter()).
if (!this.menu || this.active) {
this.active = false;
}
}
});