From a5b56e5498df7c07b34909b4f26a2907e78084fe Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Mon, 27 May 2019 12:18:31 +0000 Subject: [PATCH] [FIX] lunch: remove flickering of lunch widget closes odoo/odoo#33685 Signed-off-by: Pierre Paridans --- .../static/src/js/lunch_kanban_controller.js | 7 +-- .../lunch/static/tests/lunch_kanban_tests.js | 48 ++++++++++++++++++- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/addons/lunch/static/src/js/lunch_kanban_controller.js b/addons/lunch/static/src/js/lunch_kanban_controller.js index 5545d926be3..5505ad3874c 100644 --- a/addons/lunch/static/src/js/lunch_kanban_controller.js +++ b/addons/lunch/static/src/js/lunch_kanban_controller.js @@ -77,13 +77,14 @@ var LunchKanbanController = KanbanController.extend({ */ _renderLunchKanbanWidget: function () { var self = this; - if (this.widget) { - this.widget.destroy(); - } + var oldWidget = this.widget; this.widgetData.wallet = parseFloat(this.widgetData.wallet).toFixed(2); this.widget = new LunchKanbanWidget(this, _.extend(this.widgetData, {edit: this.editMode})); return this.widget.appendTo(document.createDocumentFragment()).then(function () { self.$('.o_lunch_kanban').prepend(self.widget.$el); + if (oldWidget) { + oldWidget.destroy(); + } }); }, _showPaymentDialog: function (title) { diff --git a/addons/lunch/static/tests/lunch_kanban_tests.js b/addons/lunch/static/tests/lunch_kanban_tests.js index 571b11ed52e..ed34dddca76 100644 --- a/addons/lunch/static/tests/lunch_kanban_tests.js +++ b/addons/lunch/static/tests/lunch_kanban_tests.js @@ -128,6 +128,53 @@ QUnit.module('LunchKanbanView', { kanban.destroy(); }); + QUnit.test('no flickering at reload', function (assert) { + assert.expect(2); + + const self = this; + let infosProm = $.when(); + const kanban = createLunchKanbanView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: ` + + + +
+
+
+
+ `, + mockRPC: function (route, args) { + if (route === '/lunch/user_location_get') { + return $.when(self.data['lunch.location'].records[0].id); + } + if (route === '/lunch/infos') { + return $.when(self.regularInfos); + } + var result = this._super.apply(this, arguments); + if (args.method === 'xmlid_to_res_id') { + // delay the rendering of the lunch widget + return infosProm.then(_.constant(result)); + } + return result; + }, + }); + + infosProm = $.Deferred(); + kanban.reload(); + + assert.strictEqual(kanban.$('.o_lunch_widget').length, 1, + "old widget should still be present"); + + infosProm.resolve(); + + assert.strictEqual(kanban.$('.o_lunch_widget').length, 1); + + kanban.destroy(); + }); + QUnit.module('LunchKanbanWidget', function () { QUnit.test('empty cart', function (assert) { @@ -814,7 +861,6 @@ QUnit.module('LunchKanbanView', { kanban.destroy(); }); - }); });