From b6ab4599a45799101c3f7c7206928d773557d87b Mon Sep 17 00:00:00 2001 From: Mohamed Eltayar <152964073+maltayyar2@users.noreply.github.com> Date: Wed, 17 Sep 2025 12:35:39 +0300 Subject: [PATCH] Final Fix: Remove interference with default datepicker behavior - Use unique event namespaces --- .../static/src/js/web_hijri_date.js | 50 +++++++------------ 1 file changed, 19 insertions(+), 31 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 38d6b9640..925f9c09d 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 @@ -93,48 +93,34 @@ odoo.define('web_hijri_datepicker.datepicker', function (require) { this._outsideClickHandler = function(e) { var $target = $(e.target); - 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; + var isClickingOnThisWidget = $target.closest(self.$el).length; + var isHijriElement = $target.closest('.calendars-popup').length || + $target.closest('.o_hijri').length || + $target.hasClass('o_hijri') || + $target.closest('.calendars').length; - if (!shouldIgnore) { - self._hideAllCalendars(); + if (!isClickingOnThisWidget && !isHijriElement) { + if (self.$input_hijri && self.$input_hijri.calendarsPicker) { + self.$input_hijri.calendarsPicker('hide'); + } } }; this._keydownHandler = function(e) { if (e.keyCode === 27) { - self._hideAllCalendars(); + if (self.$input_hijri && self.$input_hijri.calendarsPicker) { + self.$input_hijri.calendarsPicker('hide'); + } } }; - $(document).on('click.hijri_calendar', this._outsideClickHandler); - $(document).on('keydown.hijri_calendar', this._keydownHandler); + $(document).on('click.hijri_calendar_' + this.cid, this._outsideClickHandler); + $(document).on('keydown.hijri_calendar_' + this.cid, this._keydownHandler); }, _removeOutsideClickHandler: function() { - $(document).off('click.hijri_calendar'); - $(document).off('keydown.hijri_calendar'); - }, - - _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) {} - } + $(document).off('click.hijri_calendar_' + this.cid); + $(document).off('keydown.hijri_calendar_' + this.cid); }, changeDatetime: function () { @@ -177,7 +163,9 @@ 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._hideAllCalendars(); + if (this.$input_hijri && this.$input_hijri.calendarsPicker) { + this.$input_hijri.calendarsPicker('hide'); + } }, _parseDate: function (v) {