diff options
Diffstat (limited to 'addons/web/static/src')
4 files changed, 29 insertions, 6 deletions
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 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 ae1a8f7305b..af453fbba36 100644 --- a/addons/web/static/src/js/views/list/list_controller.js +++ b/addons/web/static/src/js/views/list/list_controller.js @@ -43,7 +43,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 || []; }, //-------------------------------------------------------------------------- @@ -177,6 +177,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 @@ -339,7 +358,6 @@ var ListController = BasicController.extend({ * @returns {Deferred} */ _update: function () { - this.selectedRecords = []; this._toggleSidebar(); return this._super.apply(this, arguments); }, @@ -544,7 +562,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 bf206eae32c..76ad3a82063 100644 --- a/addons/web/static/src/js/views/list/list_renderer.js +++ b/addons/web/static/src/js/views/list/list_renderer.js @@ -60,7 +60,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; }, @@ -81,7 +81,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 3082312e770..bc80017743b 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 mode = this.arch.attrs.editable && !params.readonly ? "edit" : "readonly"; @@ -43,11 +44,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 = this.arch; this.rendererParams.hasSelectors = 'hasSelectors' in params ? params.hasSelectors : true; this.rendererParams.editable = params.readonly ? false : this.arch.attrs.editable; + this.rendererParams.selectedRecords = selectedRecords; this.loadParams.limit = this.loadParams.limit || 80; this.loadParams.type = 'list'; |
