From ba6db34aea18e3b62b36d429434765c4ad2f5aa6 Mon Sep 17 00:00:00 2001 From: Mohamed Eltayar <152964073+maltayyar2@users.noreply.github.com> Date: Wed, 17 Sep 2025 11:42:14 +0300 Subject: [PATCH] Fix both Gregorian and Hijri calendars not hiding on outside click - Final solution --- .../static/src/js/web_hijri_date.js | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/odex25_base/web_hijri_datepicker/static/src/js/web_hijri_date.js b/odex25_base/web_hijri_datepicker/static/src/js/web_hijri_date.js index eb7b56acd..38d6b9640 100644 --- a/odex25_base/web_hijri_datepicker/static/src/js/web_hijri_date.js +++ b/odex25_base/web_hijri_datepicker/static/src/js/web_hijri_date.js @@ -92,17 +92,26 @@ odoo.define('web_hijri_datepicker.datepicker', function (require) { var self = this; this._outsideClickHandler = function(e) { var $target = $(e.target); - if (!$target.closest('.calendars-popup').length && - !$target.closest('.o_hijri').length && - !$target.hasClass('o_hijri') && - !$target.closest('.calendars').length) { - self._hideHijriCalendar(); + + var shouldIgnore = $target.closest('.calendars-popup').length || + $target.closest('.o_hijri').length || + $target.hasClass('o_hijri') || + $target.closest('.calendars').length || + $target.closest('.bootstrap-datetimepicker-widget').length || + $target.closest('.datepicker').length || + $target.hasClass('o_datepicker_input') || + $target.hasClass('o_datepicker_button') || + $target.closest('.datetimepicker').length || + $target.closest('.datetimepicker-dropdown').length; + + if (!shouldIgnore) { + self._hideAllCalendars(); } }; this._keydownHandler = function(e) { if (e.keyCode === 27) { - self._hideHijriCalendar(); + self._hideAllCalendars(); } }; @@ -115,10 +124,17 @@ odoo.define('web_hijri_datepicker.datepicker', function (require) { $(document).off('keydown.hijri_calendar'); }, - _hideHijriCalendar: function() { + _hideAllCalendars: function() { if (this.$input_hijri && this.$input_hijri.calendarsPicker) { this.$input_hijri.calendarsPicker('hide'); } + if (this.$el && this.$el.data('DateTimePicker')) { + this.$el.data('DateTimePicker').hide(); + } else if (this.$el && this.$el.datetimepicker) { + try { + this.$el.datetimepicker('hide'); + } catch (e) {} + } }, changeDatetime: function () { @@ -161,7 +177,7 @@ odoo.define('web_hijri_datepicker.datepicker', function (require) { var date_value = moment(time.str_to_date(formatted_date)).add(1, 'days'); this.setValue(this._parseClient(date_value)); this.trigger("datetime_changed"); - this._hideHijriCalendar(); + this._hideAllCalendars(); }, _parseDate: function (v) {