forked from extern/egroupware
Change addressbook group / template on client side, not server side
Fixes the issue where the nextmatch_controller is part of the context for the request, but the first thing set_template() does when the server tells the nextmatch to change the template is destroy the controller. This means that when the data is parsed, the context is missing or damaged.
This commit is contained in:
parent
20cd1cf802
commit
ee472bb5a9
@ -933,7 +933,7 @@ class addressbook_ui extends addressbook_bo
|
|||||||
$query['actions'] = $this->get_actions($query['col_filter']['tid']);
|
$query['actions'] = $this->get_actions($query['col_filter']['tid']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$query['template'] = $query['grouped_view'] == 'duplicates' ? 'addressbook.index.duplicate_rows' : 'addressbook.index.org_rows';
|
$template = $query['grouped_view'] == 'duplicates' ? 'addressbook.index.duplicate_rows' : 'addressbook.index.org_rows';
|
||||||
|
|
||||||
if ($query['advanced_search'])
|
if ($query['advanced_search'])
|
||||||
{
|
{
|
||||||
@ -945,7 +945,7 @@ class addressbook_ui extends addressbook_bo
|
|||||||
$query['search'] = $query['advanced_search'];
|
$query['search'] = $query['advanced_search'];
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($query['template'])
|
switch ($template)
|
||||||
{
|
{
|
||||||
case 'addressbook.index.org_rows':
|
case 'addressbook.index.org_rows':
|
||||||
if ($query['order'] != 'org_name')
|
if ($query['order'] != 'org_name')
|
||||||
@ -1684,19 +1684,9 @@ class addressbook_ui extends addressbook_bo
|
|||||||
}
|
}
|
||||||
else // contacts view
|
else // contacts view
|
||||||
{
|
{
|
||||||
if ($query['sitemgr_display'])
|
|
||||||
{
|
|
||||||
$query['template'] = $query['sitemgr_display'].'.rows';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$query['template'] = 'addressbook.index.rows';
|
|
||||||
}
|
|
||||||
if($query['col_filter']['parent_id'])
|
if($query['col_filter']['parent_id'])
|
||||||
{
|
{
|
||||||
$query['grouped_view'] = $query['col_filter']['parent_id'];
|
$query['grouped_view'] = $query['col_filter']['parent_id'];
|
||||||
$query['template'] = strpos($query['grouped_view'], 'duplicate') === 0 ?
|
|
||||||
'addressbook.index.duplicate_rows' : 'addressbook.index.org_rows';
|
|
||||||
}
|
}
|
||||||
// Query doesn't like parent_id
|
// Query doesn't like parent_id
|
||||||
unset($query['col_filter']['parent_id']);
|
unset($query['col_filter']['parent_id']);
|
||||||
|
@ -30,6 +30,7 @@ require("jqueryui");
|
|||||||
require("../jsapi/egw_global");
|
require("../jsapi/egw_global");
|
||||||
require("../etemplate/et2_types");
|
require("../etemplate/et2_types");
|
||||||
var egw_app_1 = require("../../api/js/jsapi/egw_app");
|
var egw_app_1 = require("../../api/js/jsapi/egw_app");
|
||||||
|
var etemplate2_1 = require("../../api/js/etemplate/etemplate2");
|
||||||
/**
|
/**
|
||||||
* UI for Addressbook
|
* UI for Addressbook
|
||||||
*
|
*
|
||||||
@ -123,7 +124,7 @@ var AddressbookApp = /** @class */ (function (_super) {
|
|||||||
if (_app === 'addressbook' && state && state.type && state.type === 'view' && state.id === _id) {
|
if (_app === 'addressbook' && state && state.type && state.type === 'view' && state.id === _id) {
|
||||||
var content = egw.dataGetUIDdata('addressbook::' + _id);
|
var content = egw.dataGetUIDdata('addressbook::' + _id);
|
||||||
if (content.data) {
|
if (content.data) {
|
||||||
var view = etemplate2.getById('addressbook-view');
|
var view = etemplate2_1.etemplate2.getById('addressbook-view');
|
||||||
if (view) {
|
if (view) {
|
||||||
view.widgetContainer._children[0].set_value({ content: content.data });
|
view.widgetContainer._children[0].set_value({ content: content.data });
|
||||||
}
|
}
|
||||||
@ -144,7 +145,7 @@ var AddressbookApp = /** @class */ (function (_super) {
|
|||||||
else if (!content) {
|
else if (!content) {
|
||||||
// No data on the event, we'll have to reload if calendar column is visible
|
// No data on the event, we'll have to reload if calendar column is visible
|
||||||
// to get the updated information
|
// to get the updated information
|
||||||
var nm = etemplate2.getById('addressbook-index').widgetContainer.getWidgetById('nm');
|
var nm = etemplate2_1.etemplate2.getById('addressbook-index').widgetContainer.getWidgetById('nm');
|
||||||
var pref = nm ? nm._getPreferences() : false;
|
var pref = nm ? nm._getPreferences() : false;
|
||||||
if (pref && pref.visible.indexOf('calendar_calendar') > -1) {
|
if (pref && pref.visible.indexOf('calendar_calendar') > -1) {
|
||||||
nm.refresh(null, 'update');
|
nm.refresh(null, 'update');
|
||||||
@ -153,6 +154,38 @@ var AddressbookApp = /** @class */ (function (_super) {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
/**
|
||||||
|
* Change handler for contact / org selectbox
|
||||||
|
*
|
||||||
|
* @param node
|
||||||
|
* @param widget
|
||||||
|
*/
|
||||||
|
AddressbookApp.prototype.change_grouped_view = function (node, widget) {
|
||||||
|
var nm = etemplate2_1.etemplate2.getById('addressbook-index').widgetContainer.getDOMWidgetById('nm');
|
||||||
|
var template = "addressbook.index.rows";
|
||||||
|
var value = {};
|
||||||
|
if (nm.activeFilters.sitemgr_display) {
|
||||||
|
template = nm.activeFilters.sitemgr_display + '.rows';
|
||||||
|
}
|
||||||
|
else if (widget.getValue().indexOf("org_name") == 0) {
|
||||||
|
template = "addressbook.index.org_rows";
|
||||||
|
}
|
||||||
|
else if (widget.getValue().indexOf('duplicate') === 0) {
|
||||||
|
template = 'addressbook.index.duplicate_rows';
|
||||||
|
}
|
||||||
|
if (nm.activeFilters.col_filter.parent_id) {
|
||||||
|
template = widget.getValue().indexOf('duplicate') === 0 ?
|
||||||
|
'addressbook.index.duplicate_rows' : 'addressbook.index.org_rows';
|
||||||
|
}
|
||||||
|
var promise = nm.set_template(template);
|
||||||
|
value[widget.id] = widget.getValue();
|
||||||
|
if (promise) {
|
||||||
|
jQuery.when.apply(null, promise).done(function () {
|
||||||
|
nm.applyFilters(value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return !promise;
|
||||||
|
};
|
||||||
/**
|
/**
|
||||||
* Open CRM view
|
* Open CRM view
|
||||||
*
|
*
|
||||||
@ -178,7 +211,7 @@ var AddressbookApp = /** @class */ (function (_super) {
|
|||||||
*/
|
*/
|
||||||
AddressbookApp.prototype.view_set_list = function (filter) {
|
AddressbookApp.prototype.view_set_list = function (filter) {
|
||||||
// Find the infolog list
|
// Find the infolog list
|
||||||
var list = etemplate2.getById(jQuery(this.et2.getInstanceManager().DOMContainer).nextAll('.et2_container').attr('id'));
|
var list = etemplate2_1.etemplate2.getById(jQuery(this.et2.getInstanceManager().DOMContainer).nextAll('.et2_container').attr('id'));
|
||||||
var nm = list ? list.widgetContainer.getWidgetById('nm') : null;
|
var nm = list ? list.widgetContainer.getWidgetById('nm') : null;
|
||||||
if (nm) {
|
if (nm) {
|
||||||
nm.applyFilters(filter);
|
nm.applyFilters(filter);
|
||||||
@ -810,7 +843,7 @@ var AddressbookApp = /** @class */ (function (_super) {
|
|||||||
var state = _super.prototype.getState.call(this);
|
var state = _super.prototype.getState.call(this);
|
||||||
if (jQuery.isEmptyObject(state)) {
|
if (jQuery.isEmptyObject(state)) {
|
||||||
// Not in a list view. Try to find contact ID
|
// Not in a list view. Try to find contact ID
|
||||||
var etemplates = etemplate2.getByApplication('addressbook');
|
var etemplates = etemplate2_1.etemplate2.getByApplication('addressbook');
|
||||||
for (var i = 0; i < etemplates.length; i++) {
|
for (var i = 0; i < etemplates.length; i++) {
|
||||||
var content = etemplates[i].widgetContainer.getArrayMgr("content");
|
var content = etemplates[i].widgetContainer.getArrayMgr("content");
|
||||||
if (content && content.getEntry('id')) {
|
if (content && content.getEntry('id')) {
|
||||||
@ -854,7 +887,7 @@ var AddressbookApp = /** @class */ (function (_super) {
|
|||||||
// Clear advanced search, which is in session and etemplate
|
// Clear advanced search, which is in session and etemplate
|
||||||
egw.json('addressbook.addressbook_ui.ajax_clear_advanced_search', [], function () {
|
egw.json('addressbook.addressbook_ui.ajax_clear_advanced_search', [], function () {
|
||||||
framework.setWebsiteTitle('addressbook', '');
|
framework.setWebsiteTitle('addressbook', '');
|
||||||
var index = etemplate2.getById('addressbook-index');
|
var index = etemplate2_1.etemplate2.getById('addressbook-index');
|
||||||
if (index && index.widgetContainer) {
|
if (index && index.widgetContainer) {
|
||||||
var nm = index.widgetContainer.getWidgetById('nm');
|
var nm = index.widgetContainer.getWidgetById('nm');
|
||||||
if (nm) {
|
if (nm) {
|
||||||
@ -869,7 +902,7 @@ var AddressbookApp = /** @class */ (function (_super) {
|
|||||||
else if (state.state.grouped_view) {
|
else if (state.state.grouped_view) {
|
||||||
// Deal with grouped views that are not valid (not in list of options)
|
// Deal with grouped views that are not valid (not in list of options)
|
||||||
// by faking viewing that organisation
|
// by faking viewing that organisation
|
||||||
var index = etemplate2.getById('addressbook-index');
|
var index = etemplate2_1.etemplate2.getById('addressbook-index');
|
||||||
if (index && index.widgetContainer) {
|
if (index && index.widgetContainer) {
|
||||||
var grouped = index.widgetContainer.getWidgetById('grouped_view');
|
var grouped = index.widgetContainer.getWidgetById('grouped_view');
|
||||||
var options;
|
var options;
|
||||||
|
@ -18,6 +18,7 @@ import '../jsapi/egw_global';
|
|||||||
import '../etemplate/et2_types';
|
import '../etemplate/et2_types';
|
||||||
|
|
||||||
import {EgwApp} from '../../api/js/jsapi/egw_app';
|
import {EgwApp} from '../../api/js/jsapi/egw_app';
|
||||||
|
import {etemplate2} from "../../api/js/etemplate/etemplate2";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UI for Addressbook
|
* UI for Addressbook
|
||||||
@ -167,6 +168,46 @@ class AddressbookApp extends EgwApp
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change handler for contact / org selectbox
|
||||||
|
*
|
||||||
|
* @param node
|
||||||
|
* @param widget
|
||||||
|
*/
|
||||||
|
change_grouped_view(node, widget)
|
||||||
|
{
|
||||||
|
let nm = etemplate2.getById('addressbook-index').widgetContainer.getDOMWidgetById('nm');
|
||||||
|
let template = "addressbook.index.rows";
|
||||||
|
let value = {};
|
||||||
|
|
||||||
|
if(nm.activeFilters.sitemgr_display)
|
||||||
|
{
|
||||||
|
template = nm.activeFilters.sitemgr_display + '.rows';
|
||||||
|
}
|
||||||
|
else if(widget.getValue().indexOf("org_name") == 0)
|
||||||
|
{
|
||||||
|
template = "addressbook.index.org_rows";
|
||||||
|
}
|
||||||
|
else if(widget.getValue().indexOf('duplicate') === 0)
|
||||||
|
{
|
||||||
|
template = 'addressbook.index.duplicate_rows';
|
||||||
|
}
|
||||||
|
if(nm.activeFilters.col_filter.parent_id)
|
||||||
|
{
|
||||||
|
template = widget.getValue().indexOf('duplicate') === 0 ?
|
||||||
|
'addressbook.index.duplicate_rows' : 'addressbook.index.org_rows';
|
||||||
|
}
|
||||||
|
let promise = nm.set_template(template)
|
||||||
|
value[widget.id] = widget.getValue();
|
||||||
|
if(promise)
|
||||||
|
{
|
||||||
|
jQuery.when.apply(null, promise).done(function ()
|
||||||
|
{
|
||||||
|
nm.applyFilters(value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return !promise;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Open CRM view
|
* Open CRM view
|
||||||
*
|
*
|
||||||
|
@ -175,7 +175,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<template id="addressbook.index.row" template="" lang="" group="0" version="1.3.001">
|
<template id="addressbook.index.row" template="" lang="" group="0" version="1.3.001">
|
||||||
<buttononly align="right" statustext="Advanced search" image="advanced-search" background_image="1" id="advanced-search" onclick="egw(window).openPopup(egw::link('/index.php','menuaction=addressbook.addressbook_ui.search'),'870','610','_blank','addressbook',null,true); return false;"/>
|
<buttononly align="right" statustext="Advanced search" image="advanced-search" background_image="1" id="advanced-search" onclick="egw(window).openPopup(egw::link('/index.php','menuaction=addressbook.addressbook_ui.search'),'870','610','_blank','addressbook',null,true); return false;"/>
|
||||||
<select statustext="Select a view" id="grouped_view" no_lang="1" rows="1" empty_label="All contacts"/>
|
<select statustext="Select a view" id="grouped_view" no_lang="1" rows="1" empty_label="All contacts" onchange="app.addressbook.change_grouped_view"/>
|
||||||
</template>
|
</template>
|
||||||
<template id="addressbook.index.right" template="" lang="" group="0" version="1.7.001">
|
<template id="addressbook.index.right" template="" lang="" group="0" version="1.7.001">
|
||||||
<select align="right" id="col_filter[tid]" empty_label="All types"/>
|
<select align="right" id="col_filter[tid]" empty_label="All types"/>
|
||||||
|
@ -1564,6 +1564,7 @@ var et2_nextmatch = /** @class */ (function (_super) {
|
|||||||
this.dataview.destroy();
|
this.dataview.destroy();
|
||||||
this.rowProvider.destroy();
|
this.rowProvider.destroy();
|
||||||
this.controller.destroy();
|
this.controller.destroy();
|
||||||
|
this.controller = null;
|
||||||
// Free any children from previous template
|
// Free any children from previous template
|
||||||
// They may get left behind because of how detached nodes are processed
|
// They may get left behind because of how detached nodes are processed
|
||||||
// We don't use iterateOver because it checks sub-children
|
// We don't use iterateOver because it checks sub-children
|
||||||
@ -1639,6 +1640,7 @@ var et2_nextmatch = /** @class */ (function (_super) {
|
|||||||
this.dynheight.initialized = false;
|
this.dynheight.initialized = false;
|
||||||
this.resize();
|
this.resize();
|
||||||
}, this));
|
}, this));
|
||||||
|
return promise;
|
||||||
};
|
};
|
||||||
// Some accessors to match conventions
|
// Some accessors to match conventions
|
||||||
et2_nextmatch.prototype.set_hide_header = function (hide) {
|
et2_nextmatch.prototype.set_hide_header = function (hide) {
|
||||||
|
@ -2134,6 +2134,7 @@ export class et2_nextmatch extends et2_DOMWidget implements et2_IResizeable, et2
|
|||||||
this.dataview.destroy();
|
this.dataview.destroy();
|
||||||
this.rowProvider.destroy();
|
this.rowProvider.destroy();
|
||||||
this.controller.destroy();
|
this.controller.destroy();
|
||||||
|
this.controller = null;
|
||||||
|
|
||||||
// Free any children from previous template
|
// Free any children from previous template
|
||||||
// They may get left behind because of how detached nodes are processed
|
// They may get left behind because of how detached nodes are processed
|
||||||
@ -2228,6 +2229,7 @@ export class et2_nextmatch extends et2_DOMWidget implements et2_IResizeable, et2
|
|||||||
this.resize();
|
this.resize();
|
||||||
}, this)
|
}, this)
|
||||||
);
|
);
|
||||||
|
return promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Some accessors to match conventions
|
// Some accessors to match conventions
|
||||||
|
Loading…
Reference in New Issue
Block a user