From d409ab6f32a5f827bfd47325c80a1f8939836f0f Mon Sep 17 00:00:00 2001 From: Nicolas Lempereur Date: Tue, 7 Aug 2018 13:37:29 +0200 Subject: [FIX] web: open group in list => keep line selection You: - open a grouping in a list view - check a line of this grouping - open another grouping => all checkbox are unchecked With this commit, 0982ceaa is improved so the selection is only reset when the list has been reloaded. opw-1865736 closes #26213 --- .../static/src/js/views/list/list_controller.js | 24 +++++++++++++++++++--- .../web/static/src/js/views/list/list_renderer.js | 6 ++++-- addons/web/static/src/js/views/list/list_view.js | 3 +++ 3 files changed, 28 insertions(+), 5 deletions(-) (limited to 'addons/web/static/src/js/views') diff --git a/addons/web/static/src/js/views/list/list_controller.js b/addons/web/static/src/js/views/list/list_controller.js index 982d5456bca..02ee76bf919 100644 --- a/addons/web/static/src/js/views/list/list_controller.js +++ b/addons/web/static/src/js/views/list/list_controller.js @@ -42,7 +42,7 @@ var ListController = BasicController.extend({ this.toolbarActions = params.toolbarActions || {}; this.editable = params.editable; this.noLeaf = params.noLeaf; - this.selectedRecords = []; // there is no selected record by default + this.selectedRecords = params.selectedRecords || []; }, //-------------------------------------------------------------------------- @@ -163,6 +163,25 @@ var ListController = BasicController.extend({ this._toggleSidebar(); } }, + /** + * Overrides to update the list of selected records + * + * @override + */ + update: function (params, options) { + var self = this; + if (options && options.keepSelection) { + // filter out removed records from selection + var res_ids = this.model.get(this.handle).res_ids; + this.selectedRecords = _.filter(this.selectedRecords, function (id) { + return _.contains(res_ids, self.model.get(id).res_id); + }); + } else { + this.selectedRecords = []; + } + params.selectedRecords = this.selectedRecords; + return this._super.apply(this, arguments); + }, //-------------------------------------------------------------------------- // Private @@ -298,7 +317,6 @@ var ListController = BasicController.extend({ * @returns {Deferred} */ _update: function () { - this.selectedRecords = []; this._toggleSidebar(); return this._super.apply(this, arguments); }, @@ -501,7 +519,7 @@ var ListController = BasicController.extend({ _onToggleGroup: function (event) { this.model .toggleGroup(event.data.group.id) - .then(this.update.bind(this, {}, {reload: false})); + .then(this.update.bind(this, {}, {keepSelection: true, reload: false})); }, }); diff --git a/addons/web/static/src/js/views/list/list_renderer.js b/addons/web/static/src/js/views/list/list_renderer.js index 32ff58acd02..2bb1dece89b 100644 --- a/addons/web/static/src/js/views/list/list_renderer.js +++ b/addons/web/static/src/js/views/list/list_renderer.js @@ -58,7 +58,7 @@ var ListRenderer = BasicRenderer.extend({ return py.parse(py.tokenize(value)); }).value(); this.hasSelectors = params.hasSelectors; - this.selection = []; + this.selection = params.selectedRecords || []; this.pagers = []; // instantiated pagers (only for grouped lists) this.editable = params.editable; }, @@ -72,7 +72,9 @@ var ListRenderer = BasicRenderer.extend({ */ updateState: function (state, params) { this._processColumns(params.columnInvisibleFields || {}); - this.selection = []; + if (params.selectedRecords) { + this.selection = params.selectedRecords; + } return this._super.apply(this, arguments); }, diff --git a/addons/web/static/src/js/views/list/list_view.js b/addons/web/static/src/js/views/list/list_view.js index 8a989dad35e..f5e23bcbcb0 100644 --- a/addons/web/static/src/js/views/list/list_view.js +++ b/addons/web/static/src/js/views/list/list_view.js @@ -35,6 +35,7 @@ var ListView = BasicView.extend({ */ init: function (viewInfo, params) { this._super.apply(this, arguments); + var selectedRecords = []; // there is no selected records by default var arch = viewInfo.arch; var mode = arch.attrs.editable && !params.readonly ? "edit" : "readonly"; @@ -44,11 +45,13 @@ var ListView = BasicView.extend({ this.controllerParams.toolbarActions = viewInfo.toolbar; this.controllerParams.noLeaf = !!this.loadParams.context.group_by_no_leaf; this.controllerParams.mode = mode; + this.controllerParams.selectedRecords = selectedRecords; this.rendererParams.arch = arch; this.rendererParams.hasSelectors = 'hasSelectors' in params ? params.hasSelectors : true; this.rendererParams.editable = params.readonly ? false : arch.attrs.editable; + this.rendererParams.selectedRecords = selectedRecords; this.loadParams.limit = this.loadParams.limit || 80; this.loadParams.type = 'list'; -- cgit v1.2.3 From 634de21b76b925f2c2624a8c5c8ec9d3e9d9540b Mon Sep 17 00:00:00 2001 From: Adrien Dieudonne Date: Fri, 17 Aug 2018 15:34:04 +0200 Subject: [FIX] web: graph_renderer: check graph data before rendering Before this commit, we had two different errors when data was unavailable: The first one is generated by Odoo: "No data to display, try to[...]" The second one is generated by nvd3: "No Data Available". We always want the same message. So now, we always make some checks before rendering the graph by calling _render. --- addons/web/static/src/js/views/graph/graph_renderer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'addons/web/static/src/js/views') diff --git a/addons/web/static/src/js/views/graph/graph_renderer.js b/addons/web/static/src/js/views/graph/graph_renderer.js index 1fbd6572a9a..da5709a6261 100644 --- a/addons/web/static/src/js/views/graph/graph_renderer.js +++ b/addons/web/static/src/js/views/graph/graph_renderer.js @@ -56,7 +56,7 @@ return AbstractRenderer.extend({ on_attach_callback: function () { this._super.apply(this, arguments); this.isInDOM = true; - this._renderGraph(); + this._render(); }, /** * @override -- cgit v1.2.3