partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

Ext.grid.plugin.Editing-associationSupport.js (3886B)


      1 /**
      2  * Overrides the editing plugin to support editing of associations.
      3  */
      4 Ext.define('PartKeepr.grid.plugin.Editing', {
      5     override: 'Ext.grid.plugin.Editing',
      6     extend: 'Ext.plugin.Abstract',
      7     alias: 'editing.editing',
      8 
      9     /**
     10      * @private
     11      * Collects all information necessary for any subclasses to perform their editing functions.
     12      * @param {Ext.data.Model/Number} record The record or record index to edit.
     13      * @param {Ext.grid.column.Column/Number} columnHeader The column of column index to edit.
     14      * @return {Ext.grid.CellContext/undefined} The editing context based upon the passed record and column
     15      */
     16     getEditingContext: function (record, columnHeader)
     17     {
     18         var me = this,
     19             grid = me.grid,
     20             colMgr = grid.visibleColumnManager,
     21             view,
     22             gridRow,
     23             rowIdx, colIdx,
     24             result,
     25             layoutView = me.grid.lockable ? me.grid : me.view;
     26 
     27         // The view must have had a layout to show the editor correctly, defer until that time.
     28         // In case a grid's startup code invokes editing immediately.
     29         if (!layoutView.componentLayoutCounter) {
     30             layoutView.on({
     31                 boxready: Ext.Function.bind(me.startEdit, me, [record, columnHeader]),
     32                 single: true
     33             });
     34             return;
     35         }
     36 
     37         // If disabled or grid collapsed, or view not truly visible, don't calculate a context - we cannot edit
     38         if (me.disabled || me.grid.collapsed || !me.grid.view.isVisible(true)) {
     39             return;
     40         }
     41 
     42         // They've asked to edit by column number.
     43         // Note that in a locked grid, the columns are enumerated in a unified set for this purpose.
     44         if (Ext.isNumber(columnHeader)) {
     45             columnHeader = colMgr.getHeaderAtIndex(columnHeader);
     46         }
     47 
     48         // No corresponding column. Possible if all columns have been moved to the other side of a lockable grid pair
     49         if (!columnHeader) {
     50             return;
     51         }
     52 
     53         // Coerce the column to the closest visible column
     54         if (columnHeader.hidden) {
     55             columnHeader = columnHeader.next(':not([hidden])') || columnHeader.prev(':not([hidden])');
     56         }
     57 
     58         // Navigate to the view and grid which the column header relates to.
     59         view = columnHeader.getView();
     60         grid = view.ownerCt;
     61 
     62         gridRow = view.getRow(record);
     63 
     64         // An intervening listener may have deleted the Record.
     65         if (!gridRow) {
     66             return;
     67         }
     68 
     69         colIdx = colMgr.getHeaderIndex(columnHeader);
     70 
     71         if (Ext.isNumber(record)) {
     72             // look up record if numeric row index was passed
     73             rowIdx = record;
     74             record = view.getRecord(gridRow);
     75         } else {
     76             rowIdx = view.indexOf(gridRow);
     77         }
     78 
     79         // The record may be removed from the store but the view
     80         // not yet updated, so check it exists
     81         if (!record) {
     82             return;
     83         }
     84 
     85         // Create a new CellContext
     86         result = new Ext.grid.CellContext(view).setAll(view, rowIdx, colIdx, record, columnHeader);
     87 
     88         // Add extra Editing information
     89         result.grid = grid;
     90         result.store = view.dataSource;
     91         result.field = columnHeader.dataIndex;
     92 
     93         if (record.hasField(columnHeader.dataIndex)) {
     94             result.value = result.originalValue = record.get(columnHeader.dataIndex);
     95         } else {
     96             if (record.associations[columnHeader.dataIndex]) {
     97                 var getterName = record.associations[columnHeader.dataIndex].getterName;
     98 
     99                 result.value = result.originalValue = record[getterName]();
    100             }
    101         }
    102 
    103         result.row = gridRow;
    104         result.node = view.getNode(record);
    105         result.cell = view.getCellByPosition(result, true);
    106 
    107         return result;
    108     },
    109 });