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; + }); }); });