mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-29 11:23:54 +01:00
Fix removing (delete) a row from nextmatch
- Fix broken destroy callback - Fix caching & actions to be removed - Fix always removing the last row also - Fix indexing so arrow keys work over sparse indexMap
This commit is contained in:
parent
0c2d8f87b9
commit
344a63b37c
@ -568,7 +568,10 @@ var et2_dataview_controller = Class.extend({
|
|||||||
// If there's no data, stop
|
// If there's no data, stop
|
||||||
if(typeof _data == "undefined" || _data == null)
|
if(typeof _data == "undefined" || _data == null)
|
||||||
{
|
{
|
||||||
this._destroyCallback();
|
this.self._destroyCallback.call(
|
||||||
|
this,
|
||||||
|
this.entry.row
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -632,6 +635,7 @@ var et2_dataview_controller = Class.extend({
|
|||||||
if (this.entry.row)
|
if (this.entry.row)
|
||||||
{
|
{
|
||||||
var tr = this.entry.row.getDOMNode();
|
var tr = this.entry.row.getDOMNode();
|
||||||
|
this.self._selectionMgr._updateState(this.entry.uid, EGW_AO_STATE_NORMAL)
|
||||||
this.self._selectionMgr.unregisterRow(this.entry.uid, tr);
|
this.self._selectionMgr.unregisterRow(this.entry.uid, tr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,6 +152,7 @@ var et2_dataview_selectionManager = Class.extend(
|
|||||||
if (!_noDelete
|
if (!_noDelete
|
||||||
&& this._registeredRows[_uid].state === EGW_AO_STATE_NORMAL)
|
&& this._registeredRows[_uid].state === EGW_AO_STATE_NORMAL)
|
||||||
{
|
{
|
||||||
|
delete this._indexMap[this._registeredRows[_uid].idx];
|
||||||
delete this._registeredRows[_uid];
|
delete this._registeredRows[_uid];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,8 +327,16 @@ var et2_dataview_selectionManager = Class.extend(
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getElementRelatively (_step) {
|
function getElementRelatively (_step) {
|
||||||
return getIndexAO(Math.max(0,
|
var count = self._total;
|
||||||
Math.min(self._total - 1, _entry.idx + _step)));
|
var element = null;
|
||||||
|
var idx = _entry.idx;
|
||||||
|
while(element == null && count > 0 && idx <= self._total)
|
||||||
|
{
|
||||||
|
count--;
|
||||||
|
element = getIndexAO(Math.max(0,
|
||||||
|
Math.min(self._total - 1, idx += _step)));
|
||||||
|
}
|
||||||
|
return element;
|
||||||
};
|
};
|
||||||
|
|
||||||
_entry.ao.getPrevious = function (_step) {
|
_entry.ao.getPrevious = function (_step) {
|
||||||
|
@ -456,14 +456,34 @@ var et2_nextmatch = et2_DOMWidget.extend([et2_IResizeable, et2_IInput],
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "delete":
|
case "delete":
|
||||||
|
// Record current & next index
|
||||||
|
var entry = this.controller._selectionMgr._getRegisteredRowsEntry(uid);
|
||||||
|
var next = entry.ao.getNext(1);
|
||||||
|
if(next == null || !next.id)
|
||||||
|
{
|
||||||
|
// No next, select previous
|
||||||
|
next = entry.ao.getPrevious(1);
|
||||||
|
}
|
||||||
|
// Select next row
|
||||||
|
if(next && next.id)
|
||||||
|
{
|
||||||
|
this.controller._selectionMgr._handleSelect(next.id);
|
||||||
|
}
|
||||||
|
|
||||||
// Blank the row
|
// Blank the row
|
||||||
this.egw().dataStoreUID(uid,null);
|
this.egw().dataStoreUID(uid,null);
|
||||||
// Stop caring about this ID
|
// Stop caring about this ID
|
||||||
this.egw().dataUnregisterUID(uid);
|
this.egw().dataUnregisterUID(uid);
|
||||||
// Update the count
|
// Update the count
|
||||||
this.options.settings.total -= 1;
|
this.options.settings.total -= 1;
|
||||||
// This triggers an invalidate, which may update the grid in needed
|
// This removes the last row (in addition), doesn't matter if that wasn't the right one,
|
||||||
this.dataview.grid.setTotalCount(this.options.settings.total);
|
// then triggers an invalidate, which may update the grid
|
||||||
|
// this.dataview.grid.setTotalCount(this.options.settings.total);
|
||||||
|
// Update directly instead
|
||||||
|
this.dataview.grid._total -= this.options.settings.total;
|
||||||
|
this.controller._selectionMgr._total = this.options.settings.total;
|
||||||
|
this.header.count_total.text(this.options.settings.total+"");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "edit":
|
case "edit":
|
||||||
case "add":
|
case "add":
|
||||||
@ -474,7 +494,7 @@ var et2_nextmatch = et2_DOMWidget.extend([et2_IResizeable, et2_IInput],
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Trigger an event so app code can act on it
|
// Trigger an event so app code can act on it
|
||||||
$j(this).triggerHandler("refresh",[this]);
|
$j(this).triggerHandler("refresh",[this,_row_ids,_type]);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user