From 7b0193279ad024d7f9ac9429fdf06c96cc5ca203 Mon Sep 17 00:00:00 2001 From: "Michael Mattiello (mcm)" Date: Fri, 11 Jun 2021 14:04:44 +0000 Subject: [PATCH] [FIX] web: add fields in right order in calendar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before this commit, fields in calendar popover were added to the $fieldsList after they were appended but appending is async and so fields could be disordered. Now, we add fields before the append to have the right order. closes odoo/odoo#72262 X-original-commit: da1b85d2fdff85bee35d183a8ee4faa0897dc1b4 Signed-off-by: Aaron Bohy (aab) Signed-off-by: Michaƫl Mattiello --- .../js/views/calendar/calendar_popover.js | 5 +- .../tests/legacy/views/calendar_tests.js | 49 +++++++++++++++++++ 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/legacy/js/views/calendar/calendar_popover.js b/addons/web/static/src/legacy/js/views/calendar/calendar_popover.js index 115896133de..12d6c56e275 100644 --- a/addons/web/static/src/legacy/js/views/calendar/calendar_popover.js +++ b/addons/web/static/src/legacy/js/views/calendar/calendar_popover.js @@ -216,9 +216,8 @@ var CalendarPopover = Widget.extend(WidgetAdapterMixin, StandaloneFieldManagerMi } else { def = fieldWidget.mount($fieldContainer[0]); } - defs.push(def.then(function () { - self.$fieldsList.push($field); - })); + self.$fieldsList.push($field); + defs.push(def); }); return Promise.all(defs); }); diff --git a/addons/web/static/tests/legacy/views/calendar_tests.js b/addons/web/static/tests/legacy/views/calendar_tests.js index 3d0d37a5105..ecda3b415f2 100644 --- a/addons/web/static/tests/legacy/views/calendar_tests.js +++ b/addons/web/static/tests/legacy/views/calendar_tests.js @@ -1,6 +1,7 @@ odoo.define('web.calendar_tests', function (require) { "use strict"; +const AbstractField = require('web.AbstractField'); var AbstractStorageService = require('web.AbstractStorageService'); const BasicModel = require('web.BasicModel'); var CalendarView = require('web.CalendarView'); @@ -4080,6 +4081,54 @@ QUnit.module('Views', { testUtils.mock.unpatch(CalendarRenderer); }); + + QUnit.test("fields are added in the right order in popover", async function (assert) { + assert.expect(3); + + const def = testUtils.makeTestPromise(); + const DeferredWidget = AbstractField.extend({ + async start() { + await this._super(...arguments); + await def; + } + }); + fieldRegistry.add("deferred_widget", DeferredWidget); + + const calendar = await createCalendarView({ + View: CalendarView, + model: 'event', + data: this.data, + arch: + ` + + + `, + archs: archs, + viewOptions: { + initialDate: initialDate, + }, + }); + + await testUtils.dom.click(calendar.$(`[data-event-id="4"]`)); + assert.containsNone(calendar, ".o_cw_popover"); + + def.resolve(); + await testUtils.nextTick(); + assert.containsOnce(calendar, ".o_cw_popover"); + + assert.strictEqual( + calendar.$(".o_cw_popover .o_cw_popover_fields_secondary").text(), + "user : name : event 4" + ); + + calendar.destroy(); + delete fieldRegistry.map.deferred_widget; + }); }); });