Implement updating just the affected nm row with egw_refresh()

This commit is contained in:
Nathan Gray 2013-02-14 11:25:24 +00:00
parent a3647e1b00
commit 298309074e
3 changed files with 45 additions and 16 deletions

View File

@ -218,6 +218,7 @@ class etemplate_widget_nextmatch extends etemplate_widget
if (($row_id = $value['row_id']) && $queriedRange['refresh'])
{
$value['col_filter'][$row_id] = $queriedRange['refresh'];
$value['csv_export'] = 'refresh';
}
$rows = $result['data'] = $result['order'] = array();
$result['total'] = self::call_get_rows($value, $rows, $result['readonlys']);
@ -227,10 +228,10 @@ class etemplate_widget_nextmatch extends etemplate_widget
$row_modified = $value['row_modified'];
$is_parent = $value['is_parent'];
$kUkey = false;
foreach($rows as $n => $row)
{
$kUkey = false;
if (is_int($n) && $row)
{
if (!isset($row[$row_id])) unset($row_id); // unset default row_id of 'id', if not used
@ -267,7 +268,9 @@ class etemplate_widget_nextmatch extends etemplate_widget
{
foreach($knownUids as $uid)
{
$result['data'][$uid] = null;
// Just don't send it back for now
unset($result['data'][$uid]);
//$result['data'][$uid] = null;
}
}
/*else

View File

@ -460,7 +460,9 @@ var et2_dataview_controller = Class.extend({
},
/**
*
* Called by the data source when the data changes
*
* @param _data Object|null New data, or null. Null will remove the row.
*/
_dataCallback: function (_data) {
// Set the "hasData" flag
@ -473,6 +475,13 @@ var et2_dataview_controller = Class.extend({
// Remove everything from the current row
this.entry.row.clear();
// If there's no data, stop
if(typeof _data == "undefined" || _data == null)
{
this._destroyCallback();
return;
}
// Fill the row DOM Node with data
this.self._rowCallback.call(
this.self._context,

View File

@ -480,7 +480,7 @@ etemplate2.prototype.getValues = function(_root)
* @see jsapi.egw_refresh()
* @see egw_fw.egw_refresh()
*/
etemplate2.prototype.refresh = function(msg, id, type)
etemplate2.prototype.refresh = function(msg, app, id, type)
{
// We use et2_baseWidget in case the app uses something like HTML instead of label
var msg_widget = this.widgetContainer.getWidgetById("msg");
@ -494,18 +494,35 @@ etemplate2.prototype.refresh = function(msg, id, type)
$j(msg_widget.getDOMNode()).parents().show();
}
this.widgetContainer.iterateOver(function(_widget) {
// TODO: This is not quite right - will restrict to just this one row
/*
if(_widget.options.settings && _widget.options.settings.row_id)
{
_widget.activeFilters[_widget.options.settings.row_id] = id;
}
*/
// Trigger refresh
_widget.applyFilters();
}, this, et2_nextmatch);
// Use jsapi data module to update
var uid = app + "::" + id;
var update = false;
switch(type)
{
case "update":
if(!egw(app).dataRefreshUID(uid))
{
// Could not update just that row
this.widgetContainer.iterateOver(function(_widget) {
// Trigger refresh
_widget.applyFilters();
}, this, et2_nextmatch);
}
break;
case "delete":
// Blank the row
egw().dataStoreUID(uid,null);
// Stop caring about this ID
egw().dataUnregisterUID(uid);
break;
case "add":
default:
this.widgetContainer.iterateOver(function(_widget) {
// Trigger refresh
_widget.applyFilters();
}, this, et2_nextmatch);
break;
}
}
// Some static things to make getting into widget context a little easier //