X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/0494b8d9b9bb03ab6c22b34dae81261e3cd7e3e6..7a654f8d43fdb43d78b63d90528bed6e86b608cc:/examples/ux/grid/filter/NumericFilter.js diff --git a/examples/ux/grid/filter/NumericFilter.js b/examples/ux/grid/filter/NumericFilter.js new file mode 100644 index 00000000..4ea544df --- /dev/null +++ b/examples/ux/grid/filter/NumericFilter.js @@ -0,0 +1,115 @@ +/** + * @class Ext.ux.grid.filter.NumericFilter + * @extends Ext.ux.grid.filter.Filter + * Filters using an Ext.ux.grid.menu.RangeMenu. + *

Example Usage:

+ *

+var filters = Ext.create('Ext.ux.grid.GridFilters', {
+    ...
+    filters: [{
+        type: 'numeric',
+        dataIndex: 'price'
+    }]
+});
+ * 
+ *

Any of the configuration options for {@link Ext.ux.grid.menu.RangeMenu} can also be specified as + * configurations to NumericFilter, and will be copied over to the internal menu instance automatically.

+ */ +Ext.define('Ext.ux.grid.filter.NumericFilter', { + extend: 'Ext.ux.grid.filter.Filter', + alias: 'gridfilter.numeric', + uses: ['Ext.form.field.Number'], + + /** + * @private @override + * Creates the Menu for this filter. + * @param {Object} config Filter configuration + * @return {Ext.menu.Menu} + */ + createMenu: function(config) { + var me = this, + menu; + menu = Ext.create('Ext.ux.grid.menu.RangeMenu', config); + menu.on('update', me.fireUpdate, me); + return menu; + }, + + /** + * @private + * Template method that is to get and return the value of the filter. + * @return {String} The value of this filter + */ + getValue : function () { + return this.menu.getValue(); + }, + + /** + * @private + * Template method that is to set the value of the filter. + * @param {Object} value The value to set the filter + */ + setValue : function (value) { + this.menu.setValue(value); + }, + + /** + * @private + * Template method that is to return true if the filter + * has enough configuration information to be activated. + * @return {Boolean} + */ + isActivatable : function () { + var values = this.getValue(), + key; + for (key in values) { + if (values[key] !== undefined) { + return true; + } + } + return false; + }, + + /** + * @private + * Template method that is to get and return serialized filter data for + * transmission to the server. + * @return {Object/Array} An object or collection of objects containing + * key value pairs representing the current configuration of the filter. + */ + getSerialArgs : function () { + var key, + args = [], + values = this.menu.getValue(); + for (key in values) { + args.push({ + type: 'numeric', + comparison: key, + value: values[key] + }); + } + return args; + }, + + /** + * Template method that is to validate the provided Ext.data.Record + * against the filters configuration. + * @param {Ext.data.Record} record The record to validate + * @return {Boolean} true if the record is valid within the bounds + * of the filter, false otherwise. + */ + validateRecord : function (record) { + var val = record.get(this.dataIndex), + values = this.getValue(), + isNumber = Ext.isNumber; + if (isNumber(values.eq) && val != values.eq) { + return false; + } + if (isNumber(values.lt) && val >= values.lt) { + return false; + } + if (isNumber(values.gt) && val <= values.gt) { + return false; + } + return true; + } +});