diff options
| -rw-r--r-- | addons/web/static/src/js/views/calendar/calendar_renderer.js | 14 | ||||
| -rw-r--r-- | addons/web/static/tests/views/calendar_tests.js | 39 |
2 files changed, 53 insertions, 0 deletions
diff --git a/addons/web/static/src/js/views/calendar/calendar_renderer.js b/addons/web/static/src/js/views/calendar/calendar_renderer.js index f01721a42bf..132a0493c67 100644 --- a/addons/web/static/src/js/views/calendar/calendar_renderer.js +++ b/addons/web/static/src/js/views/calendar/calendar_renderer.js @@ -209,6 +209,7 @@ return AbstractRenderer.extend({ // this.$el.height($(window).height() - this.$el.offset().top); this.calendar.render(); this._renderCalendar(); + window.addEventListener('click', this._onWindowClick.bind(this)); }, /** * Called when the field is detached from the DOM. @@ -216,6 +217,7 @@ return AbstractRenderer.extend({ on_detach_callback: function () { this._super(...arguments); this._isInDOM = false; + window.removeEventListener('click', this._onWindowClick); }, /** * @override @@ -399,6 +401,8 @@ return AbstractRenderer.extend({ self.trigger_up('updateRecord', event); }, eventClick: function (eventClickInfo) { + eventClickInfo.jsEvent.preventDefault(); + eventClickInfo.jsEvent.stopPropagation(); var eventData = eventClickInfo.event; self._unselectEvent(); $(self.calendarElement).find(_.str.sprintf('[data-event-id=%s]', eventData.id)).addClass('o_cw_custom_highlight'); @@ -963,6 +967,16 @@ return AbstractRenderer.extend({ }, /** * @private + * @param {MouseEvent} e + */ + _onWindowClick: function (e) { + const popover = this.el.querySelector('.o_cw_popover'); + if (popover && !popover.contains(e.target)) { + this._unselectEvent(); + } + }, + /** + * @private * @param {OdooEvent} event */ _onEditEvent: function (event) { diff --git a/addons/web/static/tests/views/calendar_tests.js b/addons/web/static/tests/views/calendar_tests.js index b9bd968b0fd..27dc1acd11f 100644 --- a/addons/web/static/tests/views/calendar_tests.js +++ b/addons/web/static/tests/views/calendar_tests.js @@ -3737,6 +3737,45 @@ QUnit.module('Views', { calendar.destroy(); }); + + QUnit.test('click outside the popup should close it', async function (assert) { + assert.expect(4); + + var calendar = await createCalendarView({ + View: CalendarView, + model: 'event', + data: this.data, + arch: + `<calendar + create="false" + event_open_popup="true" + quick_add="false" + date_start="start" + date_stop="stop" + all_day="allday" + mode="month"/>`, + archs: archs, + viewOptions: { + initialDate: initialDate, + }, + }); + + assert.containsNone(calendar, '.o_cw_popover'); + + await testUtils.dom.click(calendar.el.querySelector('.fc-event .fc-content')); + assert.containsOnce(calendar, '.o_cw_popover', + 'open popup when click on event'); + + await testUtils.dom.click(calendar.el.querySelector('.o_cw_body')); + assert.containsOnce(calendar, '.o_cw_popover', + 'keep popup openned when click inside popup'); + + await testUtils.dom.click(calendar.el.querySelector('.o_content')); + assert.containsNone(calendar, '.o_cw_popover', + 'close popup when click outside popup'); + + calendar.destroy(); + }); }); }); |
