Ext.namespace( 'instore.extlib.ui.grid' ); instore.extlib.ui.grid.GridPanel = function(config, DWRgetMethod, params) { this.defaultParams = { start: 0, limit: 20, sort: "", dir: "ASC", sortList: [], newMeta: true, includedFields: null, excludedFields: null }; params = params || {}; Ext.apply(this.defaultParams, { start: config.start || params.start || this.defaultParams.start, limit: config.limit|| params.limit || this.defaultParams.limit, sort: config.sort || params.sort || this.defaultParams.sort, sortList: config.sortList || params.sortList || this.defaultParams.sortList, dir: config.dir || params.dir || this.defaultParams.dir, newMeta: config.newMeta || params.newMeta || this.defaultParams.newMeta, includedFields: config.includedFields || params.includedFields || this.defaultParams.includedFields, excludedFields: config.excludedFields || params.excludedFields || this.defaultParams.excludedFields }) this.DWRgetMethod = DWRgetMethod || null; this.params = Ext.apply(params, this.defaultParams); instore.extlib.ui.grid.GridPanel.superclass.constructor.call(this, config); } Ext.extend(instore.extlib.ui.grid.GridPanel, Ext.grid.EditorGridPanel, { autoScroll: true, title: " ", headers: {}, needsReconfigure: true, showPaging: true, addHeader: function(name, value) { headers[name] = value; }, setHeaders: function(headers) { this.headers = headers; }, load: function(params, title, DWRgetMethod, isNew) { if(title != null && title != "") this.setTitle(title); var params = params || {}; if(isNew && params.newMeta == null) { params.start = params.start || this.defaultParams.start; params.sort = params.sort || this.defaultParams.sort; params.sortList = params.sortList || this.defaultParams.sortList; params.dir = params.dir || this.defaultParams.dir; params.newMeta = true; params.includedFields = params.includedFields || this.defaultParams.includedFields; params.excludedFields = params.excludedFields || this.defaultParams.includedFields; this.store.sortInfo = null; } Ext.apply(this.params, params) if(DWRgetMethod != null) { this.DWRgetMethod = DWRgetMethod; this.store.proxy.dwrFunction = eval(DWRgetMethod); } if(this.store.proxy.dwrFunction != null) { this.store.load(); } }, loadNew: function(params, title, DWRgetMethod) { this.load(params, title, DWRgetMethod, true); }, getRenderer: function(field, store) { if(field.renderType == "checkbox") { return function(val) { return ""; } } else if(field.renderType == "datefield") { return function(val) { return (val != null && val != "" && val.dateFormat ) ? val.dateFormat('d/m/Y') : val; } } else return function(val) { return val; } }, getField: function(fieldConfig) { if(fieldConfig.header == undefined) fieldConfig.header = (this.headers[fieldConfig.name] == null) ? fieldConfig.name : this.headers[fieldConfig.name]; else if(this.headers[fieldConfig.header] != null) fieldConfig.header = this.headers[fieldConfig.header]; if(fieldConfig.header !== undefined ) { if(!fieldConfig.hidden) fieldConfig.width = (fieldConfig.width == null || (fieldConfig.width < fieldConfig.header.length)) ? fieldConfig.header.length * 10 : fieldConfig.width * 10; if(typeof fieldConfig.dataIndex == "undefined") fieldConfig.dataIndex = fieldConfig.name; if(typeof fieldConfig.renderer == "string") fieldConfig.renderer = Ext.util.Format[fieldConfig.renderer]; fieldConfig.sortable = true; return fieldConfig; } else return null }, loadData: function(store, meta) { var c = 0; var config = []; var lookup = {}; Ext.each(meta.fields, function(fieldConfig) { var field = this.getField(fieldConfig); if(field) { config.push(field); lookup[field.id] = field; } }.createDelegate(this)); this.colModel = new Ext.grid.ColumnModel(config); this.needsReconfigure = true; this.fireEvent("afterloaddata", this, store); }, reconfigure: function(store, colModel) { this.getSelectionModel().clearSelections(); Ext.each(colModel.config, function(col) { col.renderer = this.getRenderer(col, store); }.createDelegate(this)); instore.extlib.ui.grid.GridPanel.superclass.reconfigure.call(this, store, colModel); this.needsReconfigure = false; }, initComponent : function() { this.addEvents("afterloaddata"); var proxy = new Ext.ux.data.DWRProxy({ dwrFunction: eval(this.DWRgetMethod), listeners: { 'beforeload': function(dataProxy, params) { params.start = (params.start == null) ? this.params.start : params.start; params.limit = (params.limit == null) ? this.params.limit : params.limit; params.sort = (params.sort == null) ? this.params.sort : params.sort; params.sortList = (params.sortList == null) ? this.params.sortList : params.sortList; params.dir = (params.dir == null) ? this.params.dir : params.dir; params.newMeta = (params.newMeta == null) ? this.params.newMeta : params.newMeta; params.includedFields = (params.includedFields == null) ? this.params.includedFields : params.includedFields; params.excludedFields = (params.excludedFields == null) ? this.params.excludedFields : params.excludedFields; Ext.apply(this.params, params); params[dataProxy.loadArgsKey] = [this.params]; }.createDelegate(this), "load": function() { if(this.needsReconfigure) this.reconfigure(this.store, this.getColumnModel()); }.createDelegate(this) } }); this.store = new Ext.data.Store({ proxy: proxy, reader: new Ext.data.JsonReader(), remoteSort:true, listeners: { "load": function() { this.params.newMeta = false; }.createDelegate(this) } }); if(this.columns && (this.columns instanceof Array)){ this.colModel = new Ext.grid.ColumnModel(this.columns); delete this.columns; } // Create a empty colModel if none given if(!this.colModel) this.colModel = new Ext.grid.ColumnModel([]); if(this.showPaging) { this.bbar = new Ext.PagingToolbar({ pageSize: this.params.limit, store: this.store, displayInfo: true, displayMsg: instore.extlib.ui.Messages.grid.paging.displayInfo, emptyMsg: instore.extlib.ui.Messages.grid.emptyMsg, listeners: { "render": function() { this.loading.hide() }} }); } instore.extlib.ui.grid.GridPanel.superclass.initComponent.call(this); // register to the store's metachange event if(this.store) this.store.on("metachange", this.loadData, this); this.on('beforerender', function(grid) { grid.selModel = new Ext.grid.RowSelectionModel({}) }); } });